First draft of prompt to import

pull/14/head
Sam Bosley 13 years ago
parent c4284894a0
commit d8b3f962b6

@ -15,13 +15,15 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity; import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider; import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider;
import com.todoroo.astrid.service.SyncResultCallbackWrapper.WidgetUpdatingCallbackWrapper; import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider.GtasksImportCallback;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider.GtasksImportTuple;
import com.todoroo.astrid.sync.SyncProviderPreferences; import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.sync.SyncProviderUtilities; import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncResultCallbackAdapter; import com.todoroo.astrid.sync.SyncResultCallbackAdapter;
import com.todoroo.astrid.tags.TagService;
/** /**
* Displays synchronization preferences and an action panel so users can * Displays synchronization preferences and an action panel so users can
@ -34,6 +36,7 @@ public class GtasksPreferences extends SyncProviderPreferences {
@Autowired private GtasksPreferenceService gtasksPreferenceService; @Autowired private GtasksPreferenceService gtasksPreferenceService;
@Autowired private ActFmPreferenceService actFmPreferenceService; @Autowired private ActFmPreferenceService actFmPreferenceService;
@Autowired private TagService tagService;
public GtasksPreferences() { public GtasksPreferences() {
super(); super();
@ -97,13 +100,27 @@ public class GtasksPreferences extends SyncProviderPreferences {
pd.setCancelable(false); pd.setCancelable(false);
pd.show(); pd.show();
SyncResultCallback callback = new WidgetUpdatingCallbackWrapper(new SyncResultCallbackAdapter() { GtasksImportCallback callback = new GtasksImportCallback(new SyncResultCallbackAdapter() {/**/}) {
@Override @Override
public void finished() { public void finished() {
super.finished(); super.finished();
for (GtasksImportTuple tuple : importConflicts) {
final GtasksImportTuple finalTuple = tuple;
DialogUtilities.okCancelDialog(GtasksPreferences.this,
"Add task " + tuple.taskUuid + " to shared list " + tuple.tagUuid + "?",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Task task = new Task();
task.setId(finalTuple.taskId);
task.setUuid(finalTuple.taskUuid);
tagService.createLink(task, finalTuple.tagName, finalTuple.tagUuid);
}
}, null);
}
DialogUtilities.dismissDialog(GtasksPreferences.this, pd); DialogUtilities.dismissDialog(GtasksPreferences.this, pd);
} }
}); };
GtasksSyncV2Provider.getInstance().synchronizeActiveTasks(true, callback); GtasksSyncV2Provider.getInstance().synchronizeActiveTasks(true, callback);
} }

@ -32,6 +32,7 @@ import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
@ -53,6 +54,7 @@ import com.todoroo.astrid.service.AstridDependencyInjector;
import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.service.SyncResultCallbackWrapper.WidgetUpdatingCallbackWrapper;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider; import com.todoroo.astrid.sync.SyncV2Provider;
@ -71,6 +73,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
@Autowired GtasksTaskListUpdater gtasksTaskListUpdater; @Autowired GtasksTaskListUpdater gtasksTaskListUpdater;
@Autowired TagService tagService; @Autowired TagService tagService;
@Autowired TagDataDao tagDataDao; @Autowired TagDataDao tagDataDao;
@Autowired TagMetadataDao tagMetadataDao;
static { static {
AstridDependencyInjector.initialize(); AstridDependencyInjector.initialize();
@ -111,6 +114,27 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
return gtasksPreferenceService.isLoggedIn() && !actFmPreferenceService.isLoggedIn(); return gtasksPreferenceService.isLoggedIn() && !actFmPreferenceService.isLoggedIn();
} }
public static class GtasksImportTuple {
public long taskId;
public String taskUuid;
public String tagUuid;
public String tagName;
}
public static class GtasksImportCallback extends WidgetUpdatingCallbackWrapper {
protected final ArrayList<GtasksImportTuple> importConflicts;
public GtasksImportCallback(SyncResultCallback wrap) {
super(wrap);
importConflicts = new ArrayList<GtasksImportTuple>();
}
public void addImportConflict(GtasksImportTuple tuple) {
importConflicts.add(tuple);
}
}
@Override @Override
public void synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) { public void synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) {
// TODO: Improve this logic. Should only be able to import from settings or something. // TODO: Improve this logic. Should only be able to import from settings or something.
@ -155,7 +179,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
if (!isImport) if (!isImport)
pushUpdated(invoker, callback); pushUpdated(invoker, callback);
else else
finishImport(); finishImport(callback);
finishSync(callback); finishSync(callback);
} }
} }
@ -378,11 +402,16 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
} }
} }
private void finishImport() { private void finishImport(SyncResultCallback callback) {
TodorooCursor<Task> tasks = taskService.query(Query.select(Task.ID, Task.UUID, GtasksList.NAME) TodorooCursor<Task> tasks = taskService.query(Query.select(Task.ID, Task.UUID, GtasksList.NAME)
.join(Join.inner(Metadata.TABLE, Task.ID.eq(Metadata.TASK))) .join(Join.inner(Metadata.TABLE, Task.ID.eq(Metadata.TASK)))
.join(Join.left(StoreObject.TABLE, GtasksMetadata.LIST_ID.eq(GtasksList.REMOTE_ID))) .join(Join.left(StoreObject.TABLE, GtasksMetadata.LIST_ID.eq(GtasksList.REMOTE_ID)))
.where(MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY))); .where(MetadataCriteria.withKey(GtasksMetadata.METADATA_KEY)));
GtasksImportCallback gtCallback = null;
if (callback instanceof GtasksImportCallback)
gtCallback = (GtasksImportCallback) callback;
try { try {
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
String listName = tasks.get(GtasksList.NAME); String listName = tasks.get(GtasksList.NAME);
@ -393,6 +422,19 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
if (existingTag.getCount() > 0) { if (existingTag.getCount() > 0) {
existingTag.moveToFirst(); existingTag.moveToFirst();
tagUuid = existingTag.get(TagData.UUID); tagUuid = existingTag.get(TagData.UUID);
if (tagMetadataDao.tagHasMembers(tagUuid)) {
GtasksImportTuple tuple = new GtasksImportTuple();
tuple.taskId = tasks.get(Task.ID);
tuple.taskUuid = tasks.get(Task.UUID);
tuple.tagUuid = tagUuid;
tuple.tagName = listName;
if (gtCallback != null)
gtCallback.addImportConflict(tuple);
continue;
}
} else { } else {
TagData td = new TagData(); TagData td = new TagData();
td.setValue(TagData.NAME, listName); td.setValue(TagData.NAME, listName);

Loading…
Cancel
Save