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

Commit 4281845f authored by Andy Scherzinger's avatar Andy Scherzinger Committed by GitHub
Browse files

Merge pull request #41 from nextcloud/fix_file_modification_date_on_upload

Fix file modification date on upload
parents 2c453829 f40740e0
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -157,7 +157,13 @@ 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);
    }
+11 −3
Original line number Diff line number Diff line
@@ -54,15 +54,21 @@ 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);
    public ChunkedUploadRemoteFileOperation(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 +118,8 @@ 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()) {
+11 −5
Original line number Diff line number Diff line
@@ -62,10 +62,12 @@ public class UploadRemoteFileOperation 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 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,17 @@ 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 +157,7 @@ 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);

+28 −31
Original line number Diff line number Diff line
@@ -245,9 +245,8 @@ public class TestActivity extends Activity {
	 * 
	 * @return
	 */
	public RemoteOperationResult uploadFile(
			String storagePath, String remotePath, String mimeType, String requiredEtag
			) {
	public RemoteOperationResult uploadFile(String storagePath, String remotePath, String mimeType,
											String requiredEtag) {
		return TestActivity.uploadFile(this, storagePath, remotePath, mimeType, mClient, requiredEtag);
	}

@@ -259,26 +258,27 @@ public class TestActivity extends Activity {
	 * @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
	) {
	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 +286,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
@@ -315,10 +312,9 @@ public class TestActivity extends Activity {
	public RemoteOperationResult createShare(String path, ShareType shareType, String shareWith, boolean publicUpload, 
			String password, int permissions){
		
		CreateRemoteShareOperation createOperation = new CreateRemoteShareOperation(path, shareType, shareWith, publicUpload, password, permissions);
		RemoteOperationResult result = createOperation.execute(mClient);
		
		return result;
		CreateRemoteShareOperation createOperation = new CreateRemoteShareOperation(path, shareType, shareWith,
				publicUpload, password, permissions);
		return createOperation.execute(mClient);
	}
	
	
@@ -330,10 +326,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 +366,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();
    }
}
+2 −2

File changed.

Contains only whitespace changes.