readSessionStartDate static method

Future<String?> readSessionStartDate(
  1. String filePath
)

Peeks at the head of a session file to get the session start date. Uses a small 4 KB read to avoid loading the full file.

Implementation

static Future<String?> readSessionStartDate(String filePath) async {
  try {
    final file = File(filePath);
    final raf = await file.open(mode: FileMode.read);
    try {
      final buf = List<int>.filled(4096, 0);
      final bytesRead = await raf.readInto(buf);
      if (bytesRead == 0) return null;

      final head = utf8.decode(
        buf.sublist(0, bytesRead),
        allowMalformed: true,
      );
      final lastNewline = head.lastIndexOf('\n');
      if (lastNewline < 0) return null;

      for (final line in head.substring(0, lastNewline).split('\n')) {
        if (line.isEmpty) continue;
        Map<String, dynamic> entry;
        try {
          entry = jsonDecode(line) as Map<String, dynamic>;
        } catch (_) {
          continue;
        }
        final type = entry['type'];
        if (type is! String) continue;
        if (!_transcriptMessageTypes.contains(type)) continue;
        if (entry['isSidechain'] == true) continue;
        final timestamp = entry['timestamp'];
        if (timestamp is! String) return null;
        final date = DateTime.tryParse(timestamp);
        if (date == null) return null;
        return toDateString(date);
      }
      return null;
    } finally {
      await raf.close();
    }
  } catch (_) {
    return null;
  }
}