Allow attaching https URLs directly

Stephen Paul Weber created

Download instead of upload.

Change summary

src/main/java/eu/siacs/conversations/services/AttachFileToConversationRunnable.java | 14 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java            |  1 
src/main/java/eu/siacs/conversations/ui/util/Attachment.java                        |  2 
3 files changed, 13 insertions(+), 4 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/AttachFileToConversationRunnable.java 🔗

@@ -32,6 +32,7 @@ public class AttachFileToConversationRunnable implements Runnable, TranscoderLis
     private final XmppConnectionService mXmppConnectionService;
     private final Message message;
     private final Uri uri;
+    private final String mimeType;
     private final String type;
     private final UiCallback<Message> callback;
     private final boolean isVideoMessage;
@@ -44,7 +45,7 @@ public class AttachFileToConversationRunnable implements Runnable, TranscoderLis
         this.mXmppConnectionService = xmppConnectionService;
         this.message = message;
         this.callback = callback;
-        final String mimeType = MimeUtils.guessMimeTypeFromUriAndMime(mXmppConnectionService, uri, type);
+        mimeType = MimeUtils.guessMimeTypeFromUriAndMime(mXmppConnectionService, uri, type);
         final int autoAcceptFileSize = mXmppConnectionService.getResources().getInteger(R.integer.auto_accept_filesize);
         this.originalFileSize = FileBackend.getFileSize(mXmppConnectionService, uri);
         this.isVideoMessage = (mimeType != null && mimeType.startsWith("video/")) && originalFileSize > autoAcceptFileSize && !"uncompressed".equals(getVideoCompression());
@@ -56,7 +57,16 @@ public class AttachFileToConversationRunnable implements Runnable, TranscoderLis
 
     private void processAsFile() {
         final String path = mXmppConnectionService.getFileBackend().getOriginalPath(uri);
-        if (path != null && !FileBackend.isPathBlacklisted(path)) {
+        if ("https".equals(uri.getScheme())) {
+            message.getFileParams().url = uri.toString();
+            message.getFileParams().setMediaType(mimeType);
+            final int encryption = message.getEncryption();
+            mXmppConnectionService.getHttpConnectionManager().createNewDownloadConnection(message, false, (file) -> {
+                message.setEncryption(encryption);
+                mXmppConnectionService.sendMessage(message);
+                callback.success(message);
+            });
+        } else if (path != null && !FileBackend.isPathBlacklisted(path)) {
             message.setRelativeFilePath(path);
             mXmppConnectionService.getFileBackend().updateFileParams(message);
             if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -719,7 +719,6 @@ public class XmppConnectionService extends Service {
         if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) {
             message.setEncryption(Message.ENCRYPTION_DECRYPTED);
         }
-        if (subject.length() > 0) message.setSubject(subject);
         if (subject != null && subject.length() > 0) message.setSubject(subject);
         message.setThread(conversation.getThread());
         if (!Message.configurePrivateFileMessage(message)) {

src/main/java/eu/siacs/conversations/ui/util/Attachment.java 🔗

@@ -131,7 +131,7 @@ public class Attachment implements Parcelable {
 
     public static boolean canBeSendInBand(final List<Attachment> attachments) {
         for (final Attachment attachment : attachments) {
-            if (attachment.type != Type.LOCATION) {
+            if (attachment.type != Type.LOCATION && !"https".equals(attachment.uri.getScheme())) {
                 return false;
             }
         }