writeToMailbox function
Write a message to a teammate's inbox. Uses file locking via a .lock file sentinel to prevent race conditions.
Implementation
Future<void> writeToMailbox(
String recipientName,
TeammateMessage message, {
String? teamName,
}) async {
await _ensureInboxDir(teamName: teamName);
final inboxPath = getInboxPath(recipientName, teamName: teamName);
final lockFilePath = '$inboxPath.lock';
// Ensure the inbox file exists before locking.
final inboxFile = File(inboxPath);
if (!inboxFile.existsSync()) {
try {
await inboxFile.writeAsString('[]');
} catch (_) {}
}
final lock = File(lockFilePath);
try {
await _acquireLock(lock);
final messages = await readMailbox(recipientName, teamName: teamName);
final newMessage = TeammateMessage(
from: message.from,
text: message.text,
timestamp: message.timestamp,
read: false,
color: message.color,
summary: message.summary,
);
messages.add(newMessage);
final encoder = const JsonEncoder.withIndent(' ');
await inboxFile.writeAsString(
encoder.convert(messages.map((m) => m.toJson()).toList()),
);
} catch (e) {
// Silently fail — the message will be lost but the process continues.
} finally {
await _releaseLock(lock);
}
}