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

Commit 14d81aba authored by vince-bourgmayer's avatar vince-bourgmayer
Browse files

add possibility to get Etag from result of UploadOperation

parent bea45b57
Loading
Loading
Loading
Loading
+19 −26
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PutMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
@@ -54,6 +55,7 @@ public class UploadFileRemoteOperation extends RemoteOperation {
	protected static final String OC_TOTAL_LENGTH_HEADER = "OC-Total-Length";
	protected static final String IF_MATCH_HEADER = "If-Match";
    protected static final String OC_X_OC_MTIME_HEADER = "X-OC-Mtime";
    protected static final String RESULT_HEADER_ETAG ="ETag";

	protected String mLocalPath;
	protected String mRemotePath;
@@ -61,6 +63,7 @@ public class UploadFileRemoteOperation extends RemoteOperation {
	protected String mFileLastModifTimestamp;
	protected PutMethod mPutMethod = null;
	protected String mRequiredEtag = null;
	protected Boolean getResultEtag = false;

	protected final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
	//protected Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
@@ -134,10 +137,7 @@ public class UploadFileRemoteOperation extends RemoteOperation {
		try {
			File f = new File(mLocalPath);
			mEntity  = new FileRequestEntity(f, mMimeType);
			/*synchronized (mDataTransferListeners) {
				((ProgressiveDataTransferer)mEntity)
                        .addDatatransferProgressListeners(mDataTransferListeners);
			} */

			if (mRequiredEtag != null && mRequiredEtag.length() > 0) {
				mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\"");
			}
@@ -150,6 +150,13 @@ public class UploadFileRemoteOperation extends RemoteOperation {

			result = new RemoteOperationResult(isSuccess(status), mPutMethod);

			if(getResultEtag && result.isSuccess()){
				Header getEtagHeader = mPutMethod.getResponseHeader(RESULT_HEADER_ETAG);
				if(getEtagHeader != null){
					result.setSingleData( getEtagHeader.getValue() );
				}
			}

			client.exhaustResponse(mPutMethod.getResponseBodyAsStream());

		} finally {
@@ -158,28 +165,6 @@ public class UploadFileRemoteOperation extends RemoteOperation {
		return result;
	}

   /* public Set<OnDatatransferProgressListener> getDataTransferListeners() {
        return mDataTransferListeners;
    }
    
    public void addDatatransferProgressListener (OnDatatransferProgressListener listener) {
        synchronized (mDataTransferListeners) {
            mDataTransferListeners.add(listener);
        }
        if (mEntity != null) {
            ((ProgressiveDataTransferer)mEntity).addDatatransferProgressListener(listener);
        }
    }
    
    public void removeDatatransferProgressListener(OnDatatransferProgressListener listener) {
        synchronized (mDataTransferListeners) {
            mDataTransferListeners.remove(listener);
        }
        if (mEntity != null) {
            ((ProgressiveDataTransferer)mEntity).removeDatatransferProgressListener(listener);
        }
    } */
    
    public void cancel() {
        synchronized (mCancellationRequested) {
            mCancellationRequested.set(true);
@@ -188,4 +173,12 @@ public class UploadFileRemoteOperation extends RemoteOperation {
        }
    }

    public void askResultEtag(Boolean value){
		this.getResultEtag = value;
	}

	public Boolean isResultEtagAsked(){
		return this.getResultEtag;
	}

}