From: David A. Velasco Date: Wed, 28 May 2014 16:07:16 +0000 (+0200) Subject: Fixed lack of synchronization on local changes for kept-in-sync files X-Git-Tag: oc-android-1.7.0_signed~295^2^2~1 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/ad11d6a2b1a3fb23f3fd95d8b84aa70a47367119?ds=inline;hp=-c Fixed lack of synchronization on local changes for kept-in-sync files --- ad11d6a2b1a3fb23f3fd95d8b84aa70a47367119 diff --git a/src/com/owncloud/android/operations/SynchronizeFileOperation.java b/src/com/owncloud/android/operations/SynchronizeFileOperation.java index 1614ba1c..450cd4a7 100644 --- a/src/com/owncloud/android/operations/SynchronizeFileOperation.java +++ b/src/com/owncloud/android/operations/SynchronizeFileOperation.java @@ -53,33 +53,63 @@ public class SynchronizeFileOperation extends SyncOperation { private Context mContext; private boolean mTransferWasRequested = false; + + /** + * Constructor. + * + * Uses remotePath to retrieve all the data in local cache and remote server when the operation + * is executed, instead of reusing {@link OCFile} instances. + * + * @param + * @param account ownCloud account holding the file. + * @param syncFileContents When 'true', transference of data will be started by the + * operation if needed and no conflict is detected. + * @param context Android context; needed to start transfers. + */ public SynchronizeFileOperation( - OCFile localFile, - OCFile serverFile, // make this null to let the operation checks the server; added to reuse info from SynchronizeFolderOperation + String remotePath, Account account, boolean syncFileContents, Context context) { - mLocalFile = localFile; - mServerFile = serverFile; + mRemotePath = remotePath; + mLocalFile = null; + mServerFile = null; mAccount = account; mSyncFileContents = syncFileContents; mContext = context; } + + /** + * Constructor allowing to reuse {@link OCFile} instances just queried from cache or network. + * + * Useful for folder / account synchronizations. + * + * @param localFile Data of file currently hold in device cache. MUSTN't be null. + * @param serverFile Data of file just retrieved from network. If null, will be + * retrieved from network by the operation when executed. + * @param account ownCloud account holding the file. + * @param syncFileContents When 'true', transference of data will be started by the + * operation if needed and no conflict is detected. + * @param context Android context; needed to start transfers. + */ public SynchronizeFileOperation( - String remotePath, + OCFile localFile, + OCFile serverFile, Account account, boolean syncFileContents, Context context) { - mRemotePath = remotePath; - mServerFile = null; + mLocalFile = localFile; + mServerFile = serverFile; + mRemotePath = localFile.getRemotePath(); mAccount = account; mSyncFileContents = syncFileContents; mContext = context; } + @Override protected RemoteOperationResult run(OwnCloudClient client) { @@ -87,8 +117,10 @@ public class SynchronizeFileOperation extends SyncOperation { RemoteOperationResult result = null; mTransferWasRequested = false; - // Get local file from the DB - mLocalFile = getStorageManager().getFileByPath(mRemotePath); + if (mLocalFile == null) { + // Get local file from the DB + mLocalFile = getStorageManager().getFileByPath(mRemotePath); + } if (!mLocalFile.isDown()) { /// easy decision @@ -99,8 +131,7 @@ public class SynchronizeFileOperation extends SyncOperation { /// local copy in the device -> need to think a bit more before do anything if (mServerFile == null) { - String remotePath = mLocalFile.getRemotePath(); - ReadRemoteFileOperation operation = new ReadRemoteFileOperation(remotePath); + ReadRemoteFileOperation operation = new ReadRemoteFileOperation(mRemotePath); result = operation.execute(client); if (result.isSuccess()){ mServerFile = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0));