From 7497fc6103889d142cb306cc94178baa1819df70 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 15 May 2023 16:17:54 -0500 Subject: [PATCH] Delete thumbnail when file deleted or message moderated --- .../siacs/conversations/parser/MessageParser.java | 15 +++++++++++++++ .../conversations/ui/ConversationFragment.java | 13 +++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index a92c691b8356135e1f08678df7f5f92138646baa..a335200a36e857b2ff09e52d81e6e518b46ce26f 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -1,5 +1,6 @@ package eu.siacs.conversations.parser; +import android.net.Uri; import android.util.Log; import android.util.Pair; @@ -34,6 +35,7 @@ import eu.siacs.conversations.entities.Bookmark; import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Conversational; +import eu.siacs.conversations.entities.DownloadableFile; import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.MucOptions; import eu.siacs.conversations.entities.ReadByMarker; @@ -752,6 +754,19 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece if (replaceElement != null && !replaceElement.getName().equals("replace")) { mXmppConnectionService.getFileBackend().deleteFile(replacedMessage); mXmppConnectionService.evictPreview(message.getUuid()); + List thumbs = replacedMessage.getFileParams() != null ? replacedMessage.getFileParams().getThumbnails() : null; + if (thumbs != null && !thumbs.isEmpty()) { + for (Element thumb : thumbs) { + Uri uri = Uri.parse(thumb.getAttribute("uri")); + if (uri.getScheme().equals("cid")) { + Cid cid = BobTransfer.cid(uri); + if (cid == null) continue; + DownloadableFile f = mXmppConnectionService.getFileForCid(cid); + mXmppConnectionService.evictPreview(f); + f.delete(); + } + } + } replacedMessage.clearPayloads(); replacedMessage.setFileParams(null); replacedMessage.setDeleted(true); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index f3a0491664ead81a9130f553f97d0aef3ea775d7..c1863b1dac4a78d6ff4df395d422a918563b29f3 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -2515,6 +2515,19 @@ public class ConversationFragment extends XmppFragment builder.setPositiveButton( R.string.confirm, (dialog, which) -> { + List thumbs = selectedMessage.getFileParams() != null ? selectedMessage.getFileParams().getThumbnails() : null; + if (thumbs != null && !thumbs.isEmpty()) { + for (Element thumb : thumbs) { + Uri uri = Uri.parse(thumb.getAttribute("uri")); + if (uri.getScheme().equals("cid")) { + Cid cid = BobTransfer.cid(uri); + if (cid == null) continue; + DownloadableFile f = activity.xmppConnectionService.getFileForCid(cid); + activity.xmppConnectionService.evictPreview(f); + f.delete(); + } + } + } if (activity.xmppConnectionService.getFileBackend().deleteFile(message)) { message.setDeleted(true); activity.xmppConnectionService.evictPreview(activity.xmppConnectionService.getFileBackend().getFile(message));