recordTranscript method

Future<String?> recordTranscript(
  1. Transcript messages, {
  2. String? startingParentUuidHint,
})

Record a transcript (public API, deduplicates against already-recorded).

Implementation

Future<String?> recordTranscript(
  Transcript messages, {
  String? startingParentUuidHint,
}) async {
  final messageSet = await _getSessionMessages(_sessionId);
  final newMessages = <Map<String, dynamic>>[];
  String? startingParentUuid = startingParentUuidHint;
  var seenNewMessage = false;

  for (final m in messages) {
    final uuid = m['uuid'] as String?;
    if (uuid != null && messageSet.contains(uuid)) {
      if (!seenNewMessage && m['type'] != 'progress') {
        startingParentUuid = uuid;
      }
    } else {
      newMessages.add(m);
      seenNewMessage = true;
    }
  }

  if (newMessages.isNotEmpty) {
    await insertMessageChain(
      newMessages,
      startingParentUuid: startingParentUuid,
    );
  }

  // Return last recorded chain participant's UUID.
  final lastRecorded = newMessages.lastWhere(
    (m) => m['type'] != 'progress',
    orElse: () => <String, dynamic>{},
  );
  return (lastRecorded['uuid'] as String?) ?? startingParentUuid;
}