Add comments
[pub/Android/ownCloud.git] / src / com / owncloud / android / datamodel / FileDataStorageManager.java
index ec0a7ef..650acf7 100644 (file)
@@ -1,6 +1,6 @@
 /* ownCloud Android client application
  *   Copyright (C) 2012  Bartek Przybylski
- *   Copyright (C) 2012-2013 ownCloud Inc.
+ *   Copyright (C) 2012-2014 ownCloud Inc.
  *
  *   This program is free software: you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License version 2,
@@ -494,6 +494,7 @@ public class FileDataStorageManager {
         boolean success = true;
         File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder));
         if (localFolder.exists()) {
+            // stage 1: remove the local files already registered in the files database
             Vector<OCFile> files = getFolderContent(folder.getFileId());
             if (files != null) {
                 for (OCFile file : files) {
@@ -511,8 +512,27 @@ public class FileDataStorageManager {
                     }
                 }
             }
-            success &= localFolder.delete();
+
+            // stage 2: remove the folder itself and any local file inside out of sync; 
+            //          for instance, after clearing the app cache or reinstalling
+            success &= removeLocalFolder(localFolder);
+        }
+        return success;
+    }
+
+    private boolean removeLocalFolder(File localFolder) {
+        boolean success = true;
+        File[] localFiles = localFolder.listFiles();
+        if (localFiles != null) {
+            for (File localFile : localFiles) {
+                if (localFile.isDirectory()) {
+                    success &= removeLocalFolder(localFile);
+                } else {
+                    success &= localFile.delete();
+                }
+            }
         }
+        success &= localFolder.delete();
         return success;
     }
 
@@ -689,31 +709,6 @@ public class FileDataStorageManager {
         return c;
     }
     
-    private Cursor getShareCursorForValue(String key, String value) {
-        Cursor c = null;
-        if (getContentResolver() != null) {
-            c = getContentResolver()
-                    .query(ProviderTableMeta.CONTENT_URI_SHARE,
-                            null,
-                            key + "=? AND "
-                                    + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER
-                                    + "=?",
-                                    new String[] { value, mAccount.name }, null);
-        } else {
-            try {
-                c = getContentProviderClient().query(
-                        ProviderTableMeta.CONTENT_URI_SHARE,
-                        null,
-                        key + "=? AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER
-                        + "=?", new String[] { value, mAccount.name },
-                        null);
-            } catch (RemoteException e) {
-                Log_OC.e(TAG, "Could not get file details: " + e.getMessage());
-                c = null;
-            }
-        }
-        return c;
-    }
 
     private OCFile createFileInstance(Cursor c) {
         OCFile file = null;
@@ -853,25 +848,6 @@ public class FileDataStorageManager {
         return overriden;
     }
 
-//    private OCShare getShareById(long id) {
-//        Cursor c = getShareCursorForValue(ProviderTableMeta._ID, String.valueOf(id));
-//        OCShare share = null;
-//        if (c.moveToFirst()) {
-//            share = createShareInstance(c);
-//        }
-//        c.close();
-//        return share;
-//    }
-//
-//    private OCShare getShareByRemoteId(long remoteId) {
-//        Cursor c = getShareCursorForValue(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
-//        OCShare share = null;
-//        if (c.moveToFirst()) {
-//            share = createShareInstance(c);
-//        }
-//        c.close();
-//        return share;
-//    }
 
     public OCShare getFirstShareByPathAndType(String path, ShareType type) {
         Cursor c = null;