X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/776c6f1ffd2efe961fc4dff58b3314325608bed2..8fef772af40a8eb328105c13a102b62c64d16773:/src/com/owncloud/android/operations/SynchronizeFolderOperation.java diff --git a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java index 2bf4ee08..82b024d2 100644 --- a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java +++ b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java @@ -157,7 +157,7 @@ public class SynchronizeFolderOperation extends RemoteOperation { OCFile parent = fillOCFile(we); // Properties of local folder OCFile localParent = mStorageManager.getFileById(1); - if (parent.getEtag() != localParent.getEtag()) { + if (localParent == null || parent.getEtag() != localParent.getEtag()) { mStorageManager.saveFile(parent); mParentId = parent.getFileId(); } @@ -219,85 +219,93 @@ public class SynchronizeFolderOperation extends RemoteOperation { } updatedFiles.add(file); - //} - //} - - // save updated contents in local database; all at once, trying to get a best performance in database update (not a big deal, indeed) - mStorageManager.saveFiles(updatedFiles); - - // request for the synchronization of files AFTER saving last properties - //SynchronizeFileOperation op = null; - RemoteOperationResult contentsResult = null; - for (SynchronizeFileOperation op: filesToSyncContents) {//int i=0; i < filesToSyncContents.size(); i++) { - //op = filesToSyncContents.get(i); - contentsResult = op.execute(client); // returns without waiting for upload or download finishes - if (!contentsResult.isSuccess()) { - if (contentsResult.getCode() == ResultCode.SYNC_CONFLICT) { - mConflictsFound++; - } else { - mFailsInFavouritesFound++; - if (contentsResult.getException() != null) { - Log_OC.d(TAG, "Error while synchronizing favourites : " + contentsResult.getLogMessage(), contentsResult.getException()); - } else { - Log_OC.d(TAG, "Error while synchronizing favourites : " + contentsResult.getLogMessage()); - } - } - } // won't let these fails break the synchronization process - } - + } + } - // removal of obsolete files - mChildren = mStorageManager.getDirectoryContent(mStorageManager.getFileById(mParentId)); - //OCFile file; - String currentSavePath = FileStorageUtils.getSavePath(mAccount.name); - for (OCFile fileChild: mChildren) { - //file = mChildren.get(i); - //if (file.getLastSyncDateForProperties() != mCurrentSyncTime) { - if (!filesOnServer.contains(fileChild.getRemotePath())) { - Log_OC.d(TAG, "removing file: " + fileChild.getFileName()); - mStorageManager.removeFile(fileChild, (fileChild.isDown() && fileChild.getStoragePath().startsWith(currentSavePath))); - mChildren.remove(fileChild); //.remove(i); + // save updated contents in local database; all at once, trying to get a best performance in database update (not a big deal, indeed) + mStorageManager.saveFiles(updatedFiles); + + // request for the synchronization of files AFTER saving last properties + //SynchronizeFileOperation op = null; + RemoteOperationResult contentsResult = null; + for (SynchronizeFileOperation op: filesToSyncContents) {//int i=0; i < filesToSyncContents.size(); i++) { + //op = filesToSyncContents.get(i); + contentsResult = op.execute(client); // returns without waiting for upload or download finishes + if (!contentsResult.isSuccess()) { + if (contentsResult.getCode() == ResultCode.SYNC_CONFLICT) { + mConflictsFound++; + } else { + mFailsInFavouritesFound++; + if (contentsResult.getException() != null) { + Log_OC.e(TAG, "Error while synchronizing favourites : " + contentsResult.getLogMessage(), contentsResult.getException()); + } else { + Log_OC.e(TAG, "Error while synchronizing favourites : " + contentsResult.getLogMessage()); } - // } else { - // i++; - // } } + } // won't let these fails break the synchronization process + } + + + // removal of obsolete files + mChildren = mStorageManager.getDirectoryContent(mStorageManager.getFileById(mParentId)); + //OCFile file; + String currentSavePath = FileStorageUtils.getSavePath(mAccount.name); + for (OCFile fileChild: mChildren) { + //file = mChildren.get(i); + //if (file.getLastSyncDateForProperties() != mCurrentSyncTime) { + if (!filesOnServer.contains(fileChild.getRemotePath())) { + Log_OC.d(TAG, "removing file: " + fileChild.getFileName()); + mStorageManager.removeFile(fileChild, (fileChild.isDown() && fileChild.getStoragePath().startsWith(currentSavePath))); + mChildren.remove(fileChild); //.remove(i); } + // } else { + // i++; + // } } - + // } + //} + } else { client.exhaustResponse(query.getResponseBodyAsStream()); } - + // prepare result object if (!fileChanged) { result = new RemoteOperationResult(ResultCode.OK_NO_CHANGES_ON_DIR); - + } else if (isMultiStatus(status)) { 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); + result = new RemoteOperationResult(true, status, query.getResponseHeaders()); } } else { - result = new RemoteOperationResult(false, status); + result = new RemoteOperationResult(false, status, query.getResponseHeaders()); } Log_OC.i(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage()); - - + } catch (Exception e) { result = new RemoteOperationResult(e); - Log_OC.e(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage(), result.getException()); + } finally { if (query != null) query.releaseConnection(); // let the connection available for other methods + if (result.isSuccess()) { + Log_OC.i(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage()); + } else { + if (result.isException()) { + Log_OC.e(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage(), result.getException()); + } else { + Log_OC.e(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage()); + } + } } - + return result; } - + public boolean isMultiStatus(int status) { return (status == HttpStatus.SC_MULTI_STATUS);