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

Commit f729c166 authored by Mario Đanić's avatar Mario Đanić Committed by GitHub
Browse files

Merge pull request #36 from nextcloud/fix_file_modification_date_on_upload

Fix file modification date on upload
parents c6b05823 ee30d44f
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -157,7 +157,12 @@ public class MainActivity extends Activity implements OnRemoteOperationListener,
    	File fileToUpload = upFolder.listFiles()[0];
    	String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName(); 
    	String mimeType = getString(R.string.sample_file_mimetype);
    	UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(), remotePath, mimeType);

		// Get the last modification date of the file from the file system
		Long timeStampLong = fileToUpload.lastModified()/1000;
		String timeStamp = timeStampLong.toString();

    	UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(), remotePath, mimeType, timeStamp);
    	uploadOperation.addDatatransferProgressListener(this);
    	uploadOperation.execute(mClient, this, mHandler);
    }
+12 −2
Original line number Diff line number Diff line
@@ -54,15 +54,22 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation
    public static final long CHUNK_SIZE = 1024000;
    private static final String OC_CHUNKED_HEADER = "OC-Chunked";
    private static final String OC_CHUNK_SIZE_HEADER = "OC-Chunk-Size";
    private static final String OC_CHUNK_X_OC_MTIME_HEADER = "X-OC-Mtime";
    private static final String TAG = ChunkedUploadRemoteFileOperation.class.getSimpleName();
    private Context mContext;

    public ChunkedUploadRemoteFileOperation(
            Context context, String storagePath, String remotePath, String mimeType, String requiredEtag) {
        super(storagePath, remotePath, mimeType, requiredEtag);
            Context context, String storagePath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp) {
        super(storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp);
        mContext = context;
    }

    public ChunkedUploadRemoteFileOperation(
            String storagePath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp
    ) {
        super(storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp);
    }
    
    @Override
    protected int uploadFile(OwnCloudClient client) throws IOException {
        int status = -1;
@@ -112,6 +119,9 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation
                mPutMethod.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER);
                mPutMethod.addRequestHeader(OC_CHUNK_SIZE_HEADER, chunkSizeStr);
                mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, totalLengthStr);

                mPutMethod.addRequestHeader(OC_CHUNK_X_OC_MTIME_HEADER, mFileLastModifTimestamp);

                ((ChunkFromFileChannelRequestEntity) mEntity).setOffset(offset);
                mPutMethod.setRequestEntity(mEntity);
                if (mCancellationRequested.get()) {
+122 −116
Original line number Diff line number Diff line
@@ -61,11 +61,13 @@ 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 static final String OC_X_OC_MTIME_HEADER = "X-OC-Mtime";
    protected static final String IF_MATCH_HEADER = "If-Match";

    protected String mLocalPath;
    protected String mRemotePath;
    protected String mMimeType;
    protected String mFileLastModifTimestamp;
    protected PutMethod mPutMethod = null;
    protected boolean mForbiddenCharsInServer = false;
    protected String mRequiredEtag = null;
@@ -75,14 +77,15 @@ public class UploadRemoteFileOperation extends RemoteOperation {

    protected RequestEntity mEntity = null;

	public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType) {
    public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String fileLastModifTimestamp) {
        mLocalPath = localPath;
        mRemotePath = remotePath;
        mMimeType = mimeType;
        mFileLastModifTimestamp = fileLastModifTimestamp;
    }

	public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String requiredEtag) {
		this(localPath, remotePath, mimeType);
    public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp) {
        this(localPath, remotePath, mimeType, fileLastModifTimestamp);
        mRequiredEtag = requiredEtag;
    }

@@ -152,6 +155,9 @@ public class UploadRemoteFileOperation extends RemoteOperation {
                mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\"");
            }
            mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, String.valueOf(f.length()));

            mPutMethod.addRequestHeader(OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp);

            mPutMethod.setRequestEntity(mEntity);
            status = client.executeMethod(mPutMethod);

+24 −25
Original line number Diff line number Diff line
@@ -251,34 +251,37 @@ public class TestActivity extends Activity {
		return TestActivity.uploadFile(this, storagePath, remotePath, mimeType, mClient, requiredEtag);
	}

	
	/** Access to the library method to Upload a File 
	/**
	 * Access to the library method to Upload a File
	 *
	 * @param context
	 * @param storagePath
	 * @param remotePath
	 * @param mimeType
	 * @param client       Client instance configured to access the target OC server.
	 *
	 * @param requiredEtag
	 * @return
	 */
	public static RemoteOperationResult uploadFile(
			Context context, String storagePath, String remotePath, String mimeType, OwnCloudClient client,
			String requiredEtag
	) {

		String fileLastModifTimestamp = getFileLastModifTimeStamp(storagePath);

		UploadRemoteFileOperation uploadOperation;

		if ((new File(storagePath)).length() > ChunkedUploadRemoteFileOperation.CHUNK_SIZE) {
			uploadOperation = new ChunkedUploadRemoteFileOperation(
					context, storagePath, remotePath, mimeType, requiredEtag
					context, storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp
			);
		} else {
			uploadOperation = new UploadRemoteFileOperation(
            		storagePath, remotePath, mimeType
					storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp
			);
		}

		RemoteOperationResult result = uploadOperation.execute(client);
		return result;
		return uploadOperation.execute(client);
	}

	/** Access to the library method to Get Shares 
@@ -286,11 +289,8 @@ public class TestActivity extends Activity {
	 * @return
	 */
	public RemoteOperationResult getShares(){
		
		GetRemoteSharesOperation getOperation = new GetRemoteSharesOperation();
		RemoteOperationResult result = getOperation.execute(mClient);
		
		return result;
		return getOperation.execute(mClient);
	}
	
	/** Access to the library method to Create Share
@@ -316,9 +316,7 @@ public class TestActivity extends Activity {
			String password, int permissions){
		
		CreateRemoteShareOperation createOperation = new CreateRemoteShareOperation(path, shareType, shareWith, publicUpload, password, permissions);
		RemoteOperationResult result = createOperation.execute(mClient);
		
		return result;
		return createOperation.execute(mClient);
	}
	
	
@@ -330,10 +328,7 @@ public class TestActivity extends Activity {
	
	public RemoteOperationResult removeShare(int idShare) {
		RemoveRemoteShareOperation removeOperation = new RemoveRemoteShareOperation(idShare);
		RemoteOperationResult result = removeOperation.execute(mClient);
		
		return result;
		
		return removeOperation.execute(mClient);
	}

	
@@ -373,5 +368,9 @@ public class TestActivity extends Activity {
		return extractedFile;
	}


    private static String getFileLastModifTimeStamp (String storagePath) {
        File file = new File(storagePath);
        Long timeStampLong = file.lastModified()/1000;
        return timeStampLong.toString();
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -121,5 +121,4 @@ public class UploadFileTest extends RemoteTest {
		}
		super.tearDown();
	}
	
}