X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/7eb82162b12679bc23c1bcf0f8830aa73c6a02cb..526a42a11b93c6568efe66814acefa7f9948dcff:/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 47f72ac2..450cc3ed 100644 --- a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java +++ b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java @@ -37,16 +37,19 @@ 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.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; -import eu.alefzero.webdav.WebdavClient; -import eu.alefzero.webdav.WebdavEntry; -import eu.alefzero.webdav.WebdavUtils; /** @@ -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); @@ -511,7 +544,6 @@ public class SynchronizeFolderOperation extends RemoteOperation { } } - /** * Scans the default location for saving local copies of files searching for * a 'lost' file with the same full name as the {@link OCFile} received as