listConversations method
List all conversations, newest first.
Implementation
Future<List<ConversationSummary>> listConversations({
int? limit,
int offset = 0,
String? searchQuery,
}) async {
final dir = Directory(_sessionsDir);
if (!await dir.exists()) return [];
final summaries = <ConversationSummary>[];
await for (final entity in dir.list()) {
if (entity is Directory) {
final summaryFile = File(p.join(entity.path, 'summary.json'));
if (await summaryFile.exists()) {
try {
final content = await summaryFile.readAsString();
final json = jsonDecode(content) as Map<String, dynamic>;
final summary = ConversationSummary.fromJson(json);
// Apply search filter
if (searchQuery != null && searchQuery.isNotEmpty) {
final q = searchQuery.toLowerCase();
if (!(summary.title?.toLowerCase().contains(q) ?? false) &&
!(summary.lastUserMessage?.toLowerCase().contains(q) ??
false)) {
continue;
}
}
summaries.add(summary);
} catch (_) {
// Skip corrupted summaries
}
}
}
}
// Sort by last active time, newest first
summaries.sort((a, b) => b.lastActiveAt.compareTo(a.lastActiveAt));
// Apply pagination
final start = offset.clamp(0, summaries.length);
final end = limit != null
? (start + limit).clamp(0, summaries.length)
: summaries.length;
return summaries.sublist(start, end);
}