Refactored some things in TagService to use UUIDs

pull/14/head
Sam Bosley 12 years ago
parent 4ad09ff6ee
commit d0fd66cdd0

@ -1146,11 +1146,7 @@ public final class ActFmSyncService {
invokeFetchList("task", manual, null, new TaskListItemProcessor(manual) { invokeFetchList("task", manual, null, new TaskListItemProcessor(manual) {
@Override @Override
protected void deleteExtras(Long[] localIds) { protected void deleteExtras(Long[] localIds) {
taskService.deleteWhere(Criterion.and( //
TagService.memberOfTagData(tagData.getValue(TagData.REMOTE_ID)),
TaskCriteria.activeAndVisible(),
Task.REMOTE_ID.isNotNull(),
Criterion.not(Task.ID.in(localIds))));
} }
}, done, "tasks:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID)); }, done, "tasks:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID));
} }

@ -16,6 +16,7 @@ import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
@ -107,9 +108,16 @@ public class TagCaseMigrator {
addTasksToTargetTag(renameMap.get(tag), targetNameForTag(tag)); addTasksToTargetTag(renameMap.get(tag), targetNameForTag(tag));
} }
@Deprecated
private static Criterion tagEq(String tag, Criterion additionalCriterion) {
return Criterion.and(
MetadataCriteria.withKey(TagMetadata.KEY), TagMetadata.TAG_NAME.eq(tag),
additionalCriterion);
}
private void addTasksToTargetTag(String tag, String target) { private void addTasksToTargetTag(String tag, String target) {
TodorooCursor<Task> tasks = taskService.query(Query.select(Task.ID).join(Join.inner(Metadata.TABLE, TodorooCursor<Task> tasks = taskService.query(Query.select(Task.ID).join(Join.inner(Metadata.TABLE,
Task.ID.eq(Metadata.TASK))).where(TagService.tagEq(tag, Criterion.all))); Task.ID.eq(Metadata.TASK))).where(tagEq(tag, Criterion.all)));
try { try {
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
Task curr = new Task(tasks); Task curr = new Task(tasks);

@ -161,12 +161,8 @@ public final class TagService {
} }
public static Criterion memberOfTagData(long tagDataUUID) { @Deprecated
return Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where( private static Criterion tagEq(String tag, Criterion additionalCriterion) {
Criterion.and(Metadata.KEY.eq(TagMetadata.KEY), TagMetadata.TAG_UUID.eq(tagDataUUID))));
}
public static Criterion tagEq(String tag, Criterion additionalCriterion) {
return Criterion.and( return Criterion.and(
MetadataCriteria.withKey(TagMetadata.KEY), TagMetadata.TAG_NAME.eq(tag), MetadataCriteria.withKey(TagMetadata.KEY), TagMetadata.TAG_NAME.eq(tag),
additionalCriterion); additionalCriterion);
@ -179,7 +175,7 @@ public final class TagService {
} }
public QueryTemplate untaggedTemplate() { public QueryTemplate untaggedTemplate() {
Long[] emergentTags = getEmergentTagIds(); String[] emergentTags = getEmergentTagIds();
return new QueryTemplate().where(Criterion.and( return new QueryTemplate().where(Criterion.and(
Criterion.not(Task.UUID.in(Query.select(TagMetadata.TASK_UUID).from(Metadata.TABLE) Criterion.not(Task.UUID.in(Query.select(TagMetadata.TASK_UUID).from(Metadata.TABLE)
@ -222,18 +218,20 @@ public final class TagService {
} }
} }
public Long[] getEmergentTagIds() { public String[] getEmergentTagIds() {
TodorooCursor<TagData> emergent = tagDataService.query(Query.select(TagData.ID) TodorooCursor<TagData> emergent = tagDataService.query(Query.select(TagData.UUID)
.where(Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_EMERGENT).gt(0))); .where(Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_EMERGENT).gt(0)));
try { try {
Long[] tags = new Long[emergent.getCount()]; ArrayList<String> tags = new ArrayList<String>();
TagData data = new TagData(); TagData data = new TagData();
for (int i = 0; i < emergent.getCount(); i++) { for (int i = 0; i < emergent.getCount(); i++) {
emergent.moveToPosition(i); emergent.moveToPosition(i);
data.readFromCursor(emergent); data.readFromCursor(emergent);
tags[i] = data.getId(); String uuid = data.getValue(TagData.UUID);
if (!TextUtils.isEmpty(uuid) && !"0".equals(uuid))
tags.add(uuid);
} }
return tags; return tags.toArray(new String[tags.size()]);
} finally { } finally {
emergent.close(); emergent.close();
} }
@ -337,7 +335,7 @@ public final class TagService {
Metadata.DELETION_DATE.eq(0), Metadata.DELETION_DATE.eq(0),
Metadata.TASK.eq(taskId)))); Metadata.TASK.eq(taskId))));
if (!includeEmergent) if (!includeEmergent)
criterion = Criterion.and(Criterion.not(TagData.ID.in(getEmergentTagIds())), criterion); criterion = Criterion.and(Criterion.not(TagData.UUID.in(getEmergentTagIds())), criterion);
return tagDataService.query(Query.select(properties).where(criterion)); return tagDataService.query(Query.select(properties).where(criterion));
} }

@ -950,7 +950,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
if (getActiveTagData() != null) if (getActiveTagData() != null)
tagName = getActiveTagData().getValue(TagData.NAME); tagName = getActiveTagData().getValue(TagData.NAME);
Long[] emergentTagIds = TagService.getInstance().getEmergentTagIds(); String[] emergentTagIds = TagService.getInstance().getEmergentTagIds();
StringProperty tagProperty = new StringProperty(null, TAGS_METADATA_JOIN + "." + TagMetadata.TAG_UUID.name); StringProperty tagProperty = new StringProperty(null, TAGS_METADATA_JOIN + "." + TagMetadata.TAG_UUID.name);
Criterion tagsJoinCriterion = Criterion.and( Criterion tagsJoinCriterion = Criterion.and(

Loading…
Cancel
Save