more smaller bug fixes

This commit is contained in:
otsmr 2026-04-22 18:28:36 +02:00
parent c197cb797e
commit be35336a5d
3 changed files with 56 additions and 12 deletions

View file

@ -184,14 +184,27 @@ class MessagesDao extends DatabaseAccessor<TwonlyDB> with _$MessagesDaoMixin {
return; return;
} }
if (msg.mediaId != null && contactId != null) { if (msg.mediaId != null && contactId != null) {
// contactId -> When a image is send to multiple and one message is delete the image should be still available... final otherMessagesWithSameMedia = await (select(messages)
await (delete( ..where(
mediaFiles, (t) =>
)..where((t) => t.mediaId.equals(msg.mediaId!))).go(); t.mediaId.equals(msg.mediaId!) &
t.messageId.equals(messageId).not(),
))
.get();
final mediaService = await MediaFileService.fromMediaId(msg.mediaId!); if (otherMessagesWithSameMedia.isEmpty) {
if (mediaService != null) { await (delete(
mediaService.fullMediaRemoval(); mediaFiles,
)..where((t) => t.mediaId.equals(msg.mediaId!))).go();
final mediaService = await MediaFileService.fromMediaId(msg.mediaId!);
if (mediaService != null) {
mediaService.fullMediaRemoval();
}
} else {
Log.info(
'Media ${msg.mediaId} is still used by ${otherMessagesWithSameMedia.length} other messages. Skipping physical deletion.',
);
} }
} }
await (delete( await (delete(

View file

@ -204,11 +204,42 @@ Future<void> finishStartedPreprocessing() async {
// media files was just stored.. // media files was just stored..
continue; continue;
} }
Log.info( if (mediaFile.reuploadRequestedBy != null) {
'Deleted media files, as originalPath and uploadRequestPath both do not exists', Log.warn(
'Reupload requested for ${mediaFile.mediaId} but files are missing. Cancelling reupload but keeping record.',
);
await twonlyDB.mediaFilesDao.updateMedia(
mediaFile.mediaId,
const MediaFilesCompanion(
uploadState: Value(UploadState.uploaded),
reuploadRequestedBy: Value(null),
),
);
continue;
}
final messages = await twonlyDB.messagesDao.getMessagesByMediaId(
mediaFile.mediaId,
); );
// the file does not exists anymore.
await twonlyDB.mediaFilesDao.deleteMediaFile(mediaFile.mediaId); if (messages.isEmpty) {
Log.info(
'Deleted media files ${mediaFile.mediaId} as originalPath and uploadRequestPath both do not exists and no messages reference it.',
);
// the file does not exists anymore and no messages reference it.
await twonlyDB.mediaFilesDao.deleteMediaFile(mediaFile.mediaId);
} else {
Log.warn(
'Media files ${mediaFile.mediaId} missing but messages still reference it. Keeping record to avoid broken chat history.',
);
// Just mark as uploaded to stop preprocessing attempts
await twonlyDB.mediaFilesDao.updateMedia(
mediaFile.mediaId,
const MediaFilesCompanion(
uploadState: Value(UploadState.uploaded),
),
);
}
continue; continue;
} }
Log.info( Log.info(

View file

@ -78,7 +78,7 @@ class MediaFileService {
final group = await twonlyDB.groupsDao.getGroup( final group = await twonlyDB.groupsDao.getGroup(
message.groupId, message.groupId,
); );
if (group != null && !group.isDirectChat) { if (group != null) {
delete = false; delete = false;
} }
} }