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