mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-02 23:10:55 +10:00
Enhance message merging logic and improve USB port listing
This commit is contained in:
@@ -385,13 +385,23 @@ class MeshCoreConnector extends ChangeNotifier {
|
|||||||
final currentMessages =
|
final currentMessages =
|
||||||
_conversations[contactKeyHex] ?? const <Message>[];
|
_conversations[contactKeyHex] ?? const <Message>[];
|
||||||
final mergedMessages = <Message>[...windowedMessages];
|
final mergedMessages = <Message>[...windowedMessages];
|
||||||
final existingKeys = <String>{
|
final persistedKeyCounts = <String, int>{};
|
||||||
for (final message in windowedMessages) _messageMergeKey(message),
|
for (final message in windowedMessages) {
|
||||||
};
|
final key = _messageMergeKey(message);
|
||||||
|
persistedKeyCounts[key] = (persistedKeyCounts[key] ?? 0) + 1;
|
||||||
|
}
|
||||||
|
final currentKeyCounts = <String, int>{};
|
||||||
|
|
||||||
for (final message in currentMessages) {
|
for (final message in currentMessages) {
|
||||||
final key = _messageMergeKey(message);
|
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);
|
mergedMessages.add(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -413,7 +423,7 @@ class MeshCoreConnector extends ChangeNotifier {
|
|||||||
if (messageId != null && messageId.isNotEmpty) {
|
if (messageId != null && messageId.isNotEmpty) {
|
||||||
return 'id:$messageId';
|
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)
|
/// Load older messages for a contact (pagination)
|
||||||
|
|||||||
@@ -57,10 +57,7 @@ class UsbSerialService {
|
|||||||
|
|
||||||
_resetPortCache();
|
_resetPortCache();
|
||||||
final ports = await _getAuthorizedPorts();
|
final ports = await _getAuthorizedPorts();
|
||||||
if (ports.isEmpty) {
|
return <String>[_requestPortListEntry, ...ports.map(_listEntryForPort)];
|
||||||
return <String>[_requestPortListEntry];
|
|
||||||
}
|
|
||||||
return ports.map(_listEntryForPort).toList(growable: false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> connect({
|
Future<void> connect({
|
||||||
|
|||||||
Reference in New Issue
Block a user