Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16c91473 authored by masensio's avatar masensio
Browse files

Parse and show the error of invalid characters coming from the server side: Move, Rename, Uploads

parent 2b09aa2a
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.jackrabbit.webdav.DavException;
import org.json.JSONException;
import org.xmlpull.v1.XmlPullParserException;

import android.accounts.Account;
import android.accounts.AccountsException;
@@ -50,7 +49,6 @@ import android.accounts.AccountsException;
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
import com.owncloud.android.lib.common.network.CertificateCombinedException;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.shares.ShareXMLParser;


/**
@@ -64,9 +62,9 @@ import com.owncloud.android.lib.resources.shares.ShareXMLParser;
public class RemoteOperationResult implements Serializable {
	
	/** Generated - should be refreshed every time the class changes!! */;
	private static final long serialVersionUID = -9003837206000993465L;
    private static final long serialVersionUID = -4184015692120731701L;

	private static final String TAG = "RemoteOperationResult";
    private static final String TAG = RemoteOperationResult.class.getSimpleName();

    public enum ResultCode { 
        OK,
+11 −6
Original line number Diff line number Diff line
@@ -61,17 +61,21 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation
            raf = new RandomAccessFile(file, "r");
            channel = raf.getChannel();
            mEntity = new ChunkFromFileChannelRequestEntity(channel, mMimeType, CHUNK_SIZE, file);
            //((ProgressiveDataTransferer)mEntity).addDatatransferProgressListeners(getDataTransferListeners());
            //((ProgressiveDataTransferer)mEntity).
            // addDatatransferProgressListeners(getDataTransferListeners());
            synchronized (mDataTransferListeners) {
				((ProgressiveDataTransferer)mEntity).addDatatransferProgressListeners(mDataTransferListeners);
				((ProgressiveDataTransferer)mEntity)
                        .addDatatransferProgressListeners(mDataTransferListeners);
			}
            
            long offset = 0;
            String uriPrefix = client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath) + "-chunking-" + Math.abs((new Random()).nextInt(9000)+1000) + "-" ;
            String uriPrefix = client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath) +
                    "-chunking-" + Math.abs((new Random()).nextInt(9000)+1000) + "-" ;
            long chunkCount = (long) Math.ceil((double)file.length() / CHUNK_SIZE);
            for (int chunkIndex = 0; chunkIndex < chunkCount ; chunkIndex++, offset += CHUNK_SIZE) {
                if (mPutMethod != null) {
                    mPutMethod.releaseConnection();    // let the connection available for other methods
                    mPutMethod.releaseConnection();     // let the connection available
                                                        // for other methods
                }
                mPutMethod = new PutMethod(uriPrefix + chunkCount + "-" + chunkIndex);
                mPutMethod.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER);
@@ -80,7 +84,8 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation
                mPutMethod.setRequestEntity(mEntity);
                status = client.executeMethod(mPutMethod);
                client.exhaustResponse(mPutMethod.getResponseBodyAsStream());
                Log_OC.d(TAG, "Upload of " + mLocalPath + " to " + mRemotePath + ", chunk index " + chunkIndex + ", count " + chunkCount + ", HTTP result status " + status);
                Log_OC.d(TAG, "Upload of " + mLocalPath + " to " + mRemotePath + ", chunk index " +
                        chunkIndex + ", count " + chunkCount + ", HTTP result status " + status);
                if (!isSuccess(status))
                    break;
            }
+13 −9
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ 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.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;


/**
@@ -129,8 +130,11 @@ public class MoveRemoteFileOperation extends RemoteOperation {
    		/// for other errors that could be explicitly handled, check first:
    		/// http://www.webdav.org/specs/rfc4918.html#rfc.section.9.9.4
        		
        	} else if (status == 400) {
				result = new RemoteOperationResult(move.succeeded(),
						move.getResponseBodyAsString(), status);
				Log_OC.d(TAG, move.getResponseBodyAsString());
			} else {
        		
					result = new RemoteOperationResult(
							isSuccess(status), 	// move.succeeded()? trustful?
							status,
+12 −8
Original line number Diff line number Diff line
@@ -94,12 +94,10 @@ public class RenameRemoteFileOperation extends RemoteOperation {
        
        if (noInvalidChars) {
        try {
        	
            if (mNewName.equals(mOldName)) {
                return new RemoteOperationResult(ResultCode.OK);
            }
            
            
            // check if a file with the new name already exists
            if (client.existsFile(mNewRemotePath)) {
            	return new RemoteOperationResult(ResultCode.INVALID_OVERWRITE);
@@ -110,11 +108,17 @@ public class RenameRemoteFileOperation extends RemoteOperation {
            		client.getWebdavUri() + WebdavUtils.encodePath(mNewRemotePath));
            int status = client.executeMethod(move, RENAME_READ_TIMEOUT, RENAME_CONNECTION_TIMEOUT);

            if (status == 400) {
				result = new RemoteOperationResult(move.succeeded(),
						move.getResponseBodyAsString(), status);
				Log_OC.d(TAG, move.getResponseBodyAsString());
			} else {
                move.getResponseBodyAsString(); // exhaust response, although not interesting
            result = new RemoteOperationResult(move.succeeded(), status, move.getResponseHeaders());
                result = new RemoteOperationResult(move.succeeded(), status,
                        move.getResponseHeaders());
                Log_OC.i(TAG, "Rename " + mOldRemotePath + " to " + mNewRemotePath + ": " +
                        result.getLogMessage());
            
            }
        } catch (Exception e) {
            result = new RemoteOperationResult(e);
            Log_OC.e(TAG, "Rename " + mOldRemotePath + " to " +
+11 −4
Original line number Diff line number Diff line
@@ -43,6 +43,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;

/**
 * Remote operation performing the upload of a remote file to the ownCloud server.
@@ -53,6 +54,8 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;

public class UploadRemoteFileOperation extends RemoteOperation {

	private static final String TAG = UploadRemoteFileOperation.class.getSimpleName();

	protected static final String OC_TOTAL_LENGTH_HEADER = "OC-Total-Length";

	protected String mLocalPath;
@@ -87,10 +90,14 @@ public class UploadRemoteFileOperation extends RemoteOperation {
			}

			int status = uploadFile(client);

			if (status == 400) {
				result = new RemoteOperationResult(isSuccess(status),
						mPutMethod.getResponseBodyAsString(), status);
				Log_OC.d(TAG, mPutMethod.getResponseBodyAsString());
			} else {
				result = new RemoteOperationResult(isSuccess(status), status,
						(mPutMethod != null ? mPutMethod.getResponseHeaders() : null));

			}
		} catch (Exception e) {
			// TODO something cleaner with cancellations
			if (mCancellationRequested.get()) {