mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
Enhance message merging logic and improve USB port listing
This commit is contained in:
parent
ab2b509d6a
commit
0565cee461
2 changed files with 16 additions and 9 deletions
|
|
@ -385,13 +385,23 @@ class MeshCoreConnector extends ChangeNotifier {
|
|||
final currentMessages =
|
||||
_conversations[contactKeyHex] ?? const <Message>[];
|
||||
final mergedMessages = <Message>[...windowedMessages];
|
||||
final existingKeys = <String>{
|
||||
for (final message in windowedMessages) _messageMergeKey(message),
|
||||
};
|
||||
final persistedKeyCounts = <String, int>{};
|
||||
for (final message in windowedMessages) {
|
||||
final key = _messageMergeKey(message);
|
||||
persistedKeyCounts[key] = (persistedKeyCounts[key] ?? 0) + 1;
|
||||
}
|
||||
final currentKeyCounts = <String, int>{};
|
||||
|
||||
for (final message in currentMessages) {
|
||||
final key = _messageMergeKey(message);
|
||||
if (existingKeys.add(key)) {
|
||||
final currentCount = (currentKeyCounts[key] ?? 0) + 1;
|
||||
currentKeyCounts[key] = currentCount;
|
||||
final persistedCount = persistedKeyCounts[key] ?? 0;
|
||||
|
||||
// Preserve distinct duplicates without IDs (for example same text
|
||||
// received multiple times in the same second) by only skipping the
|
||||
// overlapping occurrences that already exist in persisted storage.
|
||||
if (currentCount > persistedCount) {
|
||||
mergedMessages.add(message);
|
||||
}
|
||||
}
|
||||
|
|
@ -413,7 +423,7 @@ class MeshCoreConnector extends ChangeNotifier {
|
|||
if (messageId != null && messageId.isNotEmpty) {
|
||||
return 'id:$messageId';
|
||||
}
|
||||
return 'fallback:${message.isOutgoing}:${message.timestamp.millisecondsSinceEpoch}:${message.text}';
|
||||
return 'fallback:${message.senderKeyHex}:${message.isOutgoing}:${message.isCli}:${message.timestamp.millisecondsSinceEpoch}:${message.text}';
|
||||
}
|
||||
|
||||
/// Load older messages for a contact (pagination)
|
||||
|
|
|
|||
|
|
@ -57,10 +57,7 @@ class UsbSerialService {
|
|||
|
||||
_resetPortCache();
|
||||
final ports = await _getAuthorizedPorts();
|
||||
if (ports.isEmpty) {
|
||||
return <String>[_requestPortListEntry];
|
||||
}
|
||||
return ports.map(_listEntryForPort).toList(growable: false);
|
||||
return <String>[_requestPortListEntry, ...ports.map(_listEntryForPort)];
|
||||
}
|
||||
|
||||
Future<void> connect({
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue