From 2041fb1962c2c5d6fca9da86551d40434ee34386 Mon Sep 17 00:00:00 2001 From: theScrabi Date: Fri, 15 Jun 2018 10:05:21 +0200 Subject: [PATCH] add untestet protoype of new ReadRemoteFileOperation --- .../android/lib/common/http/HttpClient.java | 2 +- .../files/ReadRemoteFileOperation.java | 61 ++++++++++--------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/com/owncloud/android/lib/common/http/HttpClient.java b/src/com/owncloud/android/lib/common/http/HttpClient.java index 3bb47d1d..f0f81693 100644 --- a/src/com/owncloud/android/lib/common/http/HttpClient.java +++ b/src/com/owncloud/android/lib/common/http/HttpClient.java @@ -44,7 +44,7 @@ public class HttpClient { public static OkHttpClient getOkHttpClient() { if (mOkHttpClient == null) { - + mOkHttpClient = new OkHttpClient.Builder() .addInterceptor(mOkHttpInterceptor) .protocols(Arrays.asList(Protocol.HTTP_1_1)) diff --git a/src/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java index c710d0a2..3b2e2350 100644 --- a/src/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java +++ b/src/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java @@ -24,19 +24,23 @@ package com.owncloud.android.lib.resources.files; import java.util.ArrayList; - -import org.apache.commons.httpclient.HttpStatus; -import org.apache.jackrabbit.webdav.DavConstants; -import org.apache.jackrabbit.webdav.MultiStatus; -import org.apache.jackrabbit.webdav.client.methods.PropFindMethod; +import java.util.Objects; +import java.util.concurrent.TimeUnit; import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.common.network.WebdavEntry; +import com.owncloud.android.lib.common.http.HttpConstants; +import com.owncloud.android.lib.common.http.methods.webdav.DavUtils; +import com.owncloud.android.lib.common.http.methods.webdav.PropfindMethod; import com.owncloud.android.lib.common.network.WebdavUtils; 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 at.bitfire.dav4android.DavResource; +import okhttp3.HttpUrl; + +import static com.owncloud.android.lib.common.http.methods.webdav.DavConstants.DEPTH_0; + /** * Remote operation performing the read a file from the ownCloud server. @@ -70,38 +74,37 @@ public class ReadRemoteFileOperation extends RemoteOperation { */ @Override protected RemoteOperationResult run(OwnCloudClient client) { - PropFindMethod propfind = null; + PropfindMethod propfind = null; RemoteOperationResult result = null; /// take the duty of check the server for the current state of the file there try { // remote request - propfind = new PropFindMethod(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath), - WebdavUtils.getFilePropSet(), // PropFind Properties - DavConstants.DEPTH_0); - int status; - status = client.executeMethod(propfind, SYNC_READ_TIMEOUT, SYNC_CONNECTION_TIMEOUT); + propfind = new PropfindMethod( + HttpUrl.parse(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath)), + DEPTH_0, + DavUtils.getAllPropset()); - boolean isSuccess = ( - status == HttpStatus.SC_MULTI_STATUS || - status == HttpStatus.SC_OK - ); - if (isSuccess) { + propfind.setReadTimeout(SYNC_READ_TIMEOUT, TimeUnit.SECONDS); + propfind.setConnectionTimeout(SYNC_CONNECTION_TIMEOUT, TimeUnit.SECONDS); + final int status = client.executeHttpMethod(propfind); + + if (status == HttpConstants.HTTP_MULTI_STATUS + || status == HttpConstants.HTTP_OK) { // Parse response - MultiStatus resp = propfind.getResponseBodyAsMultiStatus(); - WebdavEntry we = new WebdavEntry(resp.getResponses()[0], - client.getWebdavUri().getPath()); - RemoteFile remoteFile = new RemoteFile(we); - ArrayList files = new ArrayList(); - files.add(remoteFile); + final DavResource resource = propfind.getMembers().iterator().next(); - // Result of the operation - result = new RemoteOperationResult(true, propfind); + final RemoteFile file = new RemoteFile(resource, client.getAccount().getDisplayName()); + + ArrayList files = new ArrayList<>(); + files.add(file); + + result = new RemoteOperationResult(RemoteOperationResult.ResultCode.OK); result.setData(files); } else { - result = new RemoteOperationResult(false, propfind); - client.exhaustResponse(propfind.getResponseBodyAsStream()); + result = new RemoteOperationResult(propfind); + client.exhaustResponse(propfind.getResponseAsStream()); } } catch (Exception e) { @@ -109,10 +112,8 @@ public class ReadRemoteFileOperation extends RemoteOperation { e.printStackTrace(); Log_OC.e(TAG, "Synchronizing file " + mRemotePath + ": " + result.getLogMessage(), result.getException()); - } finally { - if (propfind != null) - propfind.releaseConnection(); } + return result; }