Merge remote-tracking branch 'rhabbachi/feature/308_sync_folder' into download_folder
[pub/Android/ownCloud.git] / src / com / owncloud / android / files / FileOperationsHelper.java
index 65e8d83..6f65182 100644 (file)
@@ -22,16 +22,18 @@ import org.apache.http.protocol.HTTP;
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.content.Intent;
-import android.media.MediaScannerConnection;
 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;
+
 import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 import com.owncloud.android.lib.common.network.WebdavUtils;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -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);
@@ -293,4 +327,6 @@ public class FileOperationsHelper {
     public void setOpIdWaitingFor(long waitingForOpId) {
         mWaitingForOpId = waitingForOpId;
     }
+    
+    
 }