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

Merge pull request #154 from owncloud/ext_storage

Ext storage
This commit is contained in:
jabarros 2017-02-20 09:56:40 +01:00 committed by GitHub
commit 5d17bbb88d
4 changed files with 47 additions and 15 deletions

View File

@ -118,7 +118,8 @@ public class RemoteOperationResult implements Serializable {
INVALID_CHARACTER_DETECT_IN_SERVER, INVALID_CHARACTER_DETECT_IN_SERVER,
DELAYED_FOR_WIFI, DELAYED_FOR_WIFI,
LOCAL_FILE_NOT_FOUND, LOCAL_FILE_NOT_FOUND,
MAINTENANCE_MODE MAINTENANCE_MODE,
SPECIFIC_SERVICE_UNAVAILABLE
} }
private boolean mSuccess = false; private boolean mSuccess = false;
@ -264,6 +265,25 @@ public class RemoteOperationResult implements Serializable {
} }
} }
} }
if (mHttpCode == HttpStatus.SC_SERVICE_UNAVAILABLE) {
String bodyResponse = httpMethod.getResponseBodyAsString();
if (bodyResponse != null && bodyResponse.length() > 0) {
InputStream is = new ByteArrayInputStream(bodyResponse.getBytes());
ErrorMessageParser xmlParser = new ErrorMessageParser();
try {
String errorMessage = xmlParser.parseXMLResponse(is);
if (errorMessage != "" && errorMessage != null) {
mCode = ResultCode.SPECIFIC_SERVICE_UNAVAILABLE;
mHttpPhrase = errorMessage;
}
} catch (Exception e) {
Log_OC.w(TAG, "Error reading exception from server: " + e.getMessage());
// mCode stays as set in this(success, httpCode, headers)
}
}
}
} }
/** /**

View File

@ -58,6 +58,7 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
private static final String TAG = DownloadRemoteFileOperation.class.getSimpleName(); private static final String TAG = DownloadRemoteFileOperation.class.getSimpleName();
private static final int FORBIDDEN_ERROR = 403; private static final int FORBIDDEN_ERROR = 403;
private static final int SERVICE_UNAVAILABLE_ERROR = 503;
private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>(); private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false); private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
@ -162,7 +163,7 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
// TODO some kind of error control! // TODO some kind of error control!
} }
} else if (status != FORBIDDEN_ERROR){ } else if (status != FORBIDDEN_ERROR && status != SERVICE_UNAVAILABLE_ERROR){
client.exhaustResponse(mGet.getResponseBodyAsStream()); client.exhaustResponse(mGet.getResponseBodyAsStream());
} // else, body read by RemoteOeprationResult constructor } // else, body read by RemoteOeprationResult constructor

View File

@ -25,7 +25,8 @@
package com.owncloud.android.lib.resources.files; package com.owncloud.android.lib.resources.files;
import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.HeadMethod; import org.apache.jackrabbit.webdav.DavConstants;
import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
import android.content.Context; import android.content.Context;
@ -48,6 +49,9 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation {
private static final String TAG = ExistenceCheckRemoteOperation.class.getSimpleName(); private static final String TAG = ExistenceCheckRemoteOperation.class.getSimpleName();
private static final int FORBIDDEN_ERROR = 403;
private static final int SERVICE_UNAVAILABLE_ERROR = 503;
private String mPath; private String mPath;
private boolean mSuccessIfAbsent; private boolean mSuccessIfAbsent;
@ -83,24 +87,32 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation {
@Override @Override
protected RemoteOperationResult run(OwnCloudClient client) { protected RemoteOperationResult run(OwnCloudClient client) {
RemoteOperationResult result = null; RemoteOperationResult result = null;
HeadMethod head = null; PropFindMethod propfind = null;
boolean previousFollowRedirects = client.getFollowRedirects(); boolean previousFollowRedirects = client.getFollowRedirects();
try { try {
head = new HeadMethod(client.getWebdavUri() + WebdavUtils.encodePath(mPath)); propfind = new PropFindMethod(client.getWebdavUri() + WebdavUtils.encodePath(mPath),
WebdavUtils.getAllPropSet(), DavConstants.DEPTH_0);
client.setFollowRedirects(false); client.setFollowRedirects(false);
int status = client.executeMethod(head, TIMEOUT, TIMEOUT); int status = client.executeMethod(propfind, TIMEOUT, TIMEOUT);
if (previousFollowRedirects) { if (previousFollowRedirects) {
mRedirectionPath = client.followRedirection(head); mRedirectionPath = client.followRedirection(propfind);
status = mRedirectionPath.getLastStatus(); status = mRedirectionPath.getLastStatus();
} }
client.exhaustResponse(head.getResponseBodyAsStream()); if (status != FORBIDDEN_ERROR && status != SERVICE_UNAVAILABLE_ERROR) {
boolean success = (status == HttpStatus.SC_OK && !mSuccessIfAbsent) || client.exhaustResponse(propfind.getResponseBodyAsStream());
}
/**
* PROPFIND method
* 404 NOT FOUND: path doesn't exist,
* 207 MULTI_STATUS: path exists.
*/
boolean success = ((status == HttpStatus.SC_OK || status == HttpStatus.SC_MULTI_STATUS) &&
!mSuccessIfAbsent) ||
(status == HttpStatus.SC_MULTI_STATUS && !mSuccessIfAbsent) ||
(status == HttpStatus.SC_NOT_FOUND && mSuccessIfAbsent); (status == HttpStatus.SC_NOT_FOUND && mSuccessIfAbsent);
result = new RemoteOperationResult( result = new RemoteOperationResult(
success, success,
status, propfind
head.getStatusText(),
head.getResponseHeaders()
); );
Log_OC.d(TAG, "Existence check for " + client.getWebdavUri() + Log_OC.d(TAG, "Existence check for " + client.getWebdavUri() +
WebdavUtils.encodePath(mPath) + " targeting for " + WebdavUtils.encodePath(mPath) + " targeting for " +
@ -115,8 +127,8 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation {
result.getLogMessage(), result.getException()); result.getLogMessage(), result.getException());
} finally { } finally {
if (head != null) if (propfind != null)
head.releaseConnection(); propfind.releaseConnection();
client.setFollowRedirects(previousFollowRedirects); client.setFollowRedirects(previousFollowRedirects);
} }
return result; return result;

View File

@ -96,7 +96,6 @@ public class ReadRemoteFolderOperation extends RemoteOperation {
} }
} else { } else {
// synchronization failed // synchronization failed
client.exhaustResponse(query.getResponseBodyAsStream());
result = new RemoteOperationResult(false, query); result = new RemoteOperationResult(false, query);
} }