From e261b1df2f1a3b4af8f9ef282412e716ca1738eb Mon Sep 17 00:00:00 2001 From: davigonz Date: Tue, 19 Jun 2018 10:56:53 +0200 Subject: [PATCH] Abort upload [WIP] --- dav4android | 2 +- .../common/http/methods/HttpBaseMethod.java | 10 +++ .../http/methods/nonwebdav/GetMethod.java | 1 - .../http/methods/nonwebdav/HttpMethod.java | 6 -- .../common/http/methods/webdav/DavMethod.java | 10 +++ .../common/http/methods/webdav/PutMethod.java | 2 +- .../files/DownloadRemoteFileOperation.java | 29 +++--- .../files/UploadRemoteFileOperation.java | 88 +++++++++---------- 8 files changed, 76 insertions(+), 72 deletions(-) diff --git a/dav4android b/dav4android index aec2f98c..fab24c47 160000 --- a/dav4android +++ b/dav4android @@ -1 +1 @@ -Subproject commit aec2f98c69e4e86d148226c7ff00fe5dd2be49e4 +Subproject commit fab24c4727d4a201cbb0bb1e7f2f45bc5b5e0756 diff --git a/src/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java b/src/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java index 1f9524e0..1d6cdff6 100644 --- a/src/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java +++ b/src/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.concurrent.TimeUnit; +import okhttp3.Call; import okhttp3.Headers; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; @@ -50,6 +51,7 @@ public abstract class HttpBaseMethod { protected Request mRequest; protected RequestBody mRequestBody; protected Response mResponse; + protected Call mCall; protected HttpBaseMethod (HttpUrl httpUrl) { mOkHttpClient = HttpClient.getOkHttpClient(); @@ -125,4 +127,12 @@ public abstract class HttpBaseMethod { public String getResponseHeader(String headerName) { return mResponse.header(headerName); } + + public void abort() { + mCall.cancel(); + } + + public boolean isAborted() { + return mCall.isCanceled(); + } } \ No newline at end of file diff --git a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java b/src/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java index 65a49f94..b24b9bce 100644 --- a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java +++ b/src/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java @@ -46,5 +46,4 @@ public class GetMethod extends HttpMethod { return super.execute(); } - } \ No newline at end of file diff --git a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java b/src/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java index 804d39f5..a439b03b 100644 --- a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java +++ b/src/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java @@ -38,8 +38,6 @@ import okhttp3.HttpUrl; */ public abstract class HttpMethod extends HttpBaseMethod { - private Call mCall; - public HttpMethod(HttpUrl httpUrl) { super(httpUrl); } @@ -50,8 +48,4 @@ public abstract class HttpMethod extends HttpBaseMethod { mResponse = mCall.execute(); return super.getStatusCode(); } - - public void abort() { - mCall.cancel(); - } } \ No newline at end of file diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java b/src/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java index dfa293a6..c9c8c00a 100644 --- a/src/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java +++ b/src/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java @@ -49,4 +49,14 @@ public abstract class DavMethod extends HttpBaseMethod { public DavResource getDavResource() { return mDavResource; } + + @Override + public void abort() { + mDavResource.cancelCall(); + } + + @Override + public boolean isAborted() { + return mDavResource.isCallAborted(); + } } \ No newline at end of file diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java b/src/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java index f3667099..020bdcad 100644 --- a/src/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java +++ b/src/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java @@ -67,4 +67,4 @@ public class PutMethod extends DavMethod { return super.getStatusCode(); } -} +} \ No newline at end of file diff --git a/src/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java index 13a387c7..e3a62d75 100644 --- a/src/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java +++ b/src/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java @@ -24,16 +24,6 @@ package com.owncloud.android.lib.resources.files; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; - import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.http.HttpConstants; import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod; @@ -44,6 +34,16 @@ 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 java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; + import okhttp3.HttpUrl; /** @@ -98,7 +98,7 @@ public class DownloadRemoteFileOperation extends RemoteOperation { private RemoteOperationResult downloadFile(OwnCloudClient client, File targetFile) throws - IOException, OperationCancelledException { + Exception { RemoteOperationResult result; int status; @@ -128,7 +128,7 @@ public class DownloadRemoteFileOperation extends RemoteOperation { while ((readResult = bis.read(bytes)) != -1) { synchronized (mCancellationRequested) { if (mCancellationRequested.get()) { - mGet.abort(); + mGet.abort(); throw new OperationCancelledException(); } } @@ -174,9 +174,6 @@ public class DownloadRemoteFileOperation extends RemoteOperation { result = isSuccess(status) ? new RemoteOperationResult(RemoteOperationResult.ResultCode.OK) : new RemoteOperationResult(mGet); - - } catch (Exception e) { - return new RemoteOperationResult(e); } finally { if (fos != null) fos.close(); if (bis != null) bis.close(); @@ -218,4 +215,4 @@ public class DownloadRemoteFileOperation extends RemoteOperation { public String getEtag() { return mEtag; } -} +} \ No newline at end of file diff --git a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java index 635fbd17..5f2c5933 100644 --- a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java +++ b/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java @@ -113,13 +113,13 @@ public class UploadRemoteFileOperation extends RemoteOperation { } } catch (Exception e) { -// if (mPutMethod != null && mPutMethod.isAborted()) { -// result = new RemoteOperationResult(new OperationCancelledException()); -// -// } else { -// result = new RemoteOperationResult(e); -// } + if (mPutMethod != null && mPutMethod.isAborted()) { + result = new RemoteOperationResult(new OperationCancelledException()); + } else { + result = new RemoteOperationResult(e); + } } finally { + // TODO // reset previous retry handler // client.getParams().setParameter( // HttpMethodParams.RETRY_HANDLER, @@ -129,47 +129,41 @@ public class UploadRemoteFileOperation extends RemoteOperation { return result; } - protected RemoteOperationResult uploadFile(OwnCloudClient client) throws IOException { - RemoteOperationResult result; - try { - File fileToUpload = new File(mLocalPath); + protected RemoteOperationResult uploadFile(OwnCloudClient client) throws Exception { - MediaType mediaType = MediaType.parse(mMimeType); + File fileToUpload = new File(mLocalPath); - mFileRequestBody = new FileRequestBody(fileToUpload, mediaType); + MediaType mediaType = MediaType.parse(mMimeType); - synchronized (mDataTransferListeners) { - mFileRequestBody.addDatatransferProgressListeners(mDataTransferListeners); - } + mFileRequestBody = new FileRequestBody(fileToUpload, mediaType); - if (mRequiredEtag != null && mRequiredEtag.length() > 0) { - mPutMethod.addRequestHeader(HttpConstants.IF_MATCH_HEADER, "\"" + mRequiredEtag + "\""); - } - - mPutMethod.addRequestHeader(HttpConstants.OC_TOTAL_LENGTH_HEADER, String.valueOf(fileToUpload.length())); - - mPutMethod.addRequestHeader(HttpConstants.OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addPart(mFileRequestBody) - .build(); - - mPutMethod.setRequestBody(requestBody); - - int status = client.executeHttpMethod(mPutMethod); - - if (isSuccess(status)) { - result = new RemoteOperationResult(OK); - - } else { // synchronization failed - result = new RemoteOperationResult(mPutMethod); - } - - } catch (Exception e) { - result = new RemoteOperationResult(e); + synchronized (mDataTransferListeners) { + mFileRequestBody.addDatatransferProgressListeners(mDataTransferListeners); + } + + if (mRequiredEtag != null && mRequiredEtag.length() > 0) { + mPutMethod.addRequestHeader(HttpConstants.IF_MATCH_HEADER, "\"" + mRequiredEtag + "\""); + } + + mPutMethod.addRequestHeader(HttpConstants.OC_TOTAL_LENGTH_HEADER, String.valueOf(fileToUpload.length())); + + mPutMethod.addRequestHeader(HttpConstants.OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addPart(mFileRequestBody) + .build(); + + mPutMethod.setRequestBody(requestBody); + + int status = client.executeHttpMethod(mPutMethod); + + if (isSuccess(status)) { + return new RemoteOperationResult(OK); + + } else { // synchronization failed + return new RemoteOperationResult(mPutMethod); } - return result; } public Set getDataTransferListeners() { @@ -195,11 +189,11 @@ public class UploadRemoteFileOperation extends RemoteOperation { } public void cancel() { -// synchronized (mCancellationRequested) { -// mCancellationRequested.set(true); -// if (mPutMethod != null) -// mPutMethod.abort(); -// } + synchronized (mCancellationRequested) { + mCancellationRequested.set(true); + if (mPutMethod != null) + mPutMethod.abort(); + } } public boolean isSuccess(int status) {