Process share with password
[pub/Android/ownCloud.git] / src / com / owncloud / android / operations / SynchronizeFolderOperation.java
index 420adca..e80b42f 100644 (file)
@@ -1,5 +1,8 @@
-/* ownCloud Android client application
- *   Copyright (C) 2012-2014 ownCloud Inc.
+/**
+ *   ownCloud Android client application
+ *
+ *   @author David A. Velasco
+ *   Copyright (C) 2015 ownCloud Inc.
  *
  *   This program is free software: you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License version 2,
@@ -56,8 +59,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
  *  properties, and updates the local database with them.
  *  
  *  Does NOT enter in the child folders to synchronize their contents also.
- * 
- *  @author David A. Velasco
  */
 public class SynchronizeFolderOperation extends SyncOperation {
 
@@ -159,9 +160,6 @@ public class SynchronizeFolderOperation extends SyncOperation {
                     syncContents(client);
                 }
 
-                if (mFilesForDirectDownload.isEmpty()) {
-                    sendBroadcastForNotifyingUIUpdate(result.isSuccess());
-                }
             }
             
             if (mCancellationRequested.get()) {
@@ -170,16 +168,6 @@ public class SynchronizeFolderOperation extends SyncOperation {
             
         } catch (OperationCancelledException e) {
             result = new RemoteOperationResult(e);
-
-            // Needed in case that cancellation occurs before starting any download.
-            // If not, yellow arrow continues being shown.
-            sendBroadcastForNotifyingUIUpdate(false);
-
-            Intent intent = new Intent(mContext, FileDownloader.class);
-            intent.setAction(FileDownloader.ACTION_CANCEL_FILE_DOWNLOAD);
-            intent.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);
-            intent.putExtra(FileDownloader.EXTRA_FILE, mLocalFolder);
-            mContext.startService(intent);            
         }
 
         return result;
@@ -224,7 +212,6 @@ public class SynchronizeFolderOperation extends SyncOperation {
                         result.getLogMessage());
             }
 
-            sendBroadcastForNotifyingUIUpdate(result.isSuccess());
         }
 
         return result;
@@ -358,10 +345,11 @@ public class SynchronizeFolderOperation extends SyncOperation {
             /// classify file to sync/download contents later
             if (remoteFile.isFolder()) {
                 /// to download children files recursively
-                startSyncFolderOperation(remoteFile.getRemotePath());
-
-                if (mCancellationRequested.get()) {
-                    throw new OperationCancelledException();
+                synchronized(mCancellationRequested) {
+                    if (mCancellationRequested.get()) {
+                        throw new OperationCancelledException();
+                    }
+                    startSyncFolderOperation(remoteFile.getRemotePath());
                 }
 
             } else if (remoteFile.keepInSync()) {
@@ -403,9 +391,11 @@ public class SynchronizeFolderOperation extends SyncOperation {
             /// classify file to sync/download contents later
             if (child.isFolder()) {
                 /// to download children files recursively
-                startSyncFolderOperation(child.getRemotePath());
-                if (mCancellationRequested.get()) {
-                    throw new OperationCancelledException();
+                synchronized(mCancellationRequested) {
+                    if (mCancellationRequested.get()) {
+                        throw new OperationCancelledException();
+                    }
+                    startSyncFolderOperation(child.getRemotePath());
                 }
 
             } else {
@@ -427,13 +417,15 @@ public class SynchronizeFolderOperation extends SyncOperation {
     
     private void startDirectDownloads() throws OperationCancelledException {
         for (OCFile file : mFilesForDirectDownload) {
-            if (mCancellationRequested.get()) {
-                throw new OperationCancelledException();
+            synchronized(mCancellationRequested) {
+                if (mCancellationRequested.get()) {
+                    throw new OperationCancelledException();
+                }
+                Intent i = new Intent(mContext, FileDownloader.class);
+                i.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);
+                i.putExtra(FileDownloader.EXTRA_FILE, file);
+                mContext.startService(i);
             }
-            Intent i = new Intent(mContext, FileDownloader.class);
-            i.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);
-            i.putExtra(FileDownloader.EXTRA_FILE, file);
-            mContext.startService(i);
         }
     }
 
@@ -449,7 +441,8 @@ public class SynchronizeFolderOperation extends SyncOperation {
      */
     private void startContentSynchronizations(List<SyncOperation> filesToSyncContents, OwnCloudClient client) 
             throws OperationCancelledException {
-        
+
+        Log_OC.v(TAG, "Starting content synchronization... ");
         RemoteOperationResult contentsResult = null;
         for (SyncOperation op: filesToSyncContents) {
             if (mCancellationRequested.get()) {
@@ -511,16 +504,6 @@ public class SynchronizeFolderOperation extends SyncOperation {
         }
     }
 
-    private void sendBroadcastForNotifyingUIUpdate(boolean result) {
-        // Send a broadcast message for notifying UI update
-        Intent uiUpdate = new Intent(FileDownloader.getDownloadFinishMessage());
-        uiUpdate.putExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, result);
-        uiUpdate.putExtra(FileDownloader.ACCOUNT_NAME, mAccount.name);
-        uiUpdate.putExtra(FileDownloader.EXTRA_REMOTE_PATH, mRemotePath);
-        uiUpdate.putExtra(FileDownloader.EXTRA_FILE_PATH, mLocalFolder.getRemotePath());
-        mContext.sendStickyBroadcast(uiUpdate);
-    }
-
     
     /**
      * Cancel operation
@@ -544,4 +527,8 @@ public class SynchronizeFolderOperation extends SyncOperation {
         intent.putExtra(OperationsService.EXTRA_REMOTE_PATH, path);
         mContext.startService(intent);
     }
+
+    public String getRemotePath() {
+        return mRemotePath;
+    }
 }