+
+ 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);
+ }