/** If database exists, no tasks but metadata, and a backup file exists, restore it */ private void databaseRestoreIfEmpty(Context context) { try { if (AstridPreferences.getCurrentVersion() >= UpgradeService.V3_0_0 && !context.getDatabasePath(database.getName()).exists()) { // we didn't have a database! restore latest file File directory = BackupConstants.defaultExportDirectory(); if (!directory.exists()) { return; } File[] children = directory.listFiles(); AndroidUtilities.sortFilesByDateDesc(children); if (children.length > 0) { TasksXmlImporter.importTasks(context, children[0].getAbsolutePath(), null); } } } catch (Exception e) { Log.w("astrid-database-restore", e); // $NON-NLS-1$ } }
/** * Perform the upgrade from Astrid 2 to Astrid 3 * * @param context2 */ @SuppressWarnings("deprecation") public void upgrade2To3(final Context context, final int from) { // if from < 1 (we don't know what version, and database exists, leave it alone) if (from < 1 && checkIfDatabaseExists(context, database.getName())) return; // if you don't have a legacy task table, skip this step if (!checkIfDatabaseExists(context, tasksTable)) return; // else, if there's already a database table, clear it out (!!!) if (checkIfDatabaseExists(context, database.getName())) context.deleteDatabase(database.getName()); database.openForWriting(); // initiate a backup String backupFile = legacyBackup(); try { // --- upgrade tasks table HashMap<String, Property<?>> propertyMap = new HashMap<String, Property<?>>(); propertyMap.put("_id", Task.ID); // $NON-NLS-1$ propertyMap.put(LegacyTaskModel.NAME, Task.TITLE); propertyMap.put(LegacyTaskModel.NOTES, Task.NOTES); // (don't update progress percentage, we don't use this anymore) propertyMap.put(LegacyTaskModel.IMPORTANCE, Task.IMPORTANCE); propertyMap.put(LegacyTaskModel.ESTIMATED_SECONDS, Task.ESTIMATED_SECONDS); propertyMap.put(LegacyTaskModel.ELAPSED_SECONDS, Task.ELAPSED_SECONDS); propertyMap.put(LegacyTaskModel.TIMER_START, Task.TIMER_START); propertyMap.put(LegacyTaskModel.DEFINITE_DUE_DATE, Task.DUE_DATE); propertyMap.put(LegacyTaskModel.HIDDEN_UNTIL, Task.HIDE_UNTIL); propertyMap.put(LegacyTaskModel.POSTPONE_COUNT, Task.POSTPONE_COUNT); propertyMap.put(LegacyTaskModel.NOTIFICATIONS, Task.REMINDER_PERIOD); propertyMap.put(LegacyTaskModel.NOTIFICATION_FLAGS, Task.REMINDER_FLAGS); propertyMap.put(LegacyTaskModel.LAST_NOTIFIED, Task.REMINDER_LAST); propertyMap.put(LegacyTaskModel.REPEAT, Task.RECURRENCE); propertyMap.put(LegacyTaskModel.CREATION_DATE, Task.CREATION_DATE); propertyMap.put(LegacyTaskModel.COMPLETION_DATE, Task.COMPLETION_DATE); propertyMap.put(LegacyTaskModel.CALENDAR_URI, Task.CALENDAR_URI); propertyMap.put(LegacyTaskModel.FLAGS, Task.FLAGS); upgradeTable(context, tasksTable, propertyMap, new Task(), taskDao); // --- upgrade tags tables migrateTagsToMetadata(); // --- upgrade alerts AlarmDatabase alarmsDatabase = new AlarmDatabase(); alarmsDatabase.openForWriting(); propertyMap.clear(); propertyMap.put("_id", TransitionalAlarm.ID); // $NON-NLS-1$ propertyMap.put(LegacyAlertModel.TASK, TransitionalAlarm.TASK); propertyMap.put(LegacyAlertModel.DATE, TransitionalAlarm.TIME); upgradeTable( context, alertsTable, propertyMap, new TransitionalAlarm(), alarmsDatabase.getDao()); alarmsDatabase.close(); // --- upgrade RTM sync mappings migrateSyncMappingToMetadata(); // --- clean up database metadataService.cleanup(); // --- upgrade properties SharedPreferences prefs = Preferences.getPrefs(context); Editor editor = prefs.edit(); int random = Preferences.getIntegerFromString(R.string.p_rmd_default_random_hours, -1); if (random != -1) { // convert days => hours editor.putString( context.getString(R.string.p_rmd_default_random_hours), Integer.toString(random * 24)); } } catch (Exception e) { exceptionService.reportError("backup-error", e); // $NON-NLS-1$ if (backupFile != null) { // try to restore the latest XML TasksXmlImporter.importTasks(context, backupFile, null); } } }