Update downloaded files
authormasensio <masensio@solidgear.es>
Wed, 15 Apr 2015 16:15:57 +0000 (18:15 +0200)
committermasensio <masensio@solidgear.es>
Wed, 15 Apr 2015 16:15:57 +0000 (18:15 +0200)
owncloud-android-library
src/com/owncloud/android/datamodel/FileDataStorageManager.java
src/com/owncloud/android/providers/FileContentProvider.java

index ddb8648..8ca001a 160000 (submodule)
@@ -1 +1 @@
-Subproject commit ddb8648809b7e5c91ec6d081ccdb0597dbebd520
+Subproject commit 8ca001af3e69f3c0da17a23589e6d3ab2e29da6b
index a197e08..62039ce 100644 (file)
@@ -168,6 +168,11 @@ public class FileDataStorageManager {
         return ret;
     }
 
         return ret;
     }
 
+    public Vector<OCFile> getDownloadedFilesByAccount(String accountName) {
+        Vector<OCFile> ret = new Vector<OCFile>();
+
+        return ret;
+    }
     
     public boolean saveFile(OCFile file) {
         boolean overriden = false;
     
     public boolean saveFile(OCFile file) {
         boolean overriden = false;
index 8c24c03..b3b5346 100644 (file)
 
 package com.owncloud.android.providers;
 
 
 package com.owncloud.android.providers;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import java.util.ArrayList;
 import java.util.HashMap;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
 import com.owncloud.android.lib.common.accounts.AccountUtils;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
 import com.owncloud.android.lib.common.accounts.AccountUtils;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.utils.FileStorageUtils;
 
 import android.accounts.Account;
 import android.accounts.AccountManager;
 
 import android.accounts.Account;
 import android.accounts.AccountManager;
@@ -863,6 +866,10 @@ public class FileContentProvider extends ContentProvider {
 
                      Log_OC.d("SQL", "Updated account in database: old name == " + oldAccountName +
                              ", new name == " + account.name + " (" + num + " rows updated )");
 
                      Log_OC.d("SQL", "Updated account in database: old name == " + oldAccountName +
                              ", new name == " + account.name + " (" + num + " rows updated )");
+
+                    // update path for downloaded files
+                    upgraded = updateDownloadedFiles(db, account.name, oldAccountName);
+
                 } catch (SQLException e){
                     upgraded = false;
                 } finally {
                 } catch (SQLException e){
                     upgraded = false;
                 } finally {
@@ -876,4 +883,84 @@ public class FileContentProvider extends ContentProvider {
 
         return upgradedResult;
     }
 
         return upgradedResult;
     }
+
+    private boolean updateDownloadedFiles(SQLiteDatabase db, String newAccountName,
+                                       String oldAccountName) {
+        boolean upgradedResult = true;
+        boolean upgraded = false;
+        boolean renamedResult = true;
+        boolean renamed = false;
+
+        String selectQuery = "SELECT " + ProviderTableMeta._ID + " FROM " +
+                ProviderTableMeta.FILE_TABLE_NAME +" WHERE " +
+                ProviderTableMeta.FILE_ACCOUNT_OWNER +"=? AND " +
+                ProviderTableMeta.FILE_STORAGE_PATH + " IS NOT NULL;";
+
+        Cursor c = db.rawQuery(selectQuery, new String[] { newAccountName });
+        if (c.moveToFirst()) {
+            // create storage path
+            String oldAccountPath = FileStorageUtils.getSavePath(oldAccountName);
+            String newAccountPath = FileStorageUtils.getSavePath(newAccountName);
+
+            if (oldAccountPath != newAccountPath) {
+                File newAccountFolder = new File(newAccountPath);
+                if (!newAccountFolder.exists()) {
+                    newAccountFolder.mkdirs();
+                }
+                // update  file and database
+                do {
+                    // Update database
+                    String oldPath = c.getString(
+                            c.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH));
+                    OCFile file = new OCFile(
+                            c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PATH)));
+                    String newPath = FileStorageUtils.getDefaultSavePathFor(newAccountName, file);
+
+                    db.beginTransaction();
+                    try {
+                        ContentValues cv = new ContentValues();
+                        cv.put(ProviderTableMeta.FILE_STORAGE_PATH, newPath);
+                        db.update(ProviderTableMeta.FILE_TABLE_NAME,
+                                cv,
+                                ProviderTableMeta.FILE_STORAGE_PATH + "=?",
+                                new String[]{oldPath});
+                        upgraded = true;
+                        db.setTransactionSuccessful();
+
+                        Log_OC.d("SQL", "Updated downloaded files: old file name == " + oldPath +
+                                ", new file name == " + newPath);
+                    } catch (SQLException e) {
+                        upgraded = false;
+                    } finally {
+                        db.endTransaction();
+                    }
+                    upgradedResult = upgraded && upgradedResult;
+
+                    // move file
+                    File oldFile = new File(oldPath);
+                    renamed = false;
+                    if (oldFile.exists()) {
+                        File newFile = new File(newPath);
+                        File newFolder = newFile.getParentFile();
+                        if (!newFolder.exists()) {
+                            newFolder.mkdirs();
+                        }
+                        renamed = newFile.renameTo(newFile);
+                    }
+                    renamedResult = renamed && renamedResult;
+                } while (c.moveToNext());
+
+                // remove old folder
+                if (renamed && upgradedResult) {
+                    File oldAccountFolder = new File(oldAccountPath);
+                    if (oldAccountFolder.exists()) {
+                        oldAccountFolder.delete();
+                    }
+                }
+            }
+        }
+        c.close();
+
+        return (renamed && upgradedResult);
+    }
 }
 }