Merge remote-tracking branch 'origin/oauth_login' into oauth_login
[pub/Android/ownCloud.git] / src / com / owncloud / android / datamodel / FileDataStorageManager.java
index 2640404..987e291 100644 (file)
@@ -46,9 +46,9 @@ public class FileDataStorageManager implements DataStorageManager {
     private ContentResolver mContentResolver;
     private ContentProviderClient mContentProvider;
     private Account mAccount;
-
+    
     private static String TAG = "FileDataStorageManager";
-
+    
     public FileDataStorageManager(Account account, ContentResolver cr) {
         mContentProvider = null;
         mContentResolver = cr;
@@ -69,9 +69,21 @@ public class FileDataStorageManager implements DataStorageManager {
             file = createFileInstance(c);
         }
         c.close();
+        if (file == null && OCFile.PATH_SEPARATOR.equals(path)) {
+            return createRootDir(); // root should always exist
+        }
         return file;
     }
+
     
+    private OCFile createRootDir() {
+        OCFile file = new OCFile(OCFile.PATH_SEPARATOR);
+        file.setMimetype("DIR");
+        file.setParentId(DataStorageManager.ROOT_PARENT_ID);
+        saveFile(file);
+        return file;
+    }
+
     @Override
     public OCFile getFileById(long id) {
         Cursor c = getCursorForValue(ProviderTableMeta._ID, String.valueOf(id));
@@ -108,6 +120,7 @@ public class FileDataStorageManager implements DataStorageManager {
         boolean overriden = false;
         ContentValues cv = new ContentValues();
         cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
+        cv.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA, file.getModificationTimestampAtLastSyncForData());
         cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
         cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
         cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype());
@@ -189,6 +202,7 @@ public class FileDataStorageManager implements DataStorageManager {
             file = filesIt.next();
             ContentValues cv = new ContentValues();
             cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
+            cv.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA, file.getModificationTimestampAtLastSyncForData());
             cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
             cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
             cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype());
@@ -292,8 +306,8 @@ public class FileDataStorageManager implements DataStorageManager {
 
     @Override
     public Vector<OCFile> getDirectoryContent(OCFile f) {
+        Vector<OCFile> ret = new Vector<OCFile>();
         if (f != null && f.isDirectory() && f.getFileId() != -1) {
-            Vector<OCFile> ret = new Vector<OCFile>();
 
             Uri req_uri = Uri.withAppendedPath(
                     ProviderTableMeta.CONTENT_URI_DIR,
@@ -326,9 +340,8 @@ public class FileDataStorageManager implements DataStorageManager {
             
             Collections.sort(ret);
             
-            return ret;
         }
-        return null;
+        return ret;
     }
 
     private boolean fileExists(String cmp_key, String value) {
@@ -415,6 +428,8 @@ public class FileDataStorageManager implements DataStorageManager {
                     .getColumnIndex(ProviderTableMeta.FILE_CREATION)));
             file.setModificationTimestamp(c.getLong(c
                     .getColumnIndex(ProviderTableMeta.FILE_MODIFIED)));
+            file.setModificationTimestampAtLastSyncForData(c.getLong(c
+                    .getColumnIndex(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA)));
             file.setLastSyncDateForProperties(c.getLong(c
                     .getColumnIndex(ProviderTableMeta.FILE_LAST_SYNC_DATE)));
             file.setLastSyncDateForData(c.getLong(c.
@@ -457,7 +472,7 @@ public class FileDataStorageManager implements DataStorageManager {
         // TODO consider possible failures
         if (dir != null && dir.isDirectory() && dir.getFileId() != -1) {
             Vector<OCFile> children = getDirectoryContent(dir);
-            if (children != null) {
+            if (children.size() > 0) {
                 OCFile child = null;
                 for (int i=0; i<children.size(); i++) {
                     child = children.get(i);
@@ -473,9 +488,9 @@ public class FileDataStorageManager implements DataStorageManager {
                         }
                     }
                 }
-                if (removeDBData) {
-                    removeFile(dir, true);
-                }
+            }
+            if (removeDBData) {
+                removeFile(dir, true);
             }
         }
     }