فهرست منبع

Delay load of cached information about folder (mLocalFolder) until the operation is really run

David A. Velasco 10 سال پیش
والد
کامیت
ddac353a0a
1فایلهای تغییر یافته به همراه19 افزوده شده و 20 حذف شده
  1. 19 20
      src/com/owncloud/android/operations/SynchronizeFolderOperation.java

+ 19 - 20
src/com/owncloud/android/operations/SynchronizeFolderOperation.java

@@ -72,15 +72,18 @@ public class SynchronizeFolderOperation extends SyncOperation {
     /** Time stamp for the synchronization process in progress */
     private long mCurrentSyncTime;
 
-    /** Remote folder to synchronize */
-    private OCFile mLocalFolder;
-
+    /** Remote path of the folder to synchronize */
+    private String mRemotePath;
+    
     /** Account where the file to synchronize belongs */
     private Account mAccount;
 
     /** Android context; necessary to send requests to the download service */
     private Context mContext;
 
+    /** Locally cached information about folder to synchronize */
+    private OCFile mLocalFolder;
+
     /** Files and folders contained in the synchronized folder after a successful operation */
     private List<OCFile> mChildren;
 
@@ -110,7 +113,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
      * @param   currentSyncTime         Time stamp for the synchronization process in progress.
      */
     public SynchronizeFolderOperation(Context context, String remotePath, Account account, long currentSyncTime){
-        mLocalFolder = new OCFile(remotePath);
+        mRemotePath = remotePath;
         mCurrentSyncTime = currentSyncTime;
         mAccount = account;
         mContext = context;
@@ -153,13 +156,15 @@ public class SynchronizeFolderOperation extends SyncOperation {
         mConflictsFound = 0;
         mForgottenLocalFiles.clear();
 
-        /// perform the download
         synchronized(mCancellationRequested) {
             if (mCancellationRequested.get()) {
                 return new RemoteOperationResult(new OperationCancelledException());
             }
         }
 
+        // get locally cached information about folder 
+        OCFile mLocalFolder = getStorageManager().getFileByPath(mRemotePath);   
+        
         result = checkForChanges(client);
 
         if (result.isSuccess()) {
@@ -175,15 +180,13 @@ public class SynchronizeFolderOperation extends SyncOperation {
     }
 
     private RemoteOperationResult checkForChanges(OwnCloudClient client) {
+        Log_OC.d(TAG, "Checking changes in " + mAccount.name + mRemotePath);
+
         mRemoteFolderChanged = true;
         RemoteOperationResult result = null;
-        String remotePath = null;
-
-        remotePath = mLocalFolder.getRemotePath();
-        Log_OC.d(TAG, "Checking changes in " + mAccount.name + remotePath);
-
+        
         // remote request
-        ReadRemoteFileOperation operation = new ReadRemoteFileOperation(remotePath);
+        ReadRemoteFileOperation operation = new ReadRemoteFileOperation(mRemotePath);
         result = operation.execute(client);
         if (result.isSuccess()){
             OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0));
@@ -194,7 +197,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
 
             result = new RemoteOperationResult(ResultCode.OK);
 
-            Log_OC.i(TAG, "Checked " + mAccount.name + remotePath + " : " +
+            Log_OC.i(TAG, "Checked " + mAccount.name + mRemotePath + " : " +
                     (mRemoteFolderChanged ? "changed" : "not changed"));
 
         } else {
@@ -203,10 +206,10 @@ public class SynchronizeFolderOperation extends SyncOperation {
                 removeLocalFolder();
             }
             if (result.isException()) {
-                Log_OC.e(TAG, "Checked " + mAccount.name + remotePath  + " : " +
+                Log_OC.e(TAG, "Checked " + mAccount.name + mRemotePath  + " : " +
                         result.getLogMessage(), result.getException());
             } else {
-                Log_OC.e(TAG, "Checked " + mAccount.name + remotePath + " : " +
+                Log_OC.e(TAG, "Checked " + mAccount.name + mRemotePath + " : " +
                         result.getLogMessage());
             }
         }
@@ -216,10 +219,9 @@ public class SynchronizeFolderOperation extends SyncOperation {
 
 
     private RemoteOperationResult fetchAndSyncRemoteFolder(OwnCloudClient client) {
-        String remotePath = mLocalFolder.getRemotePath();
-        ReadRemoteFolderOperation operation = new ReadRemoteFolderOperation(remotePath);
+        ReadRemoteFolderOperation operation = new ReadRemoteFolderOperation(mRemotePath);
         RemoteOperationResult result = operation.execute(client);
-        Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath);
+        Log_OC.d(TAG, "Synchronizing " + mAccount.name + mRemotePath);
 
         if (result.isSuccess()) {
             synchronizeData(result.getData(), client);
@@ -266,9 +268,6 @@ public class SynchronizeFolderOperation extends SyncOperation {
     private void synchronizeData(ArrayList<Object> folderAndFiles, OwnCloudClient client) {
         FileDataStorageManager storageManager = getStorageManager();
         
-        // get 'fresh data' from the database
-        mLocalFolder = storageManager.getFileByPath(mLocalFolder.getRemotePath());
-
         // parse data from remote folder
         OCFile remoteFolder = fillOCFile((RemoteFile)folderAndFiles.get(0));
         remoteFolder.setParentId(mLocalFolder.getParentId());