Merge remote-tracking branch 'rhabbachi/feature/308_sync_folder' into download_folder
[pub/Android/ownCloud.git] / src / com / owncloud / android / files / FileOperationsHelper.java
index 1bc1930..6f65182 100644 (file)
@@ -23,11 +23,13 @@ import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.content.Intent;
 import android.net.Uri;
+import android.os.storage.StorageManager;
 import android.support.v4.app.DialogFragment;
 import android.webkit.MimeTypeMap;
 import android.widget.Toast;
 
 import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
@@ -40,6 +42,10 @@ import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.dialog.ShareLinkToDialog;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
 /**
  * 
  * @author masensio
@@ -197,18 +203,46 @@ public class FileOperationsHelper {
     
     
     public void syncFile(OCFile file) {
-        // Sync file
-        Intent service = new Intent(mFileActivity, OperationsService.class);
-        service.setAction(OperationsService.ACTION_SYNC_FILE);
-        service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
-        service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); 
-        service.putExtra(OperationsService.EXTRA_SYNC_FILE_CONTENTS, true);
-        mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
-        
-        mFileActivity.showLoadingDialog();
+        Vector<OCFile> filesList = new Vector<OCFile>();
+        if (!file.isFolder()){
+            filesList.add(file);
+        }else {
+            // Add files recursivly
+            FileDataStorageManager storageManager = mFileActivity.getStorageManager();
+            filesList.addAll(storageManager.getFolderContent(file));
+            boolean newfiles;
+            do {
+                Vector<OCFile> tmpFolders = new Vector<OCFile>();
+                for (OCFile tmpfile : filesList) {
+                    if (tmpfile.isFolder()) {
+                        tmpFolders.add(tmpfile);
+                    }
+                }
+                if (tmpFolders.isEmpty()){
+                    newfiles = false;
+                }else {
+                    for(OCFile tmpFolder : tmpFolders){
+                        filesList.remove(tmpFolder);
+                        filesList.addAll(storageManager.getFolderContent(tmpFolder));
+                    }
+                    newfiles = true;
+                }
+            }while(newfiles);
+        }
+        // Sync file(s)
+        for (OCFile childFile : filesList) {
+            Intent service = new Intent(mFileActivity, OperationsService.class);
+            service.setAction(OperationsService.ACTION_SYNC_FILE);
+            service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+            service.putExtra(OperationsService.EXTRA_REMOTE_PATH, childFile.getRemotePath());
+            service.putExtra(OperationsService.EXTRA_SYNC_FILE_CONTENTS, true);
+            mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+        }
+        if (!file.isFolder()) {
+            mFileActivity.showLoadingDialog();
+        }
     }
     
-    
     public void renameFile(OCFile file, String newFilename) {
         // RenameFile
         Intent service = new Intent(mFileActivity, OperationsService.class);
@@ -265,7 +299,24 @@ public class FileOperationsHelper {
         } else if (uploaderBinder != null && uploaderBinder.isUploading(account, file)) {
             uploaderBinder.cancel(account, file);
         }
-    }    
+    }
+
+    /**
+     * Start move file operation
+     * @param newfile           File where it is going to be moved
+     * @param currentFile       File with the previous info
+     */
+    public void moveFile(OCFile newfile, OCFile currentFile) {
+        // Move files
+        Intent service = new Intent(mFileActivity, OperationsService.class);
+        service.setAction(OperationsService.ACTION_MOVE_FILE);
+        service.putExtra(OperationsService.EXTRA_NEW_PARENT_PATH, newfile.getRemotePath());
+        service.putExtra(OperationsService.EXTRA_REMOTE_PATH, currentFile.getRemotePath());
+        service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+        mWaitingForOpId =  mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+        mFileActivity.showLoadingDialog();
+    }
 
 
     public long getOpIdWaitingFor() {