Skip to content

Commit

Permalink
Added new gtasks sync metadata for saving last sync time
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim Su committed Nov 8, 2011
1 parent 7ac45fd commit 07669aa
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 4 deletions.
15 changes: 12 additions & 3 deletions api/src/com/todoroo/astrid/sync/SyncMetadataService.java
Expand Up @@ -97,13 +97,22 @@ public TodorooCursor<Task> getLocallyUpdated(Property<?>... properties) {
if(lastSyncDate == 0)
tasks = taskDao.query(Query.select(Task.ID).where(Criterion.none));
else
tasks = taskDao.query(Query.select(Task.ID).where(Criterion.and(
Task.MODIFICATION_DATE.gt(lastSyncDate),
Task.LAST_SYNC.lte(lastSyncDate))).orderBy(Order.asc(Task.ID)));
tasks = taskDao.query(Query.select(Task.ID).where(
Task.MODIFICATION_DATE.gt(lastSyncDate)).orderBy(Order.asc(Task.ID)));
tasks = filterLocallyUpdated(tasks, lastSyncDate);

return joinWithMetadata(tasks, true, properties);
}

/**
* @param tasks
* @param lastSyncDate
*/
protected TodorooCursor<Task> filterLocallyUpdated(TodorooCursor<Task> tasks, long lastSyncDate) {
// override hook
return tasks;
}

private TodorooCursor<Task> joinWithMetadata(TodorooCursor<Task> tasks,
boolean both, Property<?>... properties) {
try {
Expand Down
Expand Up @@ -4,6 +4,7 @@
package com.todoroo.astrid.gtasks;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
Expand Down Expand Up @@ -74,6 +75,22 @@ public Criterion getMetadataWithRemoteId() {
return GtasksMetadata.ID.neq(""); //$NON-NLS-1$
}

@Override
protected TodorooCursor<Task> filterLocallyUpdated(TodorooCursor<Task> tasks, long lastSyncDate) {
HashSet<Long> taskIds = new HashSet<Long>();
for(tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext())
taskIds.add(tasks.get(Task.ID));

TodorooCursor<Metadata> metadata = metadataDao.query(Query.select(Metadata.TASK).where(
Criterion.and(MetadataCriteria.withKey(GtasksSyncMetadata.METADATA_KEY),
GtasksSyncMetadata.LAST_SYNC.lt(lastSyncDate))));

This comment has been minimized.

Copy link
@sbosley

sbosley Nov 8, 2011

Member

Shouldn't this be GtasksSyncMetadata.LAST_SYNC.gt(lastSyncDate)? Filter out the ones that have been synced more recently than last sync?

This comment has been minimized.

Copy link
@timsu

timsu Nov 8, 2011

yeah :)

for(metadata.moveToFirst(); !metadata.isAfterLast(); metadata.moveToNext())
taskIds.remove(metadata.get(Metadata.TASK));

return taskDao.query(Query.select(Task.ID).where(
Task.ID.in(taskIds.toArray(new Long[taskIds.size()]))));
}

// --- list iterating helpers


Expand Down
@@ -0,0 +1,49 @@
package com.todoroo.astrid.gtasks;

import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.data.Metadata;

/**
* Metadata entries for synchronizing a GTasks Task
* @author Tim Su <tim@todoroo.com>
*
*/
public class GtasksSyncMetadata {

/** metadata key */
public static final String METADATA_KEY = "gtasks-sync"; //$NON-NLS-1$

/** last sync date*/
public static final LongProperty LAST_SYNC = new LongProperty(Metadata.TABLE,
Metadata.VALUE1.name);

/**
* Helper to set value
* @param metadataDao
* @param id
* @param property
* @param now
*/
public static <T> void set(MetadataDao metadataDao, long taskId,
Property<T> property, T value) {
TodorooCursor<Metadata> cursor = metadataDao.query(Query.select(Metadata.PROPERTIES).
where(MetadataCriteria.byTaskAndwithKey(taskId, METADATA_KEY)));
Metadata metadata = new Metadata();
if(cursor.getCount() == 0) {
metadata.setValue(Metadata.TASK, taskId);
metadata.setValue(Metadata.KEY, METADATA_KEY);
} else {
cursor.moveToFirst();
metadata.readFromCursor(cursor);
}

metadata.setValue(property, value);
metadataDao.persist(metadata);
}

}
Expand Up @@ -21,6 +21,7 @@
import com.todoroo.astrid.gtasks.GtasksMetadata;
import com.todoroo.astrid.gtasks.GtasksMetadataService;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.GtasksSyncMetadata;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdater;
import com.todoroo.astrid.gtasks.api.GtasksApiUtilities;
import com.todoroo.astrid.gtasks.api.GtasksService;
Expand Down Expand Up @@ -253,7 +254,7 @@ private void pushTaskOnSave(Task task, ContentValues values) throws IOException
}

task.setValue(Task.MODIFICATION_DATE, DateUtilities.now());
task.setValue(Task.LAST_SYNC, DateUtilities.now());
GtasksSyncMetadata.set(metadataDao, task.getId(), GtasksSyncMetadata.LAST_SYNC, DateUtilities.now());
Flags.set(Flags.GTASKS_SUPPRESS_SYNC);
taskDao.saveExisting(task);
}
Expand Down

2 comments on commit 07669aa

@timsu
Copy link

@timsu timsu commented on 07669aa Nov 8, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sam what do you think of this? unfortunately, it's late so i haven't tested it. i'll do it tomorrow.

@sbosley
Copy link
Member

@sbosley sbosley commented on 07669aa Nov 8, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like it, makes sense to me. I'll give it a try right now.

Please sign in to comment.