markMessageAsReadByIndex function

Future<void> markMessageAsReadByIndex(
  1. String agentName,
  2. int messageIndex, {
  3. String? teamName,
})

Mark a specific message as read by index.

Implementation

Future<void> markMessageAsReadByIndex(
  String agentName,
  int messageIndex, {
  String? teamName,
}) async {
  final inboxPath = getInboxPath(agentName, teamName: teamName);
  final lockFilePath = '$inboxPath.lock';
  final lock = File(lockFilePath);

  try {
    await _acquireLock(lock);

    final messages = await readMailbox(agentName, teamName: teamName);
    if (messageIndex < 0 || messageIndex >= messages.length) return;

    final msg = messages[messageIndex];
    if (msg.read) return;

    messages[messageIndex] = msg.copyWith(read: true);

    final encoder = const JsonEncoder.withIndent('  ');
    await File(
      inboxPath,
    ).writeAsString(encoder.convert(messages.map((m) => m.toJson()).toList()));
  } on PathNotFoundException {
    return;
  } catch (_) {
    // Silently fail.
  } finally {
    await _releaseLock(lock);
  }
}