Migrate filters

pull/645/head
Alex Baker 8 years ago
parent 669e87bc3a
commit 5360f55b48

@ -33,8 +33,8 @@ android {
defaultConfig { defaultConfig {
testApplicationId "org.tasks.test" testApplicationId "org.tasks.test"
applicationId "org.tasks" applicationId "org.tasks"
versionCode 490 versionCode 491
versionName "5.2.1" versionName "5.3.0"
targetSdkVersion 27 targetSdkVersion 27
minSdkVersion 15 minSdkVersion 15
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

@ -21,6 +21,8 @@ import org.tasks.LocalBroadcastManager;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking; import org.tasks.analytics.Tracking;
import org.tasks.data.Filter;
import org.tasks.data.FilterDao;
import org.tasks.data.Tag; import org.tasks.data.Tag;
import org.tasks.data.TagDao; import org.tasks.data.TagDao;
import org.tasks.data.TagData; import org.tasks.data.TagData;
@ -40,6 +42,7 @@ public class StartupService {
private static final int V4_8_0 = 380; private static final int V4_8_0 = 380;
private static final int V4_9_5 = 434; private static final int V4_9_5 = 434;
private static final int V5_3_0 = 491;
private final Database database; private final Database database;
private final Preferences preferences; private final Preferences preferences;
@ -49,12 +52,13 @@ public class StartupService {
private final LocalBroadcastManager localBroadcastManager; private final LocalBroadcastManager localBroadcastManager;
private final Context context; private final Context context;
private final TagDao tagDao; private final TagDao tagDao;
private final FilterDao filterDao;
@Inject @Inject
public StartupService(Database database, Preferences preferences, Tracker tracker, public StartupService(Database database, Preferences preferences, Tracker tracker,
TagDataDao tagDataDao, TagService tagService, TagDataDao tagDataDao, TagService tagService,
LocalBroadcastManager localBroadcastManager, LocalBroadcastManager localBroadcastManager,
@ForApplication Context context, TagDao tagDao) { @ForApplication Context context, TagDao tagDao, FilterDao filterDao) {
this.database = database; this.database = database;
this.preferences = preferences; this.preferences = preferences;
this.tracker = tracker; this.tracker = tracker;
@ -63,6 +67,7 @@ public class StartupService {
this.localBroadcastManager = localBroadcastManager; this.localBroadcastManager = localBroadcastManager;
this.context = context; this.context = context;
this.tagDao = tagDao; this.tagDao = tagDao;
this.filterDao = filterDao;
} }
/** Called when this application is started up */ /** Called when this application is started up */
@ -82,12 +87,7 @@ public class StartupService {
// invoke upgrade service // invoke upgrade service
if(lastVersion != currentVersion) { if(lastVersion != currentVersion) {
new Thread() {
@Override
public void run() {
upgrade(lastVersion, currentVersion); upgrade(lastVersion, currentVersion);
}
}.start();
preferences.setDefaults(); preferences.setDefaults();
} }
@ -103,6 +103,9 @@ public class StartupService {
if (from < V4_9_5) { if (from < V4_9_5) {
removeDuplicateTags(); removeDuplicateTags();
} }
if (from < V5_3_0) {
migrateFilters();
}
tracker.reportEvent(Tracking.Events.UPGRADE, Integer.toString(from)); tracker.reportEvent(Tracking.Events.UPGRADE, Integer.toString(from));
} }
preferences.setCurrentVersion(to); preferences.setCurrentVersion(to);
@ -138,6 +141,23 @@ public class StartupService {
localBroadcastManager.broadcastRefresh(); localBroadcastManager.broadcastRefresh();
} }
private void migrateFilters() {
for (Filter filter : filterDao.getFilters()) {
filter.setSql(migrate(filter.getSql()));
filter.setCriterion(migrate(filter.getCriterion()));
filterDao.update(filter);
}
}
private String migrate(String input) {
return input
.replaceAll("SELECT metadata\\.task AS task FROM metadata INNER JOIN tasks ON \\(\\(metadata\\.task=tasks\\._id\\)\\) WHERE \\(\\(\\(tasks\\.completed=0\\) AND \\(tasks\\.deleted=0\\) AND \\(tasks\\.hideUntil<\\(strftime\\(\\'%s\\',\\'now\\'\\)\\*1000\\)\\)\\) AND \\(metadata\\.key=\\'tags-tag\\'\\) AND \\(metadata\\.value",
"SELECT tags.task AS task FROM tags INNER JOIN tasks ON ((tags.task=tasks._id)) WHERE (((tasks.completed=0) AND (tasks.deleted=0) AND (tasks.hideUntil<(strftime('%s','now')*1000))) AND (tags.name")
.replaceAll("SELECT metadata\\.task AS task FROM metadata INNER JOIN tasks ON \\(\\(metadata\\.task=tasks\\._id\\)\\) WHERE \\(\\(\\(tasks\\.completed=0\\) AND \\(tasks\\.deleted=0\\) AND \\(tasks\\.hideUntil<\\(strftime\\(\\'%s\\',\\'now\\'\\)\\*1000\\)\\)\\) AND \\(metadata\\.key=\\'gtasks\\'\\) AND \\(metadata\\.value2",
"SELECT google_tasks.task AS task FROM google_tasks INNER JOIN tasks ON ((google_tasks.task=tasks._id)) WHERE (((tasks.completed=0) AND (tasks.deleted=0) AND (tasks.hideUntil<(strftime('%s','now')*1000))) AND (google_tasks.list_id")
.replaceAll("AND \\(metadata\\.deleted=0\\)", "");
}
private void removeDuplicateTagData(List<TagData> tagData) { private void removeDuplicateTagData(List<TagData> tagData) {
for (int i = 1 ; i < tagData.size() ; i++) { for (int i = 1 ; i < tagData.size() ; i++) {
tagDataDao.delete(tagData.get(i).getId()); tagDataDao.delete(tagData.get(i).getId());

Loading…
Cancel
Save