1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Abort upload [WIP]

This commit is contained in:
davigonz 2018-06-19 10:56:53 +02:00
parent f110992489
commit e261b1df2f
8 changed files with 76 additions and 72 deletions

@ -1 +1 @@
Subproject commit aec2f98c69e4e86d148226c7ff00fe5dd2be49e4
Subproject commit fab24c4727d4a201cbb0bb1e7f2f45bc5b5e0756

View File

@ -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();
}
}

View File

@ -46,5 +46,4 @@ public class GetMethod extends HttpMethod {
return super.execute();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -67,4 +67,4 @@ public class PutMethod extends DavMethod {
return super.getStatusCode();
}
}
}

View File

@ -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;
}
}
}

View File

@ -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<OnDatatransferProgressListener> 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) {