OC-2202: Change old Read method by new ReadRemoteFileOperation
[pub/Android/ownCloud.git] / src / com / owncloud / android / operations / SynchronizeFolderOperation.java
index e4b5e61..450cc3e 100644 (file)
@@ -37,15 +37,18 @@ import android.accounts.Account;
 import android.content.Context;
 import android.content.Intent;
 
-import com.owncloud.android.Log_OC;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.network.webdav.WebdavClient;
-import com.owncloud.android.network.webdav.WebdavEntry;
-import com.owncloud.android.network.webdav.WebdavUtils;
-import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
+import com.owncloud.android.oc_framework.network.webdav.WebdavEntry;
+import com.owncloud.android.oc_framework.network.webdav.WebdavUtils;
+import com.owncloud.android.oc_framework.operations.RemoteOperation;
+import com.owncloud.android.oc_framework.operations.RemoteOperationResult;
+import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.oc_framework.operations.remote.ReadRemoteFileOperation;
 import com.owncloud.android.syncadapter.FileSyncService;
 import com.owncloud.android.utils.FileStorageUtils;
+import com.owncloud.android.utils.Log_OC;
 
 
 
@@ -239,59 +242,89 @@ public class SynchronizeFolderOperation extends RemoteOperation {
 
 
     private RemoteOperationResult fetchAndSyncRemoteFolder(WebdavClient client) {
-        RemoteOperationResult result = null;
-        String remotePath = null;
-        PropFindMethod query = null;
-        try {
-            remotePath = mLocalFolder.getRemotePath();
-            Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath);
-
-            // remote request 
-            query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(remotePath),
-                    DavConstants.PROPFIND_ALL_PROP,
-                    DavConstants.DEPTH_1);
-            int status = client.executeMethod(query);
-
-            // check and process response
-            if (isMultiStatus(status)) {
-                synchronizeData(query.getResponseBodyAsMultiStatus(), client);
-                if (mConflictsFound > 0  || mFailsInFavouritesFound > 0) { 
-                    result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);   // should be different result, but will do the job
-                } else {
-                    result = new RemoteOperationResult(true, status, query.getResponseHeaders());
-                }
-                
-            } else {
-                // synchronization failed
-                client.exhaustResponse(query.getResponseBodyAsStream());
-                if (status == HttpStatus.SC_NOT_FOUND) {
-                    removeLocalFolder();
-                }
-                result = new RemoteOperationResult(false, status, query.getResponseHeaders());
-            }
-
-        } catch (Exception e) {
-            result = new RemoteOperationResult(e);
-            
-
-        } finally {
-            if (query != null)
-                query.releaseConnection();  // let the connection available for other methods
-            if (result.isSuccess()) {
-                Log_OC.i(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage());
-            } else {
-                if (result.isException()) {
-                    Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath  + ": " + result.getLogMessage(), result.getException());
-                } else {
-                    Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage());
-                }
+        String remotePath = mLocalFolder.getRemotePath();
+        ReadRemoteFileOperation operation = new ReadRemoteFileOperation(remotePath);
+        RemoteOperationResult result = operation.execute(client);
+        Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath);
+        
+        if (result.isSuccess()) {
+            MultiStatus dataInServer = ((ReadRemoteFileOperation) operation).getDataInServer();
+            synchronizeData(dataInServer, client);
+            if (mConflictsFound > 0  || mFailsInFavouritesFound > 0) { 
+                result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);   // should be different result, but will do the job
             }
-            
+        } else {
+            if (result.getCode() == ResultCode.FILE_NOT_FOUND)
+                removeLocalFolder();
         }
+        
+//        RemoteOperationResult result = null;
+//        String remotePath = null;
+//        PropFindMethod query = null;
+//        try {
+//            remotePath = mLocalFolder.getRemotePath();
+//            Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath);
+//
+//            // remote request 
+//            query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(remotePath),
+//                    DavConstants.PROPFIND_ALL_PROP,
+//                    DavConstants.DEPTH_1);
+//            int status = client.executeMethod(query);
+//
+//            // check and process response
+//            if (isMultiStatus(status)) {
+//                synchronizeData(query.getResponseBodyAsMultiStatus(), client);
+//                if (mConflictsFound > 0  || mFailsInFavouritesFound > 0) { 
+//                    result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);   // should be different result, but will do the job
+//                } else {
+//                    result = new RemoteOperationResult(true, status, query.getResponseHeaders());
+//                }
+//                
+//            } else {
+//                // synchronization failed
+//                client.exhaustResponse(query.getResponseBodyAsStream());
+//                if (status == HttpStatus.SC_NOT_FOUND) {
+//                    removeLocalFolder();
+//                }
+//                result = new RemoteOperationResult(false, status, query.getResponseHeaders());
+//            }
+//
+//        } catch (Exception e) {
+//            result = new RemoteOperationResult(e);
+//            
+//
+//        } finally {
+//            if (query != null)
+//                query.releaseConnection();  // let the connection available for other methods
+//            if (result.isSuccess()) {
+//                Log_OC.i(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage());
+//            } else {
+//                if (result.isException()) {
+//                    Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath  + ": " + result.getLogMessage(), result.getException());
+//                } else {
+//                    Log_OC.e(TAG, "Synchronized " + mAccount.name + remotePath + ": " + result.getLogMessage());
+//                }
+//            }
+//            
+//        }
         return result;
     }
 
 
+//    @Override
+//    public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
+//        if (operation instanceof ReadRemoteFileOperation) {
+//            if (result.isSuccess()) {
+//                MultiStatus dataInServer = ((ReadRemoteFileOperation) operation).getDataInServer();
+//                synchronizeData(dataInServer, client)
+//            } else {
+//                
+//            }
+//                
+//        }
+//        
+//    }
+    
     private void removeLocalFolder() {
         if (mStorageManager.fileExists(mLocalFolder.getFileId())) {
             String currentSavePath = FileStorageUtils.getSavePath(mAccount.name);