Merge branch 'master' of gitorious.org:owncloud/android-devel
authorBartek Przybylski <bart.p.pl@gmail.com>
Sat, 19 May 2012 17:08:39 +0000 (19:08 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Sat, 19 May 2012 17:08:39 +0000 (19:08 +0200)
src/eu/alefzero/owncloud/datamodel/DataStorageManager.java
src/eu/alefzero/owncloud/datamodel/FileDataStorageManager.java
src/eu/alefzero/owncloud/datamodel/OCFile.java
src/eu/alefzero/owncloud/db/ProviderMeta.java
src/eu/alefzero/owncloud/providers/FileContentProvider.java
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java

index 8d7d2ee..e4c385f 100644 (file)
@@ -33,4 +33,6 @@ public interface DataStorageManager {
     public boolean saveFile(OCFile file);
 
     public Vector<OCFile> getDirectoryContent(OCFile f);
+    
+    public void removeFile(OCFile file);
 }
index 80072bb..a766957 100644 (file)
@@ -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,8 +284,27 @@ 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, ""+file.getFileId());
+        if (getContentProvider() != null) {
+            try {
+                getContentProvider().delete(file_uri,
+                                            ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                                            new String[]{mAccount.name});
+            } catch (RemoteException e) {
+                e.printStackTrace();
+            }
+        } else {
+            getContentResolver().delete(file_uri,
+                                        ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                                        new String[]{mAccount.name});
+        }
+    }
 
 }
index e2cebcf..7e8f428 100644 (file)
@@ -46,6 +46,7 @@ public class OCFile implements Parcelable {
     private String mLocalPath;
     private String mMimeType;
     private boolean mNeedsUpdating;
+    private long mLastSyncDate;
 
     /**
      * Create new {@link OCFile} with given path
@@ -227,6 +228,7 @@ public class OCFile implements Parcelable {
         mLength = 0;
         mCreationTimestamp = 0;
         mModifiedTimestamp = 0;
+        mLastSyncDate = 0;
     }
 
     /**
@@ -291,6 +293,14 @@ public class OCFile implements Parcelable {
     public boolean needsUpdatingWhileSaving() {
         return mNeedsUpdating;
     }
+    
+    public long getLastSyncDate() {
+        return mLastSyncDate;
+    }
+    
+    public void setLastSyncDate(long lastSyncDate) {
+        mLastSyncDate = lastSyncDate;
+    }
 
     @Override
     public int describeContents() {
@@ -307,8 +317,8 @@ public class OCFile implements Parcelable {
         dest.writeString(mRemotePath);
         dest.writeString(mLocalPath);
         dest.writeString(mMimeType);
-        dest.writeInt(mNeedsUpdating ? 0 : 1); // No writeBoolean method exists
-                                               // - yay :D
+        dest.writeInt(mNeedsUpdating ? 1 : 0);
+        dest.writeLong(mLastSyncDate);
     }
 
 }
index aa67109..79f285a 100644 (file)
@@ -57,6 +57,7 @@ public class ProviderMeta {
         public static final String FILE_STORAGE_PATH = "media_path";\r
         public static final String FILE_PATH = "path";\r
         public static final String FILE_ACCOUNT_OWNER = "file_owner";\r
+        public static final String FILE_LAST_SYNC_DATE = "last_sync_date";\r
 \r
         public static final String DEFAULT_SORT_ORDER = FILE_NAME\r
                 + " collate nocase asc";\r
index c1ecef3..06338df 100644 (file)
@@ -66,6 +66,8 @@ public class FileContentProvider extends ContentProvider {
                 ProviderTableMeta.FILE_CONTENT_TYPE);\r
         mProjectionMap.put(ProviderTableMeta.FILE_STORAGE_PATH,\r
                 ProviderTableMeta.FILE_STORAGE_PATH);\r
+        mProjectionMap.put(ProviderTableMeta.FILE_LAST_SYNC_DATE,\r
+                ProviderTableMeta.FILE_LAST_SYNC_DATE);\r
     }\r
 \r
     private static final int SINGLE_FILE = 1;\r
@@ -207,7 +209,8 @@ public class FileContentProvider extends ContentProvider {
                     + ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, "\r
                     + ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, "\r
                     + ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, "\r
-                    + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT);");\r
+                    + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT, "\r
+                    + ProviderTableMeta.FILE_LAST_SYNC_DATE + " INTEGER );");\r
         }\r
 \r
         @Override\r
index 9350d82..1e1a5e3 100644 (file)
@@ -19,6 +19,8 @@
 package eu.alefzero.owncloud.syncadapter;\r
 \r
 import java.io.IOException;\r
+import java.net.URLDecoder;\r
+import java.util.Vector;\r
 \r
 import org.apache.jackrabbit.webdav.DavException;\r
 import org.apache.jackrabbit.webdav.MultiStatus;\r
@@ -45,6 +47,8 @@ import eu.alefzero.webdav.WebdavEntry;
  */\r
 public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {\r
 \r
+    private long mCurrentSyncTime;\r
+    \r
     public FileSyncAdapter(Context context, boolean autoInitialize) {\r
         super(context, autoInitialize);\r
     }\r
@@ -68,7 +72,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 \r
         PropFindMethod query;\r
         try {\r
-            Log.e("ASD", getUri().toString());\r
+            mCurrentSyncTime = System.currentTimeMillis();\r
             query = new PropFindMethod(getUri().toString() + "/");\r
             getClient().executeMethod(query);\r
             MultiStatus resp = null;\r
@@ -111,8 +115,13 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 if (parentId == 0)\r
                     parentId = file.getFileId();\r
                 if (we.contentType().equals("DIR"))\r
-                    fetchData(getUri().toString() + we.path(), syncResult,\r
-                            file.getFileId());\r
+                    fetchData(getUri().toString() + we.path(), syncResult, file.getFileId());\r
+            }\r
+            Vector<OCFile> files = getStorageManager().getDirectoryContent(\r
+                    getStorageManager().getFileById(parentId));\r
+            for (OCFile file : files) {\r
+                if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0)\r
+                    getStorageManager().removeFile(file);\r
             }\r
         } catch (OperationCanceledException e) {\r
             e.printStackTrace();\r
@@ -129,11 +138,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
     }\r
 \r
     private OCFile fillOCFile(WebdavEntry we) {\r
-        OCFile file = new OCFile(we.path());\r
+        OCFile file = new OCFile(URLDecoder.decode(we.path()));\r
         file.setCreationTimestamp(we.createTimestamp());\r
         file.setFileLength(we.contentLength());\r
         file.setMimetype(we.contentType());\r
         file.setModificationTimestamp(we.modifiedTimesamp());\r
+        file.setLastSyncDate(mCurrentSyncTime);\r
         return file;\r
     }\r
 \r