This commit is contained in:
otsmr 2025-05-03 14:21:39 +02:00
parent 1d459a6719
commit 4cc6215cda
2 changed files with 26 additions and 22 deletions

View file

@ -187,18 +187,10 @@ class MessagesDao extends DatabaseAccessor<TwonlyDatabase>
return select(messages)..where((t) => t.messageId.equals(messageId));
}
Future<Message?> getMessageByMediaUploadId(int mediaUploadId) async {
List<Message> msgs = await (select(messages)
Future<List<Message>> getMessagesByMediaUploadId(int mediaUploadId) async {
return 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<Message> getMessageByOtherMessageId(

View file

@ -334,19 +334,31 @@ Future<void> purgeMediaFiles(Directory directory) async {
int fileId = int.parse(match.group(0)!);
try {
Message? message = (directory.path.endsWith("send"))
? await twonlyDatabase.messagesDao
.getMessageByMediaUploadId(fileId)
: await twonlyDatabase.messagesDao
.getMessageByMessageId(fileId)
.getSingleOrNull();
if (directory.path.endsWith("send")) {
List<Message> messages = await twonlyDatabase.messagesDao
.getMessagesByMediaUploadId(fileId);
bool canBeDeleted = true;
if ((message == null) ||
(message.openedAt != null &&
!message.mediaStored &&
message.acknowledgeByServer == true) ||
message.errorWhileSending) {
file.deleteSync();
for (final message in messages) {
if ((message.openedAt == null && !message.errorWhileSending) ||
message.mediaStored) {
canBeDeleted = false;
}
}
if (canBeDeleted) {
file.deleteSync();
}
} else {
Message? message = await twonlyDatabase.messagesDao
.getMessageByMessageId(fileId)
.getSingleOrNull();
if ((message == null) ||
(message.openedAt != null &&
!message.mediaStored &&
message.acknowledgeByServer == true) ||
message.errorWhileSending) {
file.deleteSync();
}
}
} catch (e) {
Logger("media_received.dart").shout("$e");