aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/thedevstack/conversationsplus/services/filetransfer/http/download/HttpDownloadFileTransferService.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/thedevstack/conversationsplus/services/filetransfer/http/download/HttpDownloadFileTransferService.java')
-rw-r--r--src/main/java/de/thedevstack/conversationsplus/services/filetransfer/http/download/HttpDownloadFileTransferService.java65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/main/java/de/thedevstack/conversationsplus/services/filetransfer/http/download/HttpDownloadFileTransferService.java b/src/main/java/de/thedevstack/conversationsplus/services/filetransfer/http/download/HttpDownloadFileTransferService.java
new file mode 100644
index 00000000..c7fcc430
--- /dev/null
+++ b/src/main/java/de/thedevstack/conversationsplus/services/filetransfer/http/download/HttpDownloadFileTransferService.java
@@ -0,0 +1,65 @@
+package de.thedevstack.conversationsplus.services.filetransfer.http.download;
+
+import de.thedevstack.android.logcat.Logging;
+import de.thedevstack.conversationsplus.ConversationsPlusApplication;
+import de.thedevstack.conversationsplus.entities.FileParams;
+import de.thedevstack.conversationsplus.entities.Message;
+import de.thedevstack.conversationsplus.enums.FileStatus;
+import de.thedevstack.conversationsplus.http.HttpClient;
+import de.thedevstack.conversationsplus.services.filetransfer.AbstractFileTransferService;
+import de.thedevstack.conversationsplus.utils.MessageUtil;
+import de.thedevstack.conversationsplus.utils.XmppConnectionServiceAccessor;
+import okhttp3.Call;
+
+/**
+ *
+ */
+public class HttpDownloadFileTransferService extends AbstractFileTransferService {
+ /**
+ * Transfers a file for the corresponding message.
+ *
+ * @param message the message containing the file to transfer
+ * @return <code>true</code> if the file transfer was successful, <code>false</code> otherwise
+ */
+ @Override
+ public boolean transferFile(Message message) {
+ return this.transferFile(message, false);
+ }
+
+ /**
+ * Transfers a file for the corresponding message.
+ *
+ * @param message the message containing the file to transfer
+ * @param delay whether the message is delayed or not
+ * @return <code>true</code> if the file transfer was successful, <code>false</code> otherwise
+ */
+ @Override
+ public boolean transferFile(Message message, boolean delay) {
+ Logging.d("http-download", "Get file from remote host");
+ final HttpDownloadFileTransferEntity entity = new HttpDownloadFileTransferEntity(message);
+ if (message.getFileParams().getFileStatus() == FileStatus.NEEDS_DOWNLOAD
+ && ConversationsPlusApplication.hasStoragePermission()
+ && XmppConnectionServiceAccessor.xmppConnectionService.isDownloadAllowedInConnection()) {
+ FileParams fileParams = message.getFileParams();
+ MessageUtil.setAndSaveFileStatus(message, FileStatus.DOWNLOADING);
+ entity.wakeLock = ConversationsPlusApplication.createPartialWakeLock("http_download_" + entity.getMessage().getUuid());
+ entity.wakeLock.acquire();
+ Call call = HttpClient.openCancelableAndProgressListenedCall(fileParams.getUrl(), entity, false);
+ call.enqueue(new HttpFileDownloadCallback(entity));
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks whether a message can be sent using this service or not.
+ *
+ * @param message the message to be checked
+ * @return <code>true</code> if the message can be processed, <code>false</code> otherwise
+ */
+ @Override
+ public boolean accept(Message message) {
+ return MessageUtil.needsDownload(message)
+ && message.hasFileAttached() && (null == message.getFileParams() || message.getFileParams().isRemoteAvailable());
+ }
+}