Delete thumbnail when file deleted or message moderated

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/parser/MessageParser.java    | 15 +
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 13 
2 files changed, 28 insertions(+)

Detailed changes

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<Element> 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);

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<Element> 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));