saving dates and checking modification date do speedup syncing
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / datamodel / OCFile.java
index bfa9963..2553238 100644 (file)
@@ -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;
@@ -59,6 +60,7 @@ public class OCFile {
               path}, null);
       if (c.moveToFirst())
         new_file.setFileData(c);
+      c.close();
     } catch (RemoteException e) {
       Log.e(TAG, e.getMessage());
     }
@@ -69,11 +71,32 @@ public class OCFile {
     new_file.modified_timestamp_ = modified_timestamp;
     new_file.mimetype_ = mimetype;
     new_file.parent_id_ = parent_id;
-    Log.e(TAG, parent_id+"");
 
     return new_file;
   }
 
+  public static OCFile createNewFile(ContentResolver contentResolver, Account a,
+      String path, int length, int creation_timestamp, int modified_timestamp,
+      String mimetype, long parent_id) {
+    OCFile new_file = new OCFile(contentResolver, a);
+    Cursor c = new_file.cr_.query(ProviderTableMeta.CONTENT_URI_FILE, null,
+          ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND "
+              + ProviderTableMeta.FILE_PATH + "=?", new String[]{new_file.account_.name,
+              path}, null);
+      if (c.moveToFirst())
+        new_file.setFileData(c);
+      c.close();
+
+    new_file.path_ = path;
+    new_file.length_ = length;
+    new_file.creation_timestamp_ = creation_timestamp;
+    new_file.modified_timestamp_ = modified_timestamp;
+    new_file.mimetype_ = mimetype;
+    new_file.parent_id_ = parent_id;
+
+    return new_file;
+  }
+  
   public OCFile(ContentResolver cr, Account account, long id) {
     cr_ = cr;
     account_ = account;
@@ -100,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_;
   }
@@ -228,6 +270,7 @@ public class OCFile {
           ret.add(child);
         } while (c.moveToNext());
 
+      c.close();
       return ret;
     }
     return null;
@@ -243,7 +286,7 @@ public class OCFile {
     cp_ = cp;
     resetData();
   }
-
+  
   private OCFile(ContentResolver cr, Account account) {
     account_ = account;
     cr_ = cr;