fix setting fileid for existing file
authorBartek Przybylski <bart.p.pl@gmail.com>
Sun, 29 Apr 2012 09:07:04 +0000 (11:07 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Sun, 29 Apr 2012 09:07:04 +0000 (11:07 +0200)
src/eu/alefzero/owncloud/datamodel/FileDataStorageManager.java
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java

index e862a5a..e68c54b 100644 (file)
@@ -92,6 +92,7 @@ public class FileDataStorageManager implements DataStorageManager {
     cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
 
     if (fileExists(file.getPath())) {
+      file.setFileId(getFileByPath(file.getPath()).getFileId());
       overriden = true;
       if (getContentResolver() != null) {
         getContentResolver().update(ProviderTableMeta.CONTENT_URI,
index 35b08c5..95c142d 100644 (file)
@@ -20,33 +20,21 @@ package eu.alefzero.owncloud.syncadapter;
 \r
 import java.io.IOException;\r
 \r
-import org.apache.http.entity.StringEntity;\r
 import org.apache.jackrabbit.webdav.DavException;\r
 import org.apache.jackrabbit.webdav.MultiStatus;\r
 import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;\r
-import org.apache.jackrabbit.webdav.property.DavProperty;\r
-import org.apache.jackrabbit.webdav.property.DavPropertyName;\r
 \r
 import android.accounts.Account;\r
 import android.accounts.AuthenticatorException;\r
 import android.accounts.OperationCanceledException;\r
 import android.content.ContentProviderClient;\r
-import android.content.ContentValues;\r
 import android.content.Context;\r
 import android.content.SyncResult;\r
-import android.database.Cursor;\r
-import android.net.Uri;\r
 import android.os.Bundle;\r
-import android.os.RemoteException;\r
 import android.util.Log;\r
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
 import eu.alefzero.owncloud.datamodel.OCFile;\r
-import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
-import eu.alefzero.webdav.HttpPropFind;\r
-import eu.alefzero.webdav.TreeNode;\r
-import eu.alefzero.webdav.TreeNode.NodeProperty;\r
 import eu.alefzero.webdav.WebdavEntry;\r
-import eu.alefzero.webdav.WebdavUtils;\r
 \r
 /**\r
  * SyncAdapter implementation for syncing sample SyncAdapter contacts to the\r
@@ -73,7 +61,33 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                        this.setContentProvider(provider);\r
                        this.setStorageManager(new FileDataStorageManager(account, getContentProvider()));\r
 \r
-                       fetchData(getUri().toString(), syncResult, 0);\r
+                       PropFindMethod query;\r
+      try {\r
+        query = new PropFindMethod(getUri().toString());\r
+        getClient().executeMethod(query);\r
+        MultiStatus resp = null;\r
+        resp = query.getResponseBodyAsMultiStatus();\r
+        if (resp.getResponses().length > 0) {\r
+          WebdavEntry we = new WebdavEntry(resp.getResponses()[0]);\r
+          OCFile file = fillOCFile(we);\r
+          file.setParentId(0);\r
+          getStorageManager().saveFile(file);\r
+          Log.d(TAG, file.getPath() + " " + file.getFileId());\r
+          fetchData(getUri().toString(), syncResult, file.getFileId());\r
+        }\r
+      } catch (OperationCanceledException e) {\r
+        e.printStackTrace();\r
+      } catch (AuthenticatorException e) {\r
+        syncResult.stats.numAuthExceptions++;\r
+        e.printStackTrace();\r
+      } catch (IOException e) {\r
+        syncResult.stats.numIoExceptions++;\r
+        e.printStackTrace();\r
+      } catch (DavException e) {\r
+        syncResult.stats.numIoExceptions++;\r
+        e.printStackTrace();\r
+      }\r
+      \r
        }\r
 \r
   private void fetchData(String uri, SyncResult syncResult, long parentId) {\r
@@ -82,21 +96,15 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
       getClient().executeMethod(query);\r
       MultiStatus resp = null;\r
       resp = query.getResponseBodyAsMultiStatus();\r
-      for (int i = (parentId==0?0:1); i < resp.getResponses().length; ++i) {\r
+      for (int i = 1; i < resp.getResponses().length; ++i) {\r
         WebdavEntry we = new WebdavEntry(resp.getResponses()[i]);\r
-        OCFile file = new OCFile(we.path());\r
-        file.setCreationTimestamp(we.createTimestamp());\r
-        file.setFileLength(we.contentLength());\r
-        file.setMimetype(we.contentType());\r
-        file.setModificationTimestamp(we.modifiedTimesamp());\r
+        OCFile file = fillOCFile(we);\r
         file.setParentId(parentId);\r
         getStorageManager().saveFile(file);\r
         if (parentId == 0) parentId = file.getFileId();\r
-\r
         if (we.contentType().equals("DIR"))\r
           fetchData(getUri().toString() + we.path(), syncResult, file.getFileId());\r
       }\r
-\r
     } catch (OperationCanceledException e) {\r
       e.printStackTrace();\r
     } catch (AuthenticatorException e) {\r
@@ -110,5 +118,14 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
       e.printStackTrace();\r
     }\r
   }\r
+  \r
+  private OCFile fillOCFile(WebdavEntry we) {\r
+    OCFile file = new OCFile(we.path());\r
+    file.setCreationTimestamp(we.createTimestamp());\r
+    file.setFileLength(we.contentLength());\r
+    file.setMimetype(we.contentType());\r
+    file.setModificationTimestamp(we.modifiedTimesamp());\r
+    return file;\r
+  }\r
        \r
 }\r