From: masensio Date: Wed, 15 Apr 2015 16:15:57 +0000 (+0200) Subject: Update downloaded files X-Git-Tag: test~30^2~11 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/123c7fc1cdf74c3f5183307a4dd8aaf9f61bc5fd Update downloaded files --- diff --git a/owncloud-android-library b/owncloud-android-library index ddb86488..8ca001af 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit ddb8648809b7e5c91ec6d081ccdb0597dbebd520 +Subproject commit 8ca001af3e69f3c0da17a23589e6d3ab2e29da6b diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index a197e080..62039ce1 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -168,6 +168,11 @@ public class FileDataStorageManager { return ret; } + public Vector getDownloadedFilesByAccount(String accountName) { + Vector ret = new Vector(); + + return ret; + } public boolean saveFile(OCFile file) { boolean overriden = false; diff --git a/src/com/owncloud/android/providers/FileContentProvider.java b/src/com/owncloud/android/providers/FileContentProvider.java index 8c24c03a..b3b53464 100644 --- a/src/com/owncloud/android/providers/FileContentProvider.java +++ b/src/com/owncloud/android/providers/FileContentProvider.java @@ -22,16 +22,19 @@ 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 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.utils.FileStorageUtils; 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 )"); + + // update path for downloaded files + upgraded = updateDownloadedFiles(db, account.name, oldAccountName); + } catch (SQLException e){ upgraded = false; } finally { @@ -876,4 +883,84 @@ public class FileContentProvider extends ContentProvider { 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); + } }