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

Retry uploads

This commit is contained in:
davigonz 2018-06-21 13:59:23 +02:00
parent c2bdea1c91
commit d013d93ac9
4 changed files with 35 additions and 18 deletions

@ -1 +1 @@
Subproject commit fab24c4727d4a201cbb0bb1e7f2f45bc5b5e0756
Subproject commit d519949bcc53896becb7ad92bc643938f189d04e

View File

@ -60,6 +60,7 @@ public abstract class HttpBaseMethod {
.build();
}
// Connection parameters
public void setReadTimeout(long readTimeout, TimeUnit timeUnit) {
mOkHttpClient = mOkHttpClient.newBuilder()
.readTimeout(readTimeout, timeUnit)
@ -78,6 +79,16 @@ public abstract class HttpBaseMethod {
.build();
}
public void setRetryOnConnectionFailure(boolean retryOnConnectionFailure) {
mOkHttpClient = mOkHttpClient.newBuilder()
.retryOnConnectionFailure(retryOnConnectionFailure)
.build();
}
public boolean getRetryOnConnectionFailure() {
return mOkHttpClient.retryOnConnectionFailure();
}
// Request
public String getRequestHeader(String name) {
return mRequest.header(name);

View File

@ -26,6 +26,8 @@ package com.owncloud.android.lib.common.http.methods.webdav;
import com.owncloud.android.lib.common.http.methods.HttpBaseMethod;
import java.util.concurrent.TimeUnit;
import at.bitfire.dav4android.DavOCResource;
import at.bitfire.dav4android.DavResource;
import okhttp3.HttpUrl;
@ -59,4 +61,14 @@ public abstract class DavMethod extends HttpBaseMethod {
public boolean isAborted() {
return mDavResource.isCallAborted();
}
@Override
public void setRetryOnConnectionFailure(boolean retryOnConnectionFailure) {
mDavResource.setRetryOnConnectionFailure(retryOnConnectionFailure);
}
@Override
public boolean getRetryOnConnectionFailure() {
return mDavResource.isRetryOnConnectionFailure();
}
}

View File

@ -34,6 +34,7 @@ import com.owncloud.android.lib.common.network.WebdavUtils;
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 java.io.File;
import java.util.HashSet;
@ -86,20 +87,12 @@ public class UploadRemoteFileOperation extends RemoteOperation {
protected RemoteOperationResult run(OwnCloudClient client) {
RemoteOperationResult result = null;
// DefaultHttpMethodRetryHandler oldRetryHandler =
// (DefaultHttpMethodRetryHandler) client.getParams().getParameter(HttpMethodParams.RETRY_HANDLER);
try {
// TODO
// prevent that uploads are retried automatically by network library
// client.getParams().setParameter(
// HttpMethodParams.RETRY_HANDLER,
// new DefaultHttpMethodRetryHandler(0, false)
// );
mPutMethod = new PutMethod(
HttpUtils.stringUrlToHttpUrl(client.getNewWebDavUri() + WebdavUtils.encodePath(mRemotePath)));
mPutMethod.setRetryOnConnectionFailure(false);
if (mCancellationRequested.get()) {
// the operation was cancelled before getting it's turn to be executed in the queue of uploads
result = new RemoteOperationResult(new OperationCancelledException());
@ -107,22 +100,23 @@ public class UploadRemoteFileOperation extends RemoteOperation {
} else {
// perform the upload
result = uploadFile(client);
Log_OC.i(TAG, "Upload of " + mLocalPath + " to " + mRemotePath + ": " +
result.getLogMessage());
}
} catch (Exception e) {
if (mPutMethod != null && mPutMethod.isAborted()) {
result = new RemoteOperationResult(new OperationCancelledException());
Log_OC.e(TAG, "Upload of " + mLocalPath + " to " + mRemotePath + ": " +
result.getLogMessage(), new OperationCancelledException());
} else {
result = new RemoteOperationResult(e);
Log_OC.e(TAG, "Upload of " + mLocalPath + " to " + mRemotePath + ": " +
result.getLogMessage(), e);
}
} finally {
// TODO
// reset previous retry handler
// client.getParams().setParameter(
// HttpMethodParams.RETRY_HANDLER,
// oldRetryHandler
// );
}
return result;
}