From: Bartek Przybylski Date: Fri, 13 Apr 2012 18:02:32 +0000 (+0200) Subject: saving dates and checking modification date do speedup syncing X-Git-Tag: oc-android-1.4.3~452^2~1 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/dc648f1ae9b636b6089906db88219924519f6dbf saving dates and checking modification date do speedup syncing --- diff --git a/src/eu/alefzero/owncloud/datamodel/OCFile.java b/src/eu/alefzero/owncloud/datamodel/OCFile.java index 045e9fa7..25532389 100644 --- a/src/eu/alefzero/owncloud/datamodel/OCFile.java +++ b/src/eu/alefzero/owncloud/datamodel/OCFile.java @@ -23,6 +23,7 @@ import java.util.Vector; import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta; import android.accounts.Account; +import android.content.ContentProvider; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.ContentValues; @@ -122,6 +123,25 @@ public class OCFile { } } + public OCFile(ContentProviderClient cp, Account account, String path) { + cp_ = cp; + account_ = account; + + try { + Cursor c = cp_.query(ProviderTableMeta.CONTENT_URI_FILE, null, + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + + ProviderTableMeta.FILE_PATH + "=?", new String[]{account_.name, + path}, null); + if (c.moveToFirst()) { + setFileData(c); + if (path_ != null) + path_ = path; + } + } catch (RemoteException e) { + Log.d(TAG , e.getMessage()); + } + } + public long getFileId() { return id_; } diff --git a/src/eu/alefzero/owncloud/syncadapter/AbstractOwnCloudSyncAdapter.java b/src/eu/alefzero/owncloud/syncadapter/AbstractOwnCloudSyncAdapter.java index 73e41d2e..60520ed4 100644 --- a/src/eu/alefzero/owncloud/syncadapter/AbstractOwnCloudSyncAdapter.java +++ b/src/eu/alefzero/owncloud/syncadapter/AbstractOwnCloudSyncAdapter.java @@ -42,6 +42,7 @@ import android.content.ContentProviderClient; import android.content.Context; import android.net.Uri; import android.text.TextUtils; +import android.util.Log; import eu.alefzero.owncloud.authenticator.AccountAuthenticator; import eu.alefzero.owncloud.datamodel.OCFile; import eu.alefzero.webdav.HttpPropFind; @@ -66,7 +67,8 @@ public abstract class AbstractOwnCloudSyncAdapter extends AbstractThreadedSyncAd private HttpHost mHost; private WebdavClient mClient = null; - + private static String TAG = "AbstractOwnCloudSyncAdapter"; + public AbstractOwnCloudSyncAdapter(Context context, boolean autoInitialize) { super(context, autoInitialize); this.setAccountManager(AccountManager.get(context)); @@ -180,26 +182,42 @@ public abstract class AbstractOwnCloudSyncAdapter extends AbstractThreadedSyncAd continue; } String path = n.stripPathFromFilename(uri.getPath()); - OCFile new_file = OCFile.createNewFile(getContentProvider(), - getAccount(), - n.getProperty(NodeProperty.PATH), - 0,//Long.parseLong(n.getProperty(NodeProperty.CONTENT_LENGTH)), - 0,//Long.parseLong(n.getProperty(NodeProperty.CREATE_DATE)), - 0,//Long.parseLong(n.getProperty(NodeProperty.LAST_MODIFIED_DATE)), - n.getProperty(NodeProperty.RESOURCE_TYPE), - parent_id); - new_file.save(); - if (override_parent) { - parent_id = new_file.getFileId(); - override_parent = false; - } + + long mod = n.getProperty(NodeProperty.LAST_MODIFIED_DATE) == null ? + 0 : + Long.parseLong(n.getProperty(NodeProperty.LAST_MODIFIED_DATE)); + OCFile file = new OCFile(getContentProvider(), getAccount(), n.getProperty(NodeProperty.PATH)); + if (file.fileExtist() && file.getModificationTimestamp() >= mod) { + Log.d(TAG, "No update for file/dir " + file.getFileName() + " is needed"); + } else { + Log.d(TAG, "File " + n.getProperty(NodeProperty.PATH) + " will be " + (file.fileExtist() ? "updated" : "created")); + long len = n.getProperty(NodeProperty.CONTENT_LENGTH) == null ? + 0 : + Long.parseLong(n.getProperty(NodeProperty.CONTENT_LENGTH)); + long create = n.getProperty(NodeProperty.CREATE_DATE) == null ? + 0 : + Long.parseLong(n.getProperty(NodeProperty.CREATE_DATE)); + file = OCFile.createNewFile(getContentProvider(), + getAccount(), + n.getProperty(NodeProperty.PATH), + len, + create, + mod, + n.getProperty(NodeProperty.RESOURCE_TYPE), + parent_id); + file.save(); + if (override_parent) { + parent_id = file.getFileId(); + override_parent = false; + } + } if (!TextUtils.isEmpty(n.getProperty(NodeProperty.NAME)) && n.getProperty(NodeProperty.RESOURCE_TYPE).equals("DIR")) { HttpPropFind method = new HttpPropFind(uri.getPath() + path + n.getProperty(NodeProperty.NAME).replace(" ", "%20") + "/"); HttpResponse response = fireRawRequest(method); - parseResponse(response, uri, client, targetHost, n.getChildList(), true, new_file.getFileId()); + parseResponse(response, uri, client, targetHost, n.getChildList(), true, file.getFileId()); } } } diff --git a/src/eu/alefzero/webdav/TreeNode.java b/src/eu/alefzero/webdav/TreeNode.java index 4a7ef99a..9e5ed8da 100644 --- a/src/eu/alefzero/webdav/TreeNode.java +++ b/src/eu/alefzero/webdav/TreeNode.java @@ -86,7 +86,6 @@ public class TreeNode { propertyMap_.put(NodeProperty.NAME, name); propertyMap_.remove(NodeProperty.PATH); propertyMap_.put(NodeProperty.PATH, name2); - Log.i("TreeNode", toString()); return path; } return null; diff --git a/src/eu/alefzero/webdav/WebdavUtils.java b/src/eu/alefzero/webdav/WebdavUtils.java index 5cbfebec..5c75e669 100644 --- a/src/eu/alefzero/webdav/WebdavUtils.java +++ b/src/eu/alefzero/webdav/WebdavUtils.java @@ -119,8 +119,6 @@ public class WebdavUtils { parseDisplayName(currentNode, resultNode, davPrefix); rList.add(resultNode); } - - } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { @@ -150,7 +148,7 @@ public class WebdavUtils { if (currentElement.getElementsByTagName(davPrefix + CREATE_DATE).getLength() != 0) { Date date = parseResponseDate( currentElement.getElementsByTagName(davPrefix + CREATE_DATE).item(0).getFirstChild().getNodeValue()); - resultNode.setProperty(NodeProperty.CREATE_DATE, String.valueOf(date)); + resultNode.setProperty(NodeProperty.CREATE_DATE, String.valueOf(date.getTime())); } }