Moved recursive fetch to notify end-of-syncrhonization of a folder BEFORE its childre...
authorDavid A. Velasco <dvelasco@solidgear.es>
Mon, 15 Oct 2012 11:14:46 +0000 (13:14 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Mon, 15 Oct 2012 11:14:46 +0000 (13:14 +0200)
src/com/owncloud/android/syncadapter/FileSyncAdapter.java

index 1e83375..7f4cf61 100644 (file)
@@ -184,6 +184,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 \r
     private void fetchData(String uri, SyncResult syncResult, long parentId) {\r
         PropFindMethod query = null;\r
+        Vector<OCFile> children = null;\r
         try {\r
             Log.d(TAG, "fetching " + uri);\r
             \r
@@ -213,9 +214,6 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                         Intent intent = new Intent(this.getContext(), FileDownloader.class);\r
                         intent.putExtra(FileDownloader.EXTRA_ACCOUNT, getAccount());\r
                         intent.putExtra(FileDownloader.EXTRA_FILE, file);\r
-                        /*intent.putExtra(FileDownloader.EXTRA_FILE_PATH, file.getRemotePath());\r
-                        intent.putExtra(FileDownloader.EXTRA_REMOTE_PATH, file.getRemotePath());\r
-                        intent.putExtra(FileDownloader.EXTRA_FILE_SIZE, file.getFileLength());*/\r
                         file.setKeepInSync(true);\r
                         getContext().startService(intent);\r
                     }\r
@@ -224,8 +222,6 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 \r
                     // Log.v(TAG, "adding file: " + file);\r
                     updatedFiles.add(file);\r
-                    if (parentId == 0)\r
-                        parentId = file.getFileId();\r
                 }\r
                 /*  Commented code for ugly performance tests\r
                 long saveDelay = System.currentTimeMillis();\r
@@ -237,39 +233,21 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                  */\r
             \r
                 // removal of obsolete files\r
-                Vector<OCFile> files = getStorageManager().getDirectoryContent(\r
+                 children = getStorageManager().getDirectoryContent(\r
                         getStorageManager().getFileById(parentId));\r
                 OCFile file;\r
                 String currentSavePath = FileDownloader.getSavePath(getAccount().name);\r
-                for (int i=0; i < files.size(); ) {\r
-                    file = files.get(i);\r
+                for (int i=0; i < children.size(); ) {\r
+                    file = children.get(i);\r
                     if (file.getLastSyncDate() != mCurrentSyncTime) {\r
                         Log.v(TAG, "removing file: " + file);\r
                         getStorageManager().removeFile(file, (file.isDown() && file.getStoragePath().startsWith(currentSavePath)));\r
-                        files.remove(i);\r
+                        children.remove(i);\r
                     } else {\r
                         i++;\r
                     }\r
                 }\r
             \r
-                // recursive fetch\r
-                for (int i=0; i < files.size() && !mCancellation; i++) {\r
-                    OCFile newFile = files.get(i);\r
-                    if (newFile.getMimetype().equals("DIR")) {\r
-                        fetchData(getUri().toString() + WebdavUtils.encodePath(newFile.getRemotePath()), syncResult, newFile.getFileId());\r
-                    }\r
-                }\r
-                if (mCancellation) Log.d(TAG, "Leaving " + uri + " because cancelation request");\r
-                \r
-                /*  Commented code for ugly performance tests\r
-                mResponseDelays[mDelaysIndex] = responseDelay;\r
-                mSaveDelays[mDelaysIndex] = saveDelay;\r
-                mDelaysCount++;\r
-                mDelaysIndex++;\r
-                if (mDelaysIndex >= MAX_DELAYS)\r
-                    mDelaysIndex = 0;\r
-                 */\r
-\r
             } else {\r
                 syncResult.stats.numAuthExceptions++;\r
             }\r
@@ -293,8 +271,39 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
             // synchronized folder -> notice to UI\r
             sendStickyBroadcast(true, getStorageManager().getFileById(parentId).getRemotePath());\r
         }\r
+        \r
+        \r
+        fetchChildren(children, syncResult);\r
+        if (mCancellation) Log.d(TAG, "Leaving " + uri + " because cancelation request");\r
+        \r
+        \r
+        /*  Commented code for ugly performance tests\r
+        mResponseDelays[mDelaysIndex] = responseDelay;\r
+        mSaveDelays[mDelaysIndex] = saveDelay;\r
+        mDelaysCount++;\r
+        mDelaysIndex++;\r
+        if (mDelaysIndex >= MAX_DELAYS)\r
+            mDelaysIndex = 0;\r
+         */\r
+        \r
+    }\r
+\r
+    /**\r
+     * Synchronize data of folders in the list of received files\r
+     * \r
+     * @param files         Files to recursively fetch \r
+     * @param syncResult    Updated object to provide results to the Synchronization Manager\r
+     */\r
+    private void fetchChildren(Vector<OCFile> files, SyncResult syncResult) {\r
+        for (int i=0; i < files.size() && !mCancellation; i++) {\r
+            OCFile newFile = files.get(i);\r
+            if (newFile.getMimetype().equals("DIR")) {\r
+                fetchData(getUri().toString() + WebdavUtils.encodePath(newFile.getRemotePath()), syncResult, newFile.getFileId());\r
+            }\r
+        }\r
     }\r
 \r
+    \r
     private OCFile fillOCFile(WebdavEntry we) {\r
         OCFile file = new OCFile(we.decodedPath());\r
         file.setCreationTimestamp(we.createTimestamp());\r