X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/51e201509d47a8bd16e69ac90aa2c7bebf25e30a..e901b609baa4dd5f681e2a5257c9e504997e3377:/src/com/owncloud/android/operations/DownloadFileOperation.java?ds=sidebyside diff --git a/src/com/owncloud/android/operations/DownloadFileOperation.java b/src/com/owncloud/android/operations/DownloadFileOperation.java index 8d89f636..9f2bed72 100644 --- a/src/com/owncloud/android/operations/DownloadFileOperation.java +++ b/src/com/owncloud/android/operations/DownloadFileOperation.java @@ -21,16 +21,17 @@ import java.io.File; import java.util.HashSet; import java.util.Iterator; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.oc_framework.network.webdav.OnDatatransferProgressListener; -import com.owncloud.android.oc_framework.network.webdav.WebdavClient; -import com.owncloud.android.oc_framework.operations.RemoteFile; -import com.owncloud.android.oc_framework.operations.RemoteOperation; -import com.owncloud.android.oc_framework.operations.RemoteOperationResult; -import com.owncloud.android.oc_framework.operations.remote.DownloadRemoteFileOperation; +import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.operations.OperationCancelledException; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation; import com.owncloud.android.utils.FileStorageUtils; -import com.owncloud.android.utils.Log_OC; import android.accounts.Account; import android.webkit.MimeTypeMap; @@ -49,6 +50,7 @@ public class DownloadFileOperation extends RemoteOperation { private OCFile mFile; private Set mDataTransferListeners = new HashSet(); private long mModificationTimestamp = 0; + private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false); private DownloadRemoteFileOperation mDownloadOperation; @@ -119,7 +121,7 @@ public class DownloadFileOperation extends RemoteOperation { } @Override - protected RemoteOperationResult run(WebdavClient client) { + protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; File newFile = null; boolean moved = true; @@ -128,10 +130,15 @@ public class DownloadFileOperation extends RemoteOperation { File tmpFile = new File(getTmpPath()); String tmpFolder = getTmpFolder(); - RemoteFile remoteFile = FileStorageUtils.fillRemoteFile(mFile); /// perform the download - mDownloadOperation = new DownloadRemoteFileOperation(remoteFile, tmpFolder); + synchronized(mCancellationRequested) { + if (mCancellationRequested.get()) { + return new RemoteOperationResult(new OperationCancelledException()); + } + } + + mDownloadOperation = new DownloadRemoteFileOperation(mFile.getRemotePath(), tmpFolder); Iterator listener = mDataTransferListeners.iterator(); while (listener.hasNext()) { mDownloadOperation.addDatatransferProgressListener(listener.next()); @@ -139,6 +146,7 @@ public class DownloadFileOperation extends RemoteOperation { result = mDownloadOperation.execute(client); if (result.isSuccess()) { + mModificationTimestamp = mDownloadOperation.getModificationTimestamp(); newFile = new File(getSavePath()); newFile.getParentFile().mkdirs(); moved = tmpFile.renameTo(newFile); @@ -153,7 +161,10 @@ public class DownloadFileOperation extends RemoteOperation { } public void cancel() { - mDownloadOperation.cancel(); + mCancellationRequested.set(true); // atomic set; there is no need of synchronizing it + if (mDownloadOperation != null) { + mDownloadOperation.cancel(); + } }