浏览代码

removing file on sync

Bartek Przybylski 13 年之前
父节点
当前提交
8d7a02918d

+ 10 - 3
src/eu/alefzero/owncloud/datamodel/FileDataStorageManager.java

@@ -96,6 +96,7 @@ public class FileDataStorageManager implements DataStorageManager {
         cv.put(ProviderTableMeta.FILE_PATH, file.getPath());
         cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
         cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
+        cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, file.getLastSyncDate());
 
         if (fileExists(file.getPath())) {
             OCFile tmpfile = getFileByPath(file.getPath());
@@ -283,20 +284,26 @@ public class FileDataStorageManager implements DataStorageManager {
                     .getColumnIndex(ProviderTableMeta.FILE_CREATION)));
             file.setModificationTimestamp(c.getLong(c
                     .getColumnIndex(ProviderTableMeta.FILE_MODIFIED)));
+            file.setLastSyncDate(c.getLong(c
+                    .getColumnIndex(ProviderTableMeta.FILE_LAST_SYNC_DATE)));
         }
         return file;
     }
     
     public void removeFile(OCFile file) {
-        Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI, ""+file.getFileId());
+        Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, ""+file.getFileId());
         if (getContentProvider() != null) {
             try {
-                getContentProvider().delete(file_uri, null, null);
+                getContentProvider().delete(file_uri,
+                                            ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                                            new String[]{mAccount.name});
             } catch (RemoteException e) {
                 e.printStackTrace();
             }
         } else {
-            getContentResolver().delete(file_uri, null, null);
+            getContentResolver().delete(file_uri,
+                                        ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                                        new String[]{mAccount.name});
         }
     }
 

+ 14 - 4
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java

@@ -19,6 +19,8 @@
 package eu.alefzero.owncloud.syncadapter;
 
 import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.Vector;
 
 import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.MultiStatus;
@@ -45,6 +47,8 @@ import eu.alefzero.webdav.WebdavEntry;
  */
 public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 
+    private long mCurrentSyncTime;
+    
     public FileSyncAdapter(Context context, boolean autoInitialize) {
         super(context, autoInitialize);
     }
@@ -68,7 +72,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 
         PropFindMethod query;
         try {
-            Log.e("ASD", getUri().toString());
+            mCurrentSyncTime = System.currentTimeMillis();
             query = new PropFindMethod(getUri().toString() + "/");
             getClient().executeMethod(query);
             MultiStatus resp = null;
@@ -111,8 +115,13 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 if (parentId == 0)
                     parentId = file.getFileId();
                 if (we.contentType().equals("DIR"))
-                    fetchData(getUri().toString() + we.path(), syncResult,
-                            file.getFileId());
+                    fetchData(getUri().toString() + we.path(), syncResult, file.getFileId());
+            }
+            Vector<OCFile> files = getStorageManager().getDirectoryContent(
+                    getStorageManager().getFileById(parentId));
+            for (OCFile file : files) {
+                if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0)
+                    getStorageManager().removeFile(file);
             }
         } catch (OperationCanceledException e) {
             e.printStackTrace();
@@ -129,11 +138,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
     }
 
     private OCFile fillOCFile(WebdavEntry we) {
-        OCFile file = new OCFile(we.path());
+        OCFile file = new OCFile(URLDecoder.decode(we.path()));
         file.setCreationTimestamp(we.createTimestamp());
         file.setFileLength(we.contentLength());
         file.setMimetype(we.contentType());
         file.setModificationTimestamp(we.modifiedTimesamp());
+        file.setLastSyncDate(mCurrentSyncTime);
         return file;
     }