Title match when syncing with both services

pull/14/head
Sam Bosley 12 years ago
parent 268d57d498
commit aa775fdacf

@ -39,6 +39,7 @@ import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
@ -59,6 +60,8 @@ import com.todoroo.astrid.data.TaskApiDao;
import com.todoroo.astrid.data.Update;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.files.FileMetadata;
import com.todoroo.astrid.gtasks.GtasksMetadata;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.helper.ImageDiskCache;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.StatisticsConstants;
@ -84,6 +87,7 @@ public final class ActFmSyncService {
@Autowired MetadataService metadataService;
@Autowired TaskService taskService;
@Autowired ActFmPreferenceService actFmPreferenceService;
@Autowired GtasksPreferenceService gtasksPreferenceService;
@Autowired ActFmInvoker actFmInvoker;
@Autowired ActFmDataService actFmDataService;
@Autowired TaskDao taskDao;
@ -1139,6 +1143,11 @@ public final class ActFmSyncService {
remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true);
if (remote.getValue(Task.USER_ID) != Task.USER_ID_SELF)
remote.putTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC, true);
if (!remote.isSaved() && gtasksPreferenceService.isLoggedIn()) {
titleMatchOnGoogleTask(remote);
}
taskService.save(remote);
ids.add(remote.getId());
metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY));
@ -1152,6 +1161,22 @@ public final class ActFmSyncService {
}
}
private void titleMatchOnGoogleTask(Task remote) {
String title = remote.getValue(Task.TITLE);
TodorooCursor<Task> match = taskService.query(Query.select(Task.ID)
.join(Join.inner(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY), Metadata.TASK.eq(Task.ID))))
.where(Criterion.and(Task.TITLE.eq(title), Task.REMOTE_ID.isNull())));
try {
if (match.getCount() > 0) {
match.moveToFirst();
Task matchedTitle = new Task(match);
remote.setId(matchedTitle.getId());
}
} finally {
match.close();
}
}
protected void deleteExtras(Long[] localIds) {
taskService.deleteWhere(Criterion.and(TaskCriteria.activeVisibleMine(),
Task.REMOTE_ID.isNotNull(),

@ -22,6 +22,7 @@ import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.StoreObjectDao;
@ -53,6 +54,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
@Autowired TaskService taskService;
@Autowired MetadataService metadataService;
@Autowired StoreObjectDao storeObjectDao;
@Autowired ActFmPreferenceService actFmPreferenceService;
@Autowired GtasksPreferenceService gtasksPreferenceService;
@Autowired GtasksSyncService gtasksSyncService;
@Autowired GtasksListService gtasksListService;
@ -126,8 +128,6 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
callback.incrementMax(25 * lists.length);
final AtomicInteger finisher = new AtomicInteger(lists.length);
pushUpdated(invoker, callback);
for (final StoreObject list : lists) {
new Thread(new Runnable() {
@Override
@ -140,6 +140,8 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
}
}).start();
}
pushUpdated(invoker, callback);
}
}).start();
}
@ -303,6 +305,9 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
private void write(GtasksTaskContainer task) throws IOException {
// merge astrid dates with google dates
if (!task.task.isSaved() && actFmPreferenceService.isLoggedIn())
titleMatchWithActFm(task.task);
if(task.task.isSaved()) {
Task local = PluginServices.getTaskService().fetchById(task.task.getId(), Task.DUE_DATE, Task.COMPLETION_DATE);
if (local == null) {
@ -321,6 +326,24 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
}
}
private void titleMatchWithActFm(Task task) {
String title = task.getValue(Task.TITLE);
System.err.println("GTASKS Trying to match on title " + title);
TodorooCursor<Task> match = taskService.query(Query.select(Task.ID)
.join(Join.left(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY), Metadata.TASK.eq(Task.ID))))
.where(Criterion.and(Task.TITLE.eq(title), GtasksMetadata.ID.isNull())));
try {
System.err.println("Found: " + match.getCount());
if (match.getCount() > 0) {
match.moveToFirst();
Task matchedTask = new Task(match);
task.setId(matchedTask.getId());
}
} finally {
match.close();
}
}
private void mergeDates(Task remote, Task local) {
if(remote.hasDueDate() && local.hasDueTime()) {
Date newDate = new Date(remote.getValue(Task.DUE_DATE));

Loading…
Cancel
Save