diff --git a/lib/database/global/chat_messages.dart b/lib/database/global/chat_messages.dart index 5663304ac4..5f5b6fd70f 100644 --- a/lib/database/global/chat_messages.dart +++ b/lib/database/global/chat_messages.dart @@ -12,14 +12,19 @@ class ChatMessages { List get messages => _messages.values.toList(); List get reactions => _reactions.values.toList(); List get attachments => _attachments.values.toList(); - List threads(String originatorGuid, int originatorPart, {bool returnOriginator = true}) => - _threads[originatorGuid] - ?.values - .where((e) => - (e.normalizedThreadPart == originatorPart && e.guid != originatorGuid) || - (returnOriginator ? e.guid == originatorGuid : false)) - .toList() ?? - []; + List threads(String originatorGuid, int originatorPart, {bool returnOriginator = true}) { + // addMessages only registers the originator when a reply is already in the + // thread map, so a thread whose originator loaded before its replies would + // omit it here. getThreadOriginator registers it on demand. + if (returnOriginator) getThreadOriginator(originatorGuid); + return _threads[originatorGuid] + ?.values + .where((e) => + (e.normalizedThreadPart == originatorPart && e.guid != originatorGuid) || + (returnOriginator && e.guid == originatorGuid)) + .toList() ?? + []; + } void addMessages(List __messages) { for (Message m in __messages) { diff --git a/lib/database/html/message.dart b/lib/database/html/message.dart index 3c6b4b4cf2..a52b02abad 100644 --- a/lib/database/html/message.dart +++ b/lib/database/html/message.dart @@ -447,7 +447,7 @@ class Message { return isFromMe != newerMessage.isFromMe; } - int get normalizedThreadPart => threadOriginatorPart == null ? 0 : int.parse(threadOriginatorPart![0]); + int get normalizedThreadPart => int.tryParse(threadOriginatorPart?.split(':').first ?? '') ?? 0; bool connectToUpper() => threadOriginatorGuid != null; diff --git a/lib/database/io/message.dart b/lib/database/io/message.dart index eceb9f1722..9aa849abf4 100644 --- a/lib/database/io/message.dart +++ b/lib/database/io/message.dart @@ -1243,7 +1243,7 @@ class Message { return "$part:${run.range[0]}:${run.range[1]}"; } - int get normalizedThreadPart => threadOriginatorPart == null ? 0 : int.parse(threadOriginatorPart![0]); + int get normalizedThreadPart => int.tryParse(threadOriginatorPart?.split(':').first ?? '') ?? 0; bool connectToUpper() => threadOriginatorGuid != null;