mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-11-04 12:28:25 +00:00 
			
		
		
		
	
						commit
						5d17bbb88d
					
				@ -118,7 +118,8 @@ public class RemoteOperationResult implements Serializable {
 | 
			
		||||
        INVALID_CHARACTER_DETECT_IN_SERVER,
 | 
			
		||||
        DELAYED_FOR_WIFI,
 | 
			
		||||
        LOCAL_FILE_NOT_FOUND,
 | 
			
		||||
        MAINTENANCE_MODE
 | 
			
		||||
        MAINTENANCE_MODE,
 | 
			
		||||
        SPECIFIC_SERVICE_UNAVAILABLE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -58,6 +58,7 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = DownloadRemoteFileOperation.class.getSimpleName();
 | 
			
		||||
    private static final int FORBIDDEN_ERROR = 403;
 | 
			
		||||
    private static final int SERVICE_UNAVAILABLE_ERROR = 503;
 | 
			
		||||
 | 
			
		||||
    private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
 | 
			
		||||
    private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
 | 
			
		||||
@ -162,7 +163,7 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
 | 
			
		||||
                    // TODO some kind of error control!
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            } else if (status != FORBIDDEN_ERROR){
 | 
			
		||||
            } else if (status != FORBIDDEN_ERROR && status != SERVICE_UNAVAILABLE_ERROR){
 | 
			
		||||
                client.exhaustResponse(mGet.getResponseBodyAsStream());
 | 
			
		||||
 | 
			
		||||
            } // else, body read by RemoteOeprationResult constructor
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,8 @@
 | 
			
		||||
package com.owncloud.android.lib.resources.files;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
@ -48,6 +49,9 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation {
 | 
			
		||||
    
 | 
			
		||||
    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 boolean mSuccessIfAbsent;
 | 
			
		||||
 | 
			
		||||
@ -83,24 +87,32 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation {
 | 
			
		||||
    @Override
 | 
			
		||||
	protected RemoteOperationResult run(OwnCloudClient client) {
 | 
			
		||||
        RemoteOperationResult result = null;
 | 
			
		||||
        HeadMethod head = null;
 | 
			
		||||
        PropFindMethod propfind = null;
 | 
			
		||||
        boolean previousFollowRedirects = client.getFollowRedirects();
 | 
			
		||||
        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);
 | 
			
		||||
            int status = client.executeMethod(head, TIMEOUT, TIMEOUT);
 | 
			
		||||
            int status = client.executeMethod(propfind, TIMEOUT, TIMEOUT);
 | 
			
		||||
            if (previousFollowRedirects) {
 | 
			
		||||
                mRedirectionPath = client.followRedirection(head);
 | 
			
		||||
                mRedirectionPath = client.followRedirection(propfind);
 | 
			
		||||
                status = mRedirectionPath.getLastStatus();
 | 
			
		||||
            }
 | 
			
		||||
            client.exhaustResponse(head.getResponseBodyAsStream());
 | 
			
		||||
            boolean success = (status == HttpStatus.SC_OK && !mSuccessIfAbsent) ||
 | 
			
		||||
            if (status != FORBIDDEN_ERROR && status != SERVICE_UNAVAILABLE_ERROR) {
 | 
			
		||||
                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);
 | 
			
		||||
            result = new RemoteOperationResult(
 | 
			
		||||
                success,
 | 
			
		||||
                status,
 | 
			
		||||
                head.getStatusText(),
 | 
			
		||||
                head.getResponseHeaders()
 | 
			
		||||
                propfind
 | 
			
		||||
            );
 | 
			
		||||
            Log_OC.d(TAG, "Existence check for " + client.getWebdavUri() +
 | 
			
		||||
                    WebdavUtils.encodePath(mPath) + " targeting for " +
 | 
			
		||||
@ -115,8 +127,8 @@ public class ExistenceCheckRemoteOperation extends RemoteOperation {
 | 
			
		||||
                    result.getLogMessage(), result.getException());
 | 
			
		||||
            
 | 
			
		||||
        } finally {
 | 
			
		||||
            if (head != null)
 | 
			
		||||
                head.releaseConnection();
 | 
			
		||||
            if (propfind != null)
 | 
			
		||||
                propfind.releaseConnection();
 | 
			
		||||
            client.setFollowRedirects(previousFollowRedirects);
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
 | 
			
		||||
@ -96,7 +96,6 @@ public class ReadRemoteFolderOperation extends RemoteOperation {
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                // synchronization failed
 | 
			
		||||
                client.exhaustResponse(query.getResponseBodyAsStream());
 | 
			
		||||
                result = new RemoteOperationResult(false, query);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user