searchSessionsByCustomTitle function

Future<List<Map<String, String>>> searchSessionsByCustomTitle(
  1. String projectDir,
  2. String pattern, {
  3. bool exact = false,
})

Search for sessions matching a custom title pattern. Returns a list of maps with sessionId and customTitle fields.

Implementation

Future<List<Map<String, String>>> searchSessionsByCustomTitle(
  String projectDir,
  String pattern, {
  bool exact = false,
}) async {
  final results = <Map<String, String>>[];
  final dir = Directory(projectDir);
  if (!await dir.exists()) return results;

  await for (final entity in dir.list()) {
    if (entity is File && entity.path.endsWith('.meta.json')) {
      try {
        final content = await entity.readAsString();
        final meta = jsonDecode(content) as Map<String, dynamic>;
        final customTitle = meta['customTitle'] as String?;
        if (customTitle == null) continue;

        if (exact) {
          if (customTitle == pattern) {
            final sessionId = p
                .basenameWithoutExtension(entity.path)
                .replaceAll('.meta', '');
            results.add({'sessionId': sessionId, 'customTitle': customTitle});
          }
        } else {
          if (customTitle.contains(pattern)) {
            final sessionId = p
                .basenameWithoutExtension(entity.path)
                .replaceAll('.meta', '');
            results.add({'sessionId': sessionId, 'customTitle': customTitle});
          }
        }
      } catch (_) {
        // Skip malformed meta files
      }
    }
  }
  return results;
}