Added cancellation checks in SynchronizeFolderOperation before every RemoteOperation...
[pub/Android/ownCloud.git] / src / com / owncloud / android / operations / SynchronizeFileOperation.java
index 6cff2b7..72cb22b 100644 (file)
@@ -98,9 +98,10 @@ public class SynchronizeFileOperation extends SyncOperation {
      * Useful to include this operation as part of the synchronization of a folder (or a full account), avoiding the
      * repetition of fetch operations (both in local database or remote server).
      * 
-     * At least data from local cache must be provided. If you don't have them, use the other constructor.
+     * At least one of localFile or serverFile MUST NOT BE NULL. If you don't have none of them, use the other 
+     * constructor.
      * 
-     * @param localFile             Data of file (just) retrieved from local cache/database. MUSTN't be null.
+     * @param localFile             Data of file (just) retrieved from local cache/database.
      * @param serverFile            Data of file (just) retrieved from a remote server. If null, will be
      *                              retrieved from network by the operation when executed.
      * @param account               ownCloud account holding the file.
@@ -117,7 +118,16 @@ public class SynchronizeFileOperation extends SyncOperation {
         
         mLocalFile = localFile;
         mServerFile = serverFile;
-        mRemotePath = localFile.getRemotePath();    // this will crash if localFile == null; use the other constructor
+        if (mLocalFile != null) {
+            mRemotePath = mLocalFile.getRemotePath();
+            if (mServerFile != null && !mServerFile.getRemotePath().equals(mRemotePath)) {
+                throw new IllegalArgumentException("serverFile and localFile do not correspond to the same OC file");
+            }
+        } else if (mServerFile != null) {
+            mRemotePath = mServerFile.getRemotePath();
+        } else {
+            throw new IllegalArgumentException("Both serverFile and localFile are NULL");
+        }
         mAccount = account;
         mSyncFileContents = syncFileContents;
         mContext = context;
@@ -153,12 +163,7 @@ public class SynchronizeFileOperation extends SyncOperation {
             boolean allowUploads, 
             Context context) {
         
-        mLocalFile = localFile;
-        mServerFile = serverFile;
-        mRemotePath = localFile.getRemotePath();    // this will crash if localFile == null; use the other constructor
-        mAccount = account;
-        mSyncFileContents = syncFileContents;
-        mContext = context;
+        this(localFile, serverFile, account, syncFileContents, context);
         mAllowUploads = allowUploads;
     }