Fixed a couple of null pointers
authorDavid A. Velasco <dvelasco@solidgear.es>
Fri, 12 Dec 2014 12:30:55 +0000 (13:30 +0100)
committerDavid A. Velasco <dvelasco@solidgear.es>
Fri, 12 Dec 2014 12:30:55 +0000 (13:30 +0100)
src/com/owncloud/android/operations/SynchronizeFileOperation.java
src/com/owncloud/android/operations/SynchronizeFolderOperation.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;
     }
     
index 926e57f..3f64097 100644 (file)
@@ -116,6 +116,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
         mAccount = account;
         mContext = context;
         mRemoteFolderChanged = false;
+        mFilesForDirectDownload = new Vector<OCFile>();
         mFilesToSyncContentsWithoutUpload = new Vector<SyncOperation>();
         mFavouriteFilesToSyncContents = new Vector<SyncOperation>();
         mFoldersToWalkDown = new Vector<SyncOperation>();
@@ -269,6 +270,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
                 + " changed - starting update of local data ");
 
         List<OCFile> updatedFiles = new Vector<OCFile>(folderAndFiles.size() - 1);
+        mFilesForDirectDownload.clear();
         mFilesToSyncContentsWithoutUpload.clear();
         mFavouriteFilesToSyncContents.clear();
         mFoldersToWalkDown.clear();