Studying lack of upload when a file that was not previously down is set as favourite...
[pub/Android/ownCloud.git] / src / com / owncloud / android / operations / SynchronizeFolderOperation.java
index ad7df51..d24c41d 100644 (file)
@@ -33,6 +33,8 @@ import android.util.Log;
 import com.owncloud.android.datamodel.DataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
+import com.owncloud.android.files.services.FileObserverService;
+import com.owncloud.android.utils.FileStorageUtils;
 
 import eu.alefzero.webdav.WebdavClient;
 import eu.alefzero.webdav.WebdavEntry;
@@ -46,7 +48,7 @@ import eu.alefzero.webdav.WebdavUtils;
  */
 public class SynchronizeFolderOperation extends RemoteOperation {
 
-    private static final String TAG = SynchronizeFolderOperation.class.getCanonicalName();
+    private static final String TAG = SynchronizeFolderOperation.class.getSimpleName();
 
     /** Remote folder to synchronize */
     private String mRemotePath;
@@ -130,6 +132,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
                     OCFile oldFile = mStorageManager.getFileByPath(file.getRemotePath());
                     if (oldFile != null) {
                         if (oldFile.keepInSync() && file.getModificationTimestamp() > oldFile.getModificationTimestamp()) {
+                            disableObservance(file);        // first disable observer so we won't get file upload right after download
                             requestContentDownload(file);
                         }
                         file.setKeepInSync(oldFile.keepInSync());
@@ -137,8 +140,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
                 
                     updatedFiles.add(file);
                 }
-                
-                
+                                
                 // save updated contents in local database; all at once, trying to get a best performance in database update (not a big deal, indeed)
                 mStorageManager.saveFiles(updatedFiles);
 
@@ -146,7 +148,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
                 // removal of obsolete files
                 mChildren = mStorageManager.getDirectoryContent(mStorageManager.getFileById(mParentId));
                 OCFile file;
-                String currentSavePath = FileDownloader.getSavePath(mAccount.name);
+                String currentSavePath = FileStorageUtils.getSavePath(mAccount.name);
                 for (int i=0; i < mChildren.size(); ) {
                     file = mChildren.get(i);
                     if (file.getLastSyncDate() != mCurrentSyncTime) {
@@ -179,7 +181,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
         return result;
     }
     
-    
+
     public boolean isMultiStatus(int status) {
         return (status == HttpStatus.SC_MULTI_STATUS); 
     }
@@ -202,6 +204,21 @@ public class SynchronizeFolderOperation extends RemoteOperation {
     }
     
     
+    /**
+     * Request to stop the observance of local updates for a file.  
+     * 
+     * @param file      OCFile representing the remote file to stop to monitor for local updates
+     */
+    private void disableObservance(OCFile file) {
+        Log.d(TAG, "Disabling observation of remote file" + file.getRemotePath());
+        Intent intent = new Intent(mContext, FileObserverService.class);
+        intent.putExtra(FileObserverService.KEY_FILE_CMD, FileObserverService.CMD_ADD_DOWNLOADING_FILE);
+        intent.putExtra(FileObserverService.KEY_CMD_ARG, file.getRemotePath());
+        mContext.startService(intent);
+        
+    }
+
+
     /** 
      * Requests a download to the file download service
      *