From 24efc76c02d81c06c3e22967e798f21ce10960f6 Mon Sep 17 00:00:00 2001 From: otsmr Date: Mon, 1 Jun 2026 23:39:12 +0200 Subject: [PATCH] fix: add logging and hide non-downloaded images --- lib/src/database/daos/messages.dao.dart | 44 +++++++++++-------- .../services/api/mediafiles/download.api.dart | 2 +- pubspec.yaml | 2 +- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/lib/src/database/daos/messages.dao.dart b/lib/src/database/daos/messages.dao.dart index 8b5348be..5c280a69 100644 --- a/lib/src/database/daos/messages.dao.dart +++ b/lib/src/database/daos/messages.dao.dart @@ -93,24 +93,32 @@ class MessagesDao extends DatabaseAccessor with _$MessagesDaoMixin { milliseconds: group!.deleteMessagesAfterMilliseconds, ), ); - return ((select(messages)..where( - (t) => - t.groupId.equals(groupId) & - // messages in groups will only be removed in case all members have received it... - // so ensuring that this message is not shown in the messages anymore - (t.openedAt.isBiggerThanValue(deletionTime) | - t.openedAt.isNull() | - t.mediaStored.equals(true)) & - (t.isDeletedFromSender.equals(true) | - (t.type.equals(MessageType.text.name).not() & - t.type.equals(MessageType.media.name).not()) | - (t.type.equals(MessageType.text.name) & - t.content.isNotNull()) | - (t.type.equals(MessageType.media.name) & - t.mediaId.isNotNull())), - )) - ..orderBy([(t) => OrderingTerm.asc(t.createdAt)])) - .watch(); + final query = select(messages).join([ + leftOuterJoin( + mediaFiles, + mediaFiles.mediaId.equalsExp(messages.mediaId), + ), + ]) + ..where( + messages.groupId.equals(groupId) & + (messages.openedAt.isBiggerThanValue(deletionTime) | + messages.openedAt.isNull() | + messages.mediaStored.equals(true)) & + (messages.isDeletedFromSender.equals(true) | + (messages.type.equals(MessageType.text.name).not() & + messages.type.equals(MessageType.media.name).not()) | + (messages.type.equals(MessageType.text.name) & + messages.content.isNotNull()) | + (messages.type.equals(MessageType.media.name) & + messages.mediaId.isNotNull() & + (mediaFiles.downloadState.isNull() | + mediaFiles.downloadState + .equals(DownloadState.reuploadRequested.name) + .not()))), + ) + ..orderBy([OrderingTerm.asc(messages.createdAt)]); + + return query.map((row) => row.readTable(messages)).watch(); } Stream> watchMembersByGroupId(String groupId) { diff --git a/lib/src/services/api/mediafiles/download.api.dart b/lib/src/services/api/mediafiles/download.api.dart index 541a06da..0218275d 100644 --- a/lib/src/services/api/mediafiles/download.api.dart +++ b/lib/src/services/api/mediafiles/download.api.dart @@ -252,7 +252,7 @@ Future downloadFileFast( } else { if (response.statusCode == 404 || response.statusCode == 403) { Log.error( - 'Got ${response.statusCode} from server. Requesting upload again', + 'Got ${response.statusCode} from server for media ID ${media.mediaId}. Requesting upload again', ); // Message was deleted from the server. Requesting it again from the sender to upload it again... await requestMediaReupload(media.mediaId); diff --git a/pubspec.yaml b/pubspec.yaml index 31b7386e..e03873b6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec publish_to: 'none' -version: 0.2.26+135 +version: 0.2.27+136 environment: sdk: ^3.11.0