When logged in user id changes, do a db migration to update the user id properties and clear table pushed at values. Should fix issues when merging accounts

pull/14/head
Sam Bosley 12 years ago
parent f6f0e5b64f
commit fb8905f469

@ -19,6 +19,7 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.messages.ConvertSelfUserIdsToZero;
import com.todoroo.astrid.billing.BillingConstants;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.RemoteModelDao;
@ -121,8 +122,16 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
try {
JSONObject status = actFmSyncService.invoke("user_status"); //$NON-NLS-1$
if (status.has("id"))
Preferences.setLong(ActFmPreferenceService.PREF_USER_ID, status.optLong("id"));
long oldId = Preferences.getLong(ActFmPreferenceService.PREF_USER_ID, -1);
if (status.has("id")) {
long newId = status.optLong("id");
Preferences.setLong(ActFmPreferenceService.PREF_USER_ID, newId);
if (oldId > 0 && oldId != newId) {
// Migrate all db userIds that = newId to 0
new ConvertSelfUserIdsToZero().execute();
ActFmSyncThread.clearTablePushedAtValues();
}
}
if (status.has("name"))
Preferences.setString(ActFmPreferenceService.PREF_NAME, status.optString("name"));
if (status.has("first_name"))

@ -0,0 +1,61 @@
package com.todoroo.astrid.actfm.sync.messages;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.DatabaseDao;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.dao.HistoryDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.dao.WaitingOnMeDao;
import com.todoroo.astrid.data.History;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.data.WaitingOnMe;
public class ConvertSelfUserIdsToZero {
@Autowired
private TaskDao taskDao;
@Autowired
private TagDataDao tagDataDao;
@Autowired
private HistoryDao historyDao;
@Autowired
private UserActivityDao userActivityDao;
@Autowired
private WaitingOnMeDao waitingOnMeDao;
public ConvertSelfUserIdsToZero() {
DependencyInjectionService.getInstance().inject(this);
}
public synchronized void execute() {
String selfId = ActFmPreferenceService.userId();
if (RemoteModel.isValidUuid(selfId)) {
updateDatabase(taskDao, new Task(), Task.CREATOR_ID, selfId);
updateDatabase(taskDao, new Task(), Task.USER_ID, selfId);
updateDatabase(tagDataDao, new TagData(), TagData.USER_ID, selfId);
updateDatabase(historyDao, new History(), History.USER_UUID, selfId);
updateDatabase(userActivityDao, new UserActivity(), UserActivity.USER_UUID, selfId);
updateDatabase(waitingOnMeDao, new WaitingOnMe(), WaitingOnMe.WAITING_USER_ID, selfId);
}
}
private <T extends AbstractModel> void updateDatabase(DatabaseDao<T> dao, T instance, StringProperty property, String selfId) {
instance.setValue(property, Task.USER_ID_SELF);
instance.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
dao.update(property.eq(selfId), instance);
}
}

@ -26,6 +26,7 @@ import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.actfm.sync.AstridNewSyncMigrator;
import com.todoroo.astrid.actfm.sync.EmptyTitleOutstandingEntryMigration;
import com.todoroo.astrid.actfm.sync.messages.ConvertSelfUserIdsToZero;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.Eula;
@ -183,7 +184,7 @@ public final class UpgradeService {
Preferences.setInt(AstridPreferences.P_UPGRADE_FROM, from);
int maxWithUpgrade = V4_6_2; // The last version that required a migration
int maxWithUpgrade = V4_6_3; // The last version that required a migration
Preferences.setInt(AstridPreferences.P_UPGRADE_FROM, from);
@ -254,6 +255,10 @@ public final class UpgradeService {
new EmptyTitleOutstandingEntryMigration().performMigration();
}
if (from < V4_6_3) {
new ConvertSelfUserIdsToZero().execute();
}
} finally {
finished = true;
DialogUtilities.dismissDialog(UpgradeActivity.this, dialog);

Loading…
Cancel
Save