saving dates and checking modification date do speedup syncing
authorBartek Przybylski <bart.p.pl@gmail.com>
Fri, 13 Apr 2012 18:02:32 +0000 (20:02 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Fri, 13 Apr 2012 18:02:32 +0000 (20:02 +0200)
src/eu/alefzero/owncloud/datamodel/OCFile.java
src/eu/alefzero/owncloud/syncadapter/AbstractOwnCloudSyncAdapter.java
src/eu/alefzero/webdav/TreeNode.java
src/eu/alefzero/webdav/WebdavUtils.java

index 045e9fa..2553238 100644 (file)
@@ -23,6 +23,7 @@ import java.util.Vector;
 
 import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;
 import android.accounts.Account;
 
 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;
 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_;
   }
   public long getFileId() {
     return id_;
   }
index 73e41d2..60520ed 100644 (file)
@@ -42,6 +42,7 @@ import android.content.ContentProviderClient;
 import android.content.Context;\r
 import android.net.Uri;\r
 import android.text.TextUtils;\r
 import android.content.Context;\r
 import android.net.Uri;\r
 import android.text.TextUtils;\r
+import android.util.Log;\r
 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
 import eu.alefzero.owncloud.datamodel.OCFile;\r
 import eu.alefzero.webdav.HttpPropFind;\r
 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
 import eu.alefzero.owncloud.datamodel.OCFile;\r
 import eu.alefzero.webdav.HttpPropFind;\r
@@ -66,7 +67,8 @@ public abstract class AbstractOwnCloudSyncAdapter extends AbstractThreadedSyncAd
        
        private HttpHost mHost;
        private WebdavClient mClient = null;
        
        private HttpHost mHost;
        private WebdavClient mClient = null;
-
+       private static String TAG = "AbstractOwnCloudSyncAdapter";\r
+       
        public AbstractOwnCloudSyncAdapter(Context context, boolean autoInitialize) {
                super(context, autoInitialize);
                this.setAccountManager(AccountManager.get(context));
        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;\r
       }
                        String path = n.stripPathFromFilename(uri.getPath());\r
         continue;\r
       }
                        String path = n.stripPathFromFilename(uri.getPath());\r
-                       OCFile new_file = OCFile.createNewFile(getContentProvider(),\r
-          getAccount(),\r
-          n.getProperty(NodeProperty.PATH),\r
-          0,//Long.parseLong(n.getProperty(NodeProperty.CONTENT_LENGTH)),\r
-          0,//Long.parseLong(n.getProperty(NodeProperty.CREATE_DATE)),\r
-          0,//Long.parseLong(n.getProperty(NodeProperty.LAST_MODIFIED_DATE)),\r
-          n.getProperty(NodeProperty.RESOURCE_TYPE),\r
-          parent_id);\r
-                       new_file.save();\r
-                       if (override_parent) {\r
-                         parent_id = new_file.getFileId();\r
-                         override_parent = false;\r
-                       }
+                       \r
+                       long mod = n.getProperty(NodeProperty.LAST_MODIFIED_DATE) == null ?\r
+                                  0 :\r
+                                  Long.parseLong(n.getProperty(NodeProperty.LAST_MODIFIED_DATE));\r
+           OCFile file = new OCFile(getContentProvider(), getAccount(), n.getProperty(NodeProperty.PATH));\r
+           if (file.fileExtist() && file.getModificationTimestamp() >= mod) {\r
+             Log.d(TAG, "No update for file/dir " + file.getFileName() + " is needed");\r
+           } else {\r
+             Log.d(TAG, "File " + n.getProperty(NodeProperty.PATH) + " will be " + (file.fileExtist() ? "updated" : "created"));\r
+           long len = n.getProperty(NodeProperty.CONTENT_LENGTH) == null ?\r
+                   0 :\r
+                   Long.parseLong(n.getProperty(NodeProperty.CONTENT_LENGTH));\r
+           long create = n.getProperty(NodeProperty.CREATE_DATE) == null ?\r
+                      0 :\r
+                      Long.parseLong(n.getProperty(NodeProperty.CREATE_DATE));\r
+                       file = OCFile.createNewFile(getContentProvider(),\r
+            getAccount(),\r
+            n.getProperty(NodeProperty.PATH),\r
+            len,\r
+            create,\r
+            mod,\r
+            n.getProperty(NodeProperty.RESOURCE_TYPE),\r
+            parent_id);\r
+                       file.save();\r
+                       if (override_parent) {\r
+                         parent_id = file.getFileId();\r
+                         override_parent = false;\r
+                       }\r
+           }
 
                        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);
 
                        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());
                        }
                }
        }
                        }
                }
        }
index 4a7ef99..9e5ed8d 100644 (file)
@@ -86,7 +86,6 @@ public class TreeNode {
       propertyMap_.put(NodeProperty.NAME, name);
       propertyMap_.remove(NodeProperty.PATH);
       propertyMap_.put(NodeProperty.PATH, name2);
       propertyMap_.put(NodeProperty.NAME, name);
       propertyMap_.remove(NodeProperty.PATH);
       propertyMap_.put(NodeProperty.PATH, name2);
-      Log.i("TreeNode", toString());
       return path;
     }
     return null;
       return path;
     }
     return null;
index 5cbfebe..5c75e66 100644 (file)
@@ -119,8 +119,6 @@ public class WebdavUtils {
         parseDisplayName(currentNode, resultNode, davPrefix);
         rList.add(resultNode);
       }
         parseDisplayName(currentNode, resultNode, davPrefix);
         rList.add(resultNode);
       }
-      
-      
     } catch (ParserConfigurationException e) {
       e.printStackTrace();
     } catch (SAXException e) {
     } 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());
     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()));
     }
   }
 
     }
   }