getMessagesForSync method
Returns messages that should be sent to a specific peer during sync.
This includes:
- Messages targeting the peer's node ID directly
- Broadcast messages (targetId == '*')
- Messages still pending/sent that have TTL > 0
- Excludes messages already delivered to this peer (per-peer dedup)
Implementation
Future<List<Message>> getMessagesForSync(String peerNodeId) async {
// Get IDs of messages already delivered to this peer
final deliveredIds = await (selectOnly(messageDeliveries)
..addColumns([messageDeliveries.messageId])
..where(messageDeliveries.peerNodeId.equals(peerNodeId)))
.map((row) => row.read(messageDeliveries.messageId)!)
.get();
// Query eligible messages, excluding already-delivered ones
var query = select(messages)
..where((t) =>
t.ttl.isBiggerThanValue(0) &
(t.status.equals(MessageStatus.pending.value) |
t.status.equals(MessageStatus.sent.value)));
if (deliveredIds.isNotEmpty) {
query = query..where((t) => t.messageId.isNotIn(deliveredIds));
}
return query.get();
}