private void moveAll(TaskResult result) { boolean useExternalStorageOld = MyStorage.isStorageExternal(); if (mUseExternalStorageNew && !MyStorage.isWritableExternalStorageAvailable(result.messageBuilder)) { mUseExternalStorageNew = false; } MyLog.d( this, "About to move data from " + useExternalStorageOld + " to " + mUseExternalStorageNew); if (mUseExternalStorageNew == useExternalStorageOld) { result.messageBuilder.append(" Nothing to do."); result.success = true; return; } try { result.success = moveDatabase( mUseExternalStorageNew, result.messageBuilder, DatabaseHolder.DATABASE_NAME); if (result.success) { result.moved = true; moveDatabase( mUseExternalStorageNew, result.messageBuilder, TimelineSearchSuggestionsProvider.DATABASE_NAME); moveDownloads(mUseExternalStorageNew, result.messageBuilder); } } finally { if (result.success) { saveNewSettings(mUseExternalStorageNew, result.messageBuilder); } } }
private void moveDownloads(boolean useExternalStorageNew, StringBuilder messageToAppend) { String method = "moveDownloads"; boolean succeeded = false; boolean done = false; boolean didWeCopyAnything = false; File dirOld = null; File dirNew = null; try { if (!done) { dirOld = MyStorage.getDataFilesDir(MyStorage.DIRECTORY_DOWNLOADS); dirNew = MyStorage.getDataFilesDir( MyStorage.DIRECTORY_DOWNLOADS, TriState.fromBoolean(useExternalStorageNew)); if (dirOld == null || !dirOld.exists()) { messageToAppend.append(" No old avatars. "); done = true; succeeded = true; } if (dirNew == null) { messageToAppend.append(" No directory for new avatars?! "); done = true; } } if (!done) { if (MyLog.isVerboseEnabled()) { MyLog.v(this, method + " from: " + dirOld.getPath()); MyLog.v(this, method + " to: " + dirNew.getPath()); } String filename = ""; try { for (File fileOld : dirOld.listFiles()) { if (fileOld.isFile()) { filename = fileOld.getName(); File fileNew = new File(dirNew, filename); if (copyFile(fileOld, fileNew)) { didWeCopyAnything = true; } } } succeeded = true; } catch (Exception e) { String logMsg = method + " couldn't copy'" + filename + "'"; MyLog.v(this, logMsg, e); messageToAppend.insert(0, " " + logMsg + ": " + e.getMessage()); } done = true; } } catch (Exception e) { MyLog.v(this, e); messageToAppend.append(method + " error: " + e.getMessage() + ". "); succeeded = false; } finally { // Delete unnecessary files try { if (succeeded) { if (didWeCopyAnything) { for (File fileOld : dirOld.listFiles()) { if (fileOld.isFile() && !fileOld.delete()) { messageToAppend.append(method + " couldn't delete old file " + fileOld.getName()); } } } } else { if (dirNew != null && dirNew.exists()) { for (File fileNew : dirNew.listFiles()) { if (fileNew.isFile() && !fileNew.delete()) { messageToAppend.append(method + " couldn't delete new file " + fileNew.getName()); } } } } } catch (Exception e) { String logMsg = method + " deleting unnecessary files"; MyLog.v(this, logMsg, e); messageToAppend.append(logMsg + ": " + e.getMessage()); } } MyLog.d(this, method + " " + (succeeded ? "succeeded" : "failed")); }
private boolean moveDatabase( boolean useExternalStorageNew, StringBuilder messageToAppend, String databaseName) { final String method = "moveDatabase"; boolean succeeded = false; boolean done = false; /** Did we actually copied database? */ boolean copied = false; File dbFileOld = null; File dbFileNew = null; try { dbFileOld = MyContextHolder.get().context().getDatabasePath(databaseName); dbFileNew = MyStorage.getDatabasePath(databaseName, TriState.fromBoolean(useExternalStorageNew)); if (dbFileOld == null) { messageToAppend.append(" No old database " + databaseName); done = true; } if (!done) { if (dbFileNew == null) { messageToAppend.append(" No new database " + databaseName); done = true; } else { if (!dbFileOld.exists()) { messageToAppend.append(" No old database " + databaseName); done = true; succeeded = true; } else if (dbFileNew.exists()) { messageToAppend.insert(0, " Database already exists " + databaseName); if (!dbFileNew.delete()) { messageToAppend.insert(0, " Couldn't delete already existed files. "); done = true; } } } } if (!done) { if (MyLog.isVerboseEnabled()) { MyLog.v(this, method + " from: " + dbFileOld.getPath()); MyLog.v(this, method + " to: " + dbFileNew.getPath()); } try { if (copyFile(dbFileOld, dbFileNew)) { copied = true; succeeded = true; } } catch (Exception e) { MyLog.v(this, "Copy database " + databaseName, e); messageToAppend.insert( 0, " Couldn't copy database " + databaseName + ": " + e.getMessage() + ". "); } } } catch (Exception e) { MyLog.v(this, e); messageToAppend.append(method + " error: " + e.getMessage() + ". "); succeeded = false; } finally { // Delete unnecessary files try { if (succeeded) { if (copied && dbFileOld != null && dbFileOld.exists() && !dbFileOld.delete()) { messageToAppend.append(method + " couldn't delete old files. "); } } else { if (dbFileNew != null && dbFileNew.exists() && !dbFileNew.delete()) { messageToAppend.append(method + " couldn't delete new files. "); } } } catch (Exception e) { MyLog.v(this, method + " Delete old file", e); messageToAppend.append(method + " couldn't delete old files. " + e.getMessage() + ". "); } } MyLog.d(this, method + "; " + databaseName + " " + (succeeded ? "succeeded" : "failed")); return succeeded; }