Look at last sync date when deciding when to record task outstanding entries during migration

pull/14/head
Sam Bosley 13 years ago
parent 416d6076de
commit 7ff1890285

@ -128,7 +128,7 @@ public class AstridNewSyncMigrator {
Query tagsQuery = Query.select(TagData.ID, TagData.UUID).where(Criterion.or(TagData.UUID.eq(RemoteModel.NO_UUID), TagData.UUID.isNull())); Query tagsQuery = Query.select(TagData.ID, TagData.UUID).where(Criterion.or(TagData.UUID.eq(RemoteModel.NO_UUID), TagData.UUID.isNull()));
assertUUIDsExist(tagsQuery, new TagData(), tagDataDao, tagOutstandingDao, new TagOutstanding(), NameMaps.syncableProperties(NameMaps.TABLE_ID_TAGS), null); assertUUIDsExist(tagsQuery, new TagData(), tagDataDao, tagOutstandingDao, new TagOutstanding(), NameMaps.syncableProperties(NameMaps.TABLE_ID_TAGS), null);
Query tasksQuery = Query.select(Task.ID, Task.UUID, Task.RECURRENCE, Task.FLAGS).where(Criterion.all); Query tasksQuery = Query.select(Task.ID, Task.UUID, Task.RECURRENCE, Task.FLAGS, Task.MODIFICATION_DATE, Task.LAST_SYNC).where(Criterion.all);
assertUUIDsExist(tasksQuery, new Task(), taskDao, taskOutstandingDao, new TaskOutstanding(), NameMaps.syncableProperties(NameMaps.TABLE_ID_TASKS), new UUIDAssertionExtras<Task>() { assertUUIDsExist(tasksQuery, new Task(), taskDao, taskOutstandingDao, new TaskOutstanding(), NameMaps.syncableProperties(NameMaps.TABLE_ID_TASKS), new UUIDAssertionExtras<Task>() {
@Override @Override
public void beforeSave(Task instance) { public void beforeSave(Task instance) {
@ -153,6 +153,13 @@ public class AstridNewSyncMigrator {
instance.setValue(Task.RECURRENCE, recurrence); instance.setValue(Task.RECURRENCE, recurrence);
} }
} }
@Override
public boolean shouldCreateOutstandingEntries(Task instance) {
if (!instance.containsNonNullValue(Task.MODIFICATION_DATE))
return true;
return instance.getValue(Task.LAST_SYNC) < instance.getValue(Task.MODIFICATION_DATE);
}
}); });
} catch (Exception e) { } catch (Exception e) {
Log.e(LOG_TAG, "Error asserting UUIDs", e); Log.e(LOG_TAG, "Error asserting UUIDs", e);
@ -308,6 +315,7 @@ public class AstridNewSyncMigrator {
private interface UUIDAssertionExtras<TYPE extends RemoteModel> { private interface UUIDAssertionExtras<TYPE extends RemoteModel> {
void beforeSave(TYPE instance); void beforeSave(TYPE instance);
boolean shouldCreateOutstandingEntries(TYPE instance);
} }
private <TYPE extends RemoteModel, OE extends OutstandingEntry<TYPE>> void assertUUIDsExist(Query query, TYPE instance, DatabaseDao<TYPE> dao, OutstandingEntryDao<OE> oeDao, OE oe, Property<?>[] propertiesForOutstanding, UUIDAssertionExtras<TYPE> extras) { private <TYPE extends RemoteModel, OE extends OutstandingEntry<TYPE>> void assertUUIDsExist(Query query, TYPE instance, DatabaseDao<TYPE> dao, OutstandingEntryDao<OE> oeDao, OE oe, Property<?>[] propertiesForOutstanding, UUIDAssertionExtras<TYPE> extras) {
@ -326,7 +334,7 @@ public class AstridNewSyncMigrator {
instance.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); instance.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
dao.saveExisting(instance); dao.saveExisting(instance);
if (unsyncedModel && propertiesForOutstanding != null) { if (propertiesForOutstanding != null && (unsyncedModel || (extras != null && extras.shouldCreateOutstandingEntries(instance)))) {
createOutstandingEntries(instance.getId(), dao, oeDao, oe, propertiesForOutstanding); createOutstandingEntries(instance.getId(), dao, oeDao, oe, propertiesForOutstanding);
} }
} }

Loading…
Cancel
Save