From: David A. Velasco Date: Mon, 15 Oct 2012 11:14:46 +0000 (+0200) Subject: Moved recursive fetch to notify end-of-syncrhonization of a folder BEFORE its childre... X-Git-Tag: oc-android-1.4.3~152 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/d6ccd4c9600822b08141ecaa7d19aed614ca2ed5?ds=inline Moved recursive fetch to notify end-of-syncrhonization of a folder BEFORE its children are synchronized --- diff --git a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java index 1e833753..7f4cf61b 100644 --- a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java +++ b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java @@ -184,6 +184,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { private void fetchData(String uri, SyncResult syncResult, long parentId) { PropFindMethod query = null; + Vector children = null; try { Log.d(TAG, "fetching " + uri); @@ -213,9 +214,6 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { Intent intent = new Intent(this.getContext(), FileDownloader.class); intent.putExtra(FileDownloader.EXTRA_ACCOUNT, getAccount()); intent.putExtra(FileDownloader.EXTRA_FILE, file); - /*intent.putExtra(FileDownloader.EXTRA_FILE_PATH, file.getRemotePath()); - intent.putExtra(FileDownloader.EXTRA_REMOTE_PATH, file.getRemotePath()); - intent.putExtra(FileDownloader.EXTRA_FILE_SIZE, file.getFileLength());*/ file.setKeepInSync(true); getContext().startService(intent); } @@ -224,8 +222,6 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { // Log.v(TAG, "adding file: " + file); updatedFiles.add(file); - if (parentId == 0) - parentId = file.getFileId(); } /* Commented code for ugly performance tests long saveDelay = System.currentTimeMillis(); @@ -237,39 +233,21 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { */ // removal of obsolete files - Vector files = getStorageManager().getDirectoryContent( + children = getStorageManager().getDirectoryContent( getStorageManager().getFileById(parentId)); OCFile file; String currentSavePath = FileDownloader.getSavePath(getAccount().name); - for (int i=0; i < files.size(); ) { - file = files.get(i); + for (int i=0; i < children.size(); ) { + file = children.get(i); if (file.getLastSyncDate() != mCurrentSyncTime) { Log.v(TAG, "removing file: " + file); getStorageManager().removeFile(file, (file.isDown() && file.getStoragePath().startsWith(currentSavePath))); - files.remove(i); + children.remove(i); } else { i++; } } - // recursive fetch - for (int i=0; i < files.size() && !mCancellation; i++) { - OCFile newFile = files.get(i); - if (newFile.getMimetype().equals("DIR")) { - fetchData(getUri().toString() + WebdavUtils.encodePath(newFile.getRemotePath()), syncResult, newFile.getFileId()); - } - } - if (mCancellation) Log.d(TAG, "Leaving " + uri + " because cancelation request"); - - /* Commented code for ugly performance tests - mResponseDelays[mDelaysIndex] = responseDelay; - mSaveDelays[mDelaysIndex] = saveDelay; - mDelaysCount++; - mDelaysIndex++; - if (mDelaysIndex >= MAX_DELAYS) - mDelaysIndex = 0; - */ - } else { syncResult.stats.numAuthExceptions++; } @@ -293,8 +271,39 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { // synchronized folder -> notice to UI sendStickyBroadcast(true, getStorageManager().getFileById(parentId).getRemotePath()); } + + + fetchChildren(children, syncResult); + if (mCancellation) Log.d(TAG, "Leaving " + uri + " because cancelation request"); + + + /* Commented code for ugly performance tests + mResponseDelays[mDelaysIndex] = responseDelay; + mSaveDelays[mDelaysIndex] = saveDelay; + mDelaysCount++; + mDelaysIndex++; + if (mDelaysIndex >= MAX_DELAYS) + mDelaysIndex = 0; + */ + + } + + /** + * Synchronize data of folders in the list of received files + * + * @param files Files to recursively fetch + * @param syncResult Updated object to provide results to the Synchronization Manager + */ + private void fetchChildren(Vector files, SyncResult syncResult) { + for (int i=0; i < files.size() && !mCancellation; i++) { + OCFile newFile = files.get(i); + if (newFile.getMimetype().equals("DIR")) { + fetchData(getUri().toString() + WebdavUtils.encodePath(newFile.getRemotePath()), syncResult, newFile.getFileId()); + } + } } + private OCFile fillOCFile(WebdavEntry we) { OCFile file = new OCFile(we.decodedPath()); file.setCreationTimestamp(we.createTimestamp());