From 41493894cb972f17ebaa82937d62de48f578cb05 Mon Sep 17 00:00:00 2001 From: otsmr Date: Fri, 2 May 2025 20:42:06 +0200 Subject: [PATCH] fix crash --- lib/src/database/daos/messages_dao.dart | 15 +++++++++--- lib/src/providers/api/media_received.dart | 29 +++++++++++------------ 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/lib/src/database/daos/messages_dao.dart b/lib/src/database/daos/messages_dao.dart index a12fd3f..e3025e6 100644 --- a/lib/src/database/daos/messages_dao.dart +++ b/lib/src/database/daos/messages_dao.dart @@ -187,9 +187,18 @@ class MessagesDao extends DatabaseAccessor return select(messages)..where((t) => t.messageId.equals(messageId)); } - SingleOrNullSelectable getMessageByMediaUploadId(int mediaUploadId) { - return select(messages) - ..where((t) => t.mediaUploadId.equals(mediaUploadId)); + Future getMessageByMediaUploadId(int mediaUploadId) async { + List msgs = await (select(messages) + ..where((t) => t.mediaUploadId.equals(mediaUploadId))) + .get(); + if (msgs.isEmpty) return null; + if (msgs.length == 1) return msgs[0]; + + /// when there are multiple message ids with this id delete all but the last one + for (var i = 0; i < (msgs.length - 1); i++) { + await deleteMessageById(msgs[i].messageId); + } + return msgs[msgs.length - 1]; } SingleOrNullSelectable getMessageByOtherMessageId( diff --git a/lib/src/providers/api/media_received.dart b/lib/src/providers/api/media_received.dart index 9edc564..c15a775 100644 --- a/lib/src/providers/api/media_received.dart +++ b/lib/src/providers/api/media_received.dart @@ -333,24 +333,23 @@ Future purgeMediaFiles(Directory directory) async { // Parse the integer and add it to the list int fileId = int.parse(match.group(0)!); - Message? message = (directory.path.endsWith("send")) - ? await twonlyDatabase.messagesDao - .getMessageByMediaUploadId(fileId) - .getSingleOrNull() - : await twonlyDatabase.messagesDao - .getMessageByMessageId(fileId) - .getSingleOrNull(); + try { + Message? message = (directory.path.endsWith("send")) + ? await twonlyDatabase.messagesDao + .getMessageByMediaUploadId(fileId) + : await twonlyDatabase.messagesDao + .getMessageByMessageId(fileId) + .getSingleOrNull(); - if ((message == null) || - (message.openedAt != null && - !message.mediaStored && - message.acknowledgeByServer == true) || - message.errorWhileSending) { - try { + if ((message == null) || + (message.openedAt != null && + !message.mediaStored && + message.acknowledgeByServer == true) || + message.errorWhileSending) { file.deleteSync(); - } catch (e) { - Logger("media_received.dart").shout("$e"); } + } catch (e) { + Logger("media_received.dart").shout("$e"); } } }