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 true if the file transfer was successful, false 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 true if the file transfer was successful, false 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 true if the message can be processed, false otherwise */ @Override public boolean accept(Message message) { return MessageUtil.needsDownload(message) && message.hasFileAttached() && (null == message.getFileParams() || message.getFileParams().isRemoteAvailable()); } }