markMessagesAsReadByPredicate function
Future<void>
markMessagesAsReadByPredicate(})
Mark messages matching predicate as read, leaving others unread.
Implementation
Future<void> markMessagesAsReadByPredicate(
String agentName,
bool Function(TeammateMessage) predicate, {
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 (messages.isEmpty) return;
final updated = messages.map((m) {
if (!m.read && predicate(m)) return m.copyWith(read: true);
return m;
}).toList();
final encoder = const JsonEncoder.withIndent(' ');
await File(
inboxPath,
).writeAsString(encoder.convert(updated.map((m) => m.toJson()).toList()));
} on PathNotFoundException {
return;
} catch (_) {
} finally {
await _releaseLock(lock);
}
}