|
|
@ -718,57 +718,6 @@ public final class ActFmSyncService {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public void fetchActiveTasks(final boolean manual, SyncExceptionHandler handler, Runnable done) {
|
|
|
|
public void fetchActiveTasks(final boolean manual, SyncExceptionHandler handler, Runnable done) {
|
|
|
|
invokeFetchList("task", manual, handler, new TaskListItemProcessor(manual), done, "active_tasks");
|
|
|
|
invokeFetchList("task", manual, handler, new TaskListItemProcessor(manual), done, "active_tasks");
|
|
|
|
// invokeFetchList("task", manual, handler, new ListItemProcessor<Task>() {
|
|
|
|
|
|
|
|
// @Override
|
|
|
|
|
|
|
|
// protected void mergeAndSave(JSONArray list, HashMap<Long,Long> locals) throws JSONException {
|
|
|
|
|
|
|
|
// Task remote = new Task();
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// ArrayList<Metadata> metadata = new ArrayList<Metadata>();
|
|
|
|
|
|
|
|
// HashSet<Long> ids = new HashSet<Long>(list.length());
|
|
|
|
|
|
|
|
// for(int i = 0; i < list.length(); i++) {
|
|
|
|
|
|
|
|
// JSONObject item = list.getJSONObject(i);
|
|
|
|
|
|
|
|
// readIds(locals, item, remote);
|
|
|
|
|
|
|
|
// JsonHelper.taskFromJson(item, remote, metadata);
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// if(remote.getValue(Task.USER_ID) == 0) {
|
|
|
|
|
|
|
|
// if(!remote.isSaved())
|
|
|
|
|
|
|
|
// StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_CREATED);
|
|
|
|
|
|
|
|
// else if(remote.isCompleted())
|
|
|
|
|
|
|
|
// StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_COMPLETED);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// if(!remote.isSaved() && remote.hasDueDate() &&
|
|
|
|
|
|
|
|
// remote.getValue(Task.DUE_DATE) < DateUtilities.now())
|
|
|
|
|
|
|
|
// remote.setFlag(Task.REMINDER_FLAGS, Task.NOTIFY_AFTER_DEADLINE, false);
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true);
|
|
|
|
|
|
|
|
// taskService.save(remote);
|
|
|
|
|
|
|
|
// ids.add(remote.getId());
|
|
|
|
|
|
|
|
// metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY));
|
|
|
|
|
|
|
|
// remote.clear();
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// if(manual) {
|
|
|
|
|
|
|
|
// Long[] localIds = ids.toArray(new Long[ids.size()]);
|
|
|
|
|
|
|
|
// taskService.deleteWhere(Criterion.and(TaskCriteria.activeAndVisible(),
|
|
|
|
|
|
|
|
// Task.REMOTE_ID.isNotNull(),
|
|
|
|
|
|
|
|
// Criterion.not(Task.ID.in(localIds))));
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// @Override
|
|
|
|
|
|
|
|
// protected HashMap<Long, Long> getLocalModels() {
|
|
|
|
|
|
|
|
// TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID,
|
|
|
|
|
|
|
|
// Task.REMOTE_ID).where(Task.REMOTE_ID.in(remoteIds)).orderBy(
|
|
|
|
|
|
|
|
// Order.asc(Task.REMOTE_ID)));
|
|
|
|
|
|
|
|
// return cursorToMap(cursor, taskDao, Task.REMOTE_ID, Task.ID);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// @Override
|
|
|
|
|
|
|
|
// protected Class<Task> typeClass() {
|
|
|
|
|
|
|
|
// return Task.class;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }, done, "active_tasks");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -778,55 +727,15 @@ public final class ActFmSyncService {
|
|
|
|
* @param done
|
|
|
|
* @param done
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public void fetchTasksForTag(final TagData tagData, final boolean manual, Runnable done) {
|
|
|
|
public void fetchTasksForTag(final TagData tagData, final boolean manual, Runnable done) {
|
|
|
|
invokeFetchList("task", manual, null, new ListItemProcessor<Task>() {
|
|
|
|
invokeFetchList("task", manual, null, new TaskListItemProcessor(manual) {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected void mergeAndSave(JSONArray list, HashMap<Long,Long> locals) throws JSONException {
|
|
|
|
protected void deleteExtras(Long[] localIds) {
|
|
|
|
Task remote = new Task();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ArrayList<Metadata> metadata = new ArrayList<Metadata>();
|
|
|
|
|
|
|
|
HashSet<Long> ids = new HashSet<Long>(list.length());
|
|
|
|
|
|
|
|
for(int i = 0; i < list.length(); i++) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
JSONObject item = list.getJSONObject(i);
|
|
|
|
|
|
|
|
readIds(locals, item, remote);
|
|
|
|
|
|
|
|
JsonHelper.taskFromJson(item, remote, metadata);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(remote.getValue(Task.USER_ID) == 0) {
|
|
|
|
|
|
|
|
if(!remote.isSaved())
|
|
|
|
|
|
|
|
StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_CREATED);
|
|
|
|
|
|
|
|
else if(remote.isCompleted())
|
|
|
|
|
|
|
|
StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_COMPLETED);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true);
|
|
|
|
|
|
|
|
taskService.save(remote);
|
|
|
|
|
|
|
|
ids.add(remote.getId());
|
|
|
|
|
|
|
|
metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY));
|
|
|
|
|
|
|
|
remote.clear();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(manual) {
|
|
|
|
|
|
|
|
Long[] localIds = ids.toArray(new Long[ids.size()]);
|
|
|
|
|
|
|
|
taskService.deleteWhere(Criterion.and(
|
|
|
|
taskService.deleteWhere(Criterion.and(
|
|
|
|
TagService.memberOfTagData(tagData.getValue(TagData.REMOTE_ID)),
|
|
|
|
TagService.memberOfTagData(tagData.getValue(TagData.REMOTE_ID)),
|
|
|
|
TaskCriteria.activeAndVisible(),
|
|
|
|
TaskCriteria.activeAndVisible(),
|
|
|
|
Task.REMOTE_ID.isNotNull(),
|
|
|
|
Task.REMOTE_ID.isNotNull(),
|
|
|
|
Criterion.not(Task.ID.in(localIds))));
|
|
|
|
Criterion.not(Task.ID.in(localIds))));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected HashMap<Long, Long> getLocalModels() {
|
|
|
|
|
|
|
|
TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID,
|
|
|
|
|
|
|
|
Task.REMOTE_ID).where(Task.REMOTE_ID.in(remoteIds)).orderBy(
|
|
|
|
|
|
|
|
Order.asc(Task.REMOTE_ID)));
|
|
|
|
|
|
|
|
return cursorToMap(cursor, taskDao, Task.REMOTE_ID, Task.ID);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected Class<Task> typeClass() {
|
|
|
|
|
|
|
|
return Task.class;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, done, "tasks:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID));
|
|
|
|
}, done, "tasks:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1085,7 +994,6 @@ public final class ActFmSyncService {
|
|
|
|
readIds(locals, item, remote);
|
|
|
|
readIds(locals, item, remote);
|
|
|
|
|
|
|
|
|
|
|
|
long serverModificationDate = item.optLong("updated_at") * 1000;
|
|
|
|
long serverModificationDate = item.optLong("updated_at") * 1000;
|
|
|
|
System.err.println("Server mod: " + serverModificationDate + ", local mod: " + modificationDates.get(remote.getId()));
|
|
|
|
|
|
|
|
if (serverModificationDate > 0 && modificationDates.containsKey(remote.getId()) && serverModificationDate < modificationDates.get(remote.getId())) {
|
|
|
|
if (serverModificationDate > 0 && modificationDates.containsKey(remote.getId()) && serverModificationDate < modificationDates.get(remote.getId())) {
|
|
|
|
ids.add(remote.getId());
|
|
|
|
ids.add(remote.getId());
|
|
|
|
continue; // Modified locally more recently than remotely -- don't overwrite changes
|
|
|
|
continue; // Modified locally more recently than remotely -- don't overwrite changes
|
|
|
@ -1113,11 +1021,15 @@ public final class ActFmSyncService {
|
|
|
|
|
|
|
|
|
|
|
|
if(deleteExtras) {
|
|
|
|
if(deleteExtras) {
|
|
|
|
Long[] localIds = ids.toArray(new Long[ids.size()]);
|
|
|
|
Long[] localIds = ids.toArray(new Long[ids.size()]);
|
|
|
|
|
|
|
|
deleteExtras(localIds);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected void deleteExtras(Long[] localIds) {
|
|
|
|
taskService.deleteWhere(Criterion.and(TaskCriteria.activeAndVisible(),
|
|
|
|
taskService.deleteWhere(Criterion.and(TaskCriteria.activeAndVisible(),
|
|
|
|
Task.REMOTE_ID.isNotNull(),
|
|
|
|
Task.REMOTE_ID.isNotNull(),
|
|
|
|
Criterion.not(Task.ID.in(localIds))));
|
|
|
|
Criterion.not(Task.ID.in(localIds))));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected HashMap<Long, Long> getLocalModels() {
|
|
|
|
protected HashMap<Long, Long> getLocalModels() {
|
|
|
|