feat(chat): add ChatHistoryRepository with shared_preferences
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import 'dart:convert';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class ChatHistoryRepository {
|
||||
static const String _messagesKey = 'chat_messages_';
|
||||
static const String _lastRunIdKey = 'chat_last_run_id_';
|
||||
static const String _calendarEventsKey = 'calendar_events';
|
||||
|
||||
final String threadId;
|
||||
|
||||
ChatHistoryRepository({this.threadId = 'default'});
|
||||
|
||||
String get _msgKey => '$_messagesKey$threadId';
|
||||
String get _runIdKey => '$_lastRunIdKey$threadId';
|
||||
|
||||
Future<void> saveMessages(List<Map<String, dynamic>> messages) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_msgKey, jsonEncode(messages));
|
||||
}
|
||||
|
||||
Future<List<Map<String, dynamic>>?> loadMessages() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final data = prefs.getString(_msgKey);
|
||||
if (data == null) return null;
|
||||
final list = jsonDecode(data) as List;
|
||||
return list.cast<Map<String, dynamic>>();
|
||||
}
|
||||
|
||||
Future<void> saveLastRunId(String runId) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_runIdKey, runId);
|
||||
}
|
||||
|
||||
Future<String?> loadLastRunId() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
return prefs.getString(_runIdKey);
|
||||
}
|
||||
|
||||
Future<void> clear() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove(_msgKey);
|
||||
await prefs.remove(_runIdKey);
|
||||
}
|
||||
|
||||
Future<void> saveCalendarEvent(Map<String, dynamic> event) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final eventsJson = prefs.getString(_calendarEventsKey);
|
||||
final events = eventsJson != null
|
||||
? jsonDecode(eventsJson) as Map<String, dynamic>
|
||||
: <String, dynamic>{};
|
||||
events[event['id']] = event;
|
||||
await prefs.setString(_calendarEventsKey, jsonEncode(events));
|
||||
}
|
||||
|
||||
Future<List<Map<String, dynamic>>> loadCalendarEvents() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final eventsJson = prefs.getString(_calendarEventsKey);
|
||||
if (eventsJson == null) return [];
|
||||
final events = jsonDecode(eventsJson) as Map<String, dynamic>;
|
||||
return events.values.cast<Map<String, dynamic>>().toList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user