projects
/
pub
/
Android
/
ownCloud.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Some improvements in synchronization and refresh of directory list
[pub/Android/ownCloud.git]
/
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
0bd2ec2
..
d3b6fc2
100644
(file)
--- a/
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java
+++ b/
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java
@@
-19,11
+19,6
@@
package eu.alefzero.owncloud.syncadapter;
\r
\r
import java.io.IOException;
\r
package eu.alefzero.owncloud.syncadapter;
\r
\r
import java.io.IOException;
\r
-import java.util.ArrayList;
\r
-import java.util.Iterator;
\r
-import java.util.LinkedList;
\r
-import java.util.List;
\r
-import java.util.Queue;
\r
import java.util.Vector;
\r
\r
import org.apache.jackrabbit.webdav.DavException;
\r
import java.util.Vector;
\r
\r
import org.apache.jackrabbit.webdav.DavException;
\r
@@
-39,7
+34,6
@@
import android.content.Intent;
import android.content.SyncResult;
\r
import android.os.Bundle;
\r
import android.util.Log;
\r
import android.content.SyncResult;
\r
import android.os.Bundle;
\r
import android.util.Log;
\r
-import android.webkit.MimeTypeMap;
\r
import eu.alefzero.owncloud.datamodel.FileDataStorageManager;
\r
import eu.alefzero.owncloud.datamodel.OCFile;
\r
import eu.alefzero.webdav.WebdavEntry;
\r
import eu.alefzero.owncloud.datamodel.FileDataStorageManager;
\r
import eu.alefzero.owncloud.datamodel.OCFile;
\r
import eu.alefzero.webdav.WebdavEntry;
\r
@@
-72,7
+66,7
@@
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
\r
Log.d(TAG, "syncing owncloud account " + account.name);
\r
\r
\r
Log.d(TAG, "syncing owncloud account " + account.name);
\r
\r
- sendStickyBroadcast(true,
-1
); // message to signal the start to the UI
\r
+ sendStickyBroadcast(true,
null
); // message to signal the start to the UI
\r
\r
PropFindMethod query;
\r
try {
\r
\r
PropFindMethod query;
\r
try {
\r
@@
-87,7
+81,7
@@
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
OCFile file = fillOCFile(we);
\r
file.setParentId(0);
\r
getStorageManager().saveFile(file);
\r
OCFile file = fillOCFile(we);
\r
file.setParentId(0);
\r
getStorageManager().saveFile(file);
\r
- fetchData(getUri().toString(), syncResult, file.getFileId());
\r
+ fetchData(getUri().toString(), syncResult, file.getFileId()
, account
);
\r
}
\r
} catch (OperationCanceledException e) {
\r
e.printStackTrace();
\r
}
\r
} catch (OperationCanceledException e) {
\r
e.printStackTrace();
\r
@@
-100,18
+94,26
@@
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
} catch (DavException e) {
\r
syncResult.stats.numIoExceptions++;
\r
e.printStackTrace();
\r
} catch (DavException e) {
\r
syncResult.stats.numIoExceptions++;
\r
e.printStackTrace();
\r
+ } catch (Throwable t) {
\r
+ // TODO update syncResult
\r
+ Log.e(TAG, "problem while synchronizing owncloud account " + account.name, t);
\r
+ t.printStackTrace();
\r
}
\r
}
\r
- sendStickyBroadcast(false,
-1
);
\r
+ sendStickyBroadcast(false,
null
);
\r
}
\r
\r
}
\r
\r
- private void fetchData(String uri, SyncResult syncResult, long parentId) {
\r
+ private void fetchData(String uri, SyncResult syncResult, long parentId
, Account account
) {
\r
try {
\r
try {
\r
+ Log.v(TAG, "syncing: fetching " + uri);
\r
+
\r
+ // remote request
\r
PropFindMethod query = new PropFindMethod(uri);
\r
getClient().executeMethod(query);
\r
MultiStatus resp = null;
\r
PropFindMethod query = new PropFindMethod(uri);
\r
getClient().executeMethod(query);
\r
MultiStatus resp = null;
\r
+
\r
resp = query.getResponseBodyAsMultiStatus();
\r
resp = query.getResponseBodyAsMultiStatus();
\r
- Queue<String> paths = new LinkedList<String>();
\r
- Queue<Long> fileIds = new LinkedList<Long>();
\r
+
\r
+ // insertion of updated files
\r
for (int i = 1; i < resp.getResponses().length; ++i) {
\r
WebdavEntry we = new WebdavEntry(resp.getResponses()[i], getUri().getPath());
\r
OCFile file = fillOCFile(we);
\r
for (int i = 1; i < resp.getResponses().length; ++i) {
\r
WebdavEntry we = new WebdavEntry(resp.getResponses()[i], getUri().getPath());
\r
OCFile file = fillOCFile(we);
\r
@@
-119,29
+121,31
@@
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
getStorageManager().saveFile(file);
\r
if (parentId == 0)
\r
parentId = file.getFileId();
\r
getStorageManager().saveFile(file);
\r
if (parentId == 0)
\r
parentId = file.getFileId();
\r
- if (we.contentType().equals("DIR")) {
\r
- // for recursive fetch later
\r
- paths.add(we.path());
\r
- fileIds.add(file.getFileId());
\r
- }
\r
}
\r
\r
}
\r
\r
+ // removal of old files
\r
Vector<OCFile> files = getStorageManager().getDirectoryContent(
\r
getStorageManager().getFileById(parentId));
\r
Vector<OCFile> files = getStorageManager().getDirectoryContent(
\r
getStorageManager().getFileById(parentId));
\r
- for (OCFile file : files) {
\r
- if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0)
\r
+ OCFile file;
\r
+ for (int i=0; i < files.size(); ) {
\r
+ file = files.get(i);
\r
+ if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0) {
\r
getStorageManager().removeFile(file);
\r
getStorageManager().removeFile(file);
\r
+ files.remove(i);
\r
+ } else {
\r
+ i++;
\r
+ }
\r
}
\r
\r
}
\r
\r
- // synch
ed folder -> notice to IU
\r
- sendStickyBroadcast(true,
parentId
);
\r
+ // synch
ronized folder -> notice to UI
\r
+ sendStickyBroadcast(true,
getStorageManager().getFileById(parentId).getRemotePath()
);
\r
\r
// recursive fetch
\r
\r
// recursive fetch
\r
- while(!paths.isEmpty()) {
\r
- fetchData(getUri().toString() + paths.remove(), syncResult, fileIds.remove());
\r
+ for (OCFile newFile : files) {
\r
+ if (newFile.getMimetype().equals("DIR")) {
\r
+ fetchData(getUri().toString() + newFile.getRemotePath(), syncResult, newFile.getFileId(), account);
\r
+ }
\r
}
\r
}
\r
- paths = null;
\r
- fileIds = null;
\r
\r
\r
} catch (OperationCanceledException e) {
\r
\r
\r
} catch (OperationCanceledException e) {
\r
@@
-155,6
+159,10
@@
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
} catch (DavException e) {
\r
syncResult.stats.numIoExceptions++;
\r
e.printStackTrace();
\r
} catch (DavException e) {
\r
syncResult.stats.numIoExceptions++;
\r
e.printStackTrace();
\r
+ } catch (Throwable t) {
\r
+ // TODO update syncResult
\r
+ Log.e(TAG, "problem while synchronizing owncloud account " + account.name, t);
\r
+ t.printStackTrace();
\r
}
\r
}
\r
\r
}
\r
}
\r
\r
@@
-169,12
+177,12
@@
public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
}
\r
\r
\r
}
\r
\r
\r
- private void sendStickyBroadcast(boolean inProgress,
long OCDirId
) {
\r
+ private void sendStickyBroadcast(boolean inProgress,
String dirRemotePath
) {
\r
Intent i = new Intent(FileSyncService.SYNC_MESSAGE);
\r
i.putExtra(FileSyncService.IN_PROGRESS, inProgress);
\r
i.putExtra(FileSyncService.ACCOUNT_NAME, getAccount().name);
\r
Intent i = new Intent(FileSyncService.SYNC_MESSAGE);
\r
i.putExtra(FileSyncService.IN_PROGRESS, inProgress);
\r
i.putExtra(FileSyncService.ACCOUNT_NAME, getAccount().name);
\r
- if (
OCDirId > 0
) {
\r
- i.putExtra(FileSyncService.SYNC_FOLDER
, OCDirId
);
\r
+ if (
dirRemotePath != null
) {
\r
+ i.putExtra(FileSyncService.SYNC_FOLDER
_REMOTE_PATH, dirRemotePath
);
\r
}
\r
getContext().sendStickyBroadcast(i);
\r
}
\r
}
\r
getContext().sendStickyBroadcast(i);
\r
}
\r