If we already have a file by this hash, let's just use it

Stephen Paul Weber created

Was already the case for BobTransfer, but here we do it before looking to see
what kind of transfers are supported.  Even if there are no sources at all, if
we have this has already it'll work.

Change summary

src/main/java/eu/siacs/conversations/parser/MessageParser.java | 17 +++
1 file changed, 16 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -5,6 +5,7 @@ import android.util.Pair;
 
 import com.cheogram.android.BobTransfer;
 
+import java.io.File;
 import java.net.URISyntaxException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -18,6 +19,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import io.ipfs.cid.Cid;
+
 import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.crypto.axolotl.AxolotlService;
@@ -775,9 +778,21 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
                 processMessageReceipts(account, packet, remoteMsgId, query);
             }
 
+            if (message.getFileParams() != null) {
+                for (Cid cid : message.getFileParams().getCids()) {
+                    File f = mXmppConnectionService.getFileForCid(cid);
+                    if (f != null && f.canRead()) {
+                        message.setRelativeFilePath(f.getAbsolutePath());
+                        mXmppConnectionService.getFileBackend().updateFileParams(message, null, false);
+                        break;
+                    }
+                }
+            }
+
             mXmppConnectionService.databaseBackend.createMessage(message);
+
             final HttpConnectionManager manager = this.mXmppConnectionService.getHttpConnectionManager();
-            if (message.trusted() && message.treatAsDownloadable() && manager.getAutoAcceptFileSize() > 0) {
+            if (message.getRelativeFilePath() == null && message.trusted() && message.treatAsDownloadable() && manager.getAutoAcceptFileSize() > 0) {
                 if (message.getOob() != null && message.getOob().getScheme().equalsIgnoreCase("cid")) {
                     try {
                         BobTransfer transfer = new BobTransfer.ForMessage(message, mXmppConnectionService);