X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/16b5c6b9ad29bee58dec8aa301b21a2992d63d00..461364f68b95df0ddf003180033187d677223c79:/src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java diff --git a/src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java b/src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java index 230d3a75..d3b6fc2b 100644 --- a/src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java +++ b/src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java @@ -19,9 +19,6 @@ package eu.alefzero.owncloud.syncadapter; import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; import java.util.Vector; import org.apache.jackrabbit.webdav.DavException; @@ -37,7 +34,6 @@ import android.content.Intent; import android.content.SyncResult; import android.os.Bundle; import android.util.Log; -import android.webkit.MimeTypeMap; import eu.alefzero.owncloud.datamodel.FileDataStorageManager; import eu.alefzero.owncloud.datamodel.OCFile; import eu.alefzero.webdav.WebdavEntry; @@ -70,7 +66,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { Log.d(TAG, "syncing owncloud account " + account.name); - sendStickyBroadcast(true, -1); // starting message to UI + sendStickyBroadcast(true, null); // message to signal the start to the UI PropFindMethod query; try { @@ -85,7 +81,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { OCFile file = fillOCFile(we); file.setParentId(0); getStorageManager().saveFile(file); - fetchData(getUri().toString(), syncResult, file.getFileId()); + fetchData(getUri().toString(), syncResult, file.getFileId(), account); } } catch (OperationCanceledException e) { e.printStackTrace(); @@ -98,18 +94,26 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { } catch (DavException e) { syncResult.stats.numIoExceptions++; e.printStackTrace(); + } catch (Throwable t) { + // TODO update syncResult + Log.e(TAG, "problem while synchronizing owncloud account " + account.name, t); + t.printStackTrace(); } - sendStickyBroadcast(false, -1); + sendStickyBroadcast(false, null); } - private void fetchData(String uri, SyncResult syncResult, long parentId) { + private void fetchData(String uri, SyncResult syncResult, long parentId, Account account) { try { + Log.v(TAG, "syncing: fetching " + uri); + + // remote request PropFindMethod query = new PropFindMethod(uri); getClient().executeMethod(query); MultiStatus resp = null; + resp = query.getResponseBodyAsMultiStatus(); - List paths = new ArrayList(); - List fileIds = new ArrayList(); + + // insertion of updated files for (int i = 1; i < resp.getResponses().length; ++i) { WebdavEntry we = new WebdavEntry(resp.getResponses()[i], getUri().getPath()); OCFile file = fillOCFile(we); @@ -117,28 +121,30 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { getStorageManager().saveFile(file); if (parentId == 0) parentId = file.getFileId(); - if (we.contentType().equals("DIR")) { - // for recursive fetch later - paths.add(we.path()); - fileIds.add(file.getFileId()); - } } + // removal of old files Vector files = getStorageManager().getDirectoryContent( getStorageManager().getFileById(parentId)); - for (OCFile file : files) { - if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0) + OCFile file; + for (int i=0; i < files.size(); ) { + file = files.get(i); + if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0) { getStorageManager().removeFile(file); + files.remove(i); + } else { + i++; + } } - // synched folder -> notice to IU - sendStickyBroadcast(true, parentId); + // synchronized folder -> notice to UI + sendStickyBroadcast(true, getStorageManager().getFileById(parentId).getRemotePath()); // recursive fetch - Iterator pathsIt = paths.iterator(); - Iterator fileIdsIt = fileIds.iterator(); - while (pathsIt.hasNext()) { - fetchData(getUri().toString() + pathsIt.next(), syncResult, fileIdsIt.next()); + for (OCFile newFile : files) { + if (newFile.getMimetype().equals("DIR")) { + fetchData(getUri().toString() + newFile.getRemotePath(), syncResult, newFile.getFileId(), account); + } } @@ -153,6 +159,10 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { } catch (DavException e) { syncResult.stats.numIoExceptions++; e.printStackTrace(); + } catch (Throwable t) { + // TODO update syncResult + Log.e(TAG, "problem while synchronizing owncloud account " + account.name, t); + t.printStackTrace(); } } @@ -167,12 +177,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { } - private void sendStickyBroadcast(boolean inProgress, long OCDirId) { + private void sendStickyBroadcast(boolean inProgress, String dirRemotePath) { Intent i = new Intent(FileSyncService.SYNC_MESSAGE); i.putExtra(FileSyncService.IN_PROGRESS, inProgress); i.putExtra(FileSyncService.ACCOUNT_NAME, getAccount().name); - if (OCDirId > 0) { - i.putExtra(FileSyncService.SYNC_FOLDER, OCDirId); + if (dirRemotePath != null) { + i.putExtra(FileSyncService.SYNC_FOLDER_REMOTE_PATH, dirRemotePath); } getContext().sendStickyBroadcast(i); }