From 336ec485b37aa76e220d41ca4700960f6816f414 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 6 Feb 2013 15:16:43 -0800 Subject: [PATCH] Apply correct user join and union with history table to task comments fragment --- .../todoroo/astrid/actfm/TagViewFragment.java | 2 +- .../astrid/actfm/TaskCommentsFragment.java | 34 +++++++++++++++++-- .../astrid/service/TagDataService.java | 13 ++----- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java index f1952d90f..b2962e856 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java @@ -301,7 +301,7 @@ public class TagViewFragment extends TaskListFragment { if (tagData != null) { long lastViewedComments = Preferences.getLong(CommentsFragment.UPDATES_LAST_VIEWED + tagData.getValue(TagData.UUID), 0); int unreadCount = 0; - TodorooCursor commentCursor = tagDataService.getUpdatesWithExtraCriteria(tagData, UserActivity.CREATED_AT.gt(lastViewedComments), null); + TodorooCursor commentCursor = tagDataService.getUserActivityWithExtraCriteria(tagData, UserActivity.CREATED_AT.gt(lastViewedComments)); try { unreadCount = commentCursor.getCount(); } finally { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java index 1f62de747..6864c4d82 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java @@ -2,16 +2,24 @@ package com.todoroo.astrid.actfm; import android.content.Intent; import android.database.Cursor; +import android.text.TextUtils; import android.view.ViewGroup; import android.widget.ListView; import com.timsu.astrid.R; +import com.todoroo.andlib.data.Property; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; +import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.History; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.User; import com.todoroo.astrid.data.UserActivity; @@ -55,9 +63,29 @@ public class TaskCommentsFragment extends CommentsFragment { @Override protected Cursor getCursor() { - return userActivityDao.query(Query.select(UserActivity.PROPERTIES) - .where(UserActivity.TARGET_ID.eq(task.getUuid())) - .join(Join.left(User.TABLE, UserActivity.USER_UUID.eq(User.UUID)))); + Query taskQuery = queryForTask(task, UpdateAdapter.USER_TABLE_ALIAS, UpdateAdapter.USER_ACTIVITY_PROPERTIES, UpdateAdapter.USER_PROPERTIES); + int length = UpdateAdapter.USER_ACTIVITY_PROPERTIES.length + UpdateAdapter.USER_PROPERTIES.length; + + Property[] paddingArray = new Property[Math.max(0, length - UpdateAdapter.HISTORY_PROPERTIES.length)]; + for (int i = 0; i < paddingArray.length; i++) { + paddingArray[i] = UpdateAdapter.PADDING_PROPERTY; + } + + Query historyQuery = Query.select(AndroidUtilities.addToArray(UpdateAdapter.HISTORY_PROPERTIES, paddingArray)).from(History.TABLE) + .where(Criterion.and(History.TABLE_ID.eq(NameMaps.TABLE_ID_TASKS), History.TARGET_ID.eq(task.getUuid()))) + .from(History.TABLE); + + Query resultQuery = taskQuery.union(historyQuery).orderBy(Order.desc("1")); //$NON-NLS-1$ + + return userActivityDao.query(resultQuery); + } + + private static Query queryForTask(Task task, String userTableAlias, Property[] activityProperties, Property[] userProperties) { + Query result = Query.select(AndroidUtilities.addToArray(activityProperties, userProperties)) + .where(Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), UserActivity.TARGET_ID.eq(task.getUuid()))); + if (!TextUtils.isEmpty(userTableAlias)) + result = result.join(Join.left(User.TABLE.as(userTableAlias), UserActivity.USER_UUID.eq(Field.field(userTableAlias + "." + User.UUID.name)))); //$NON-NLS-1$ + return result; } @Override diff --git a/astrid/src/com/todoroo/astrid/service/TagDataService.java b/astrid/src/com/todoroo/astrid/service/TagDataService.java index 47fa658b2..1b1ce8184 100644 --- a/astrid/src/com/todoroo/astrid/service/TagDataService.java +++ b/astrid/src/com/todoroo/astrid/service/TagDataService.java @@ -145,14 +145,6 @@ public class TagDataService { return tagDataDao.query(Query.select(properties).withQueryTemplate(sql)); } - /** - * Get updates for this tagData - * @return - */ - public TodorooCursor getUpdates(TagData tagData, String userTableAlias, Property... userProperties) { - return getUpdatesWithExtraCriteria(tagData, null, userTableAlias, userProperties); - } - private static Query queryForTagData(TagData tagData, Criterion extraCriterion, String userTableAlias, Property[] activityProperties, Property[] userProperties) { Criterion criteria = Criterion.or( Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TAG_COMMENT), UserActivity.TARGET_ID.eq(tagData.getUuid())), @@ -168,13 +160,13 @@ public class TagDataService { return result; } - public TodorooCursor getUpdatesWithExtraCriteria(TagData tagData, Criterion criterion, String userTableAlias, Property... userProperties) { + public TodorooCursor getUserActivityWithExtraCriteria(TagData tagData, Criterion criterion) { if (tagData == null) return userActivityDao.query(Query.select(UserActivity.PROPERTIES).where( criterion). orderBy(Order.desc(UserActivity.CREATED_AT))); - return userActivityDao.query(queryForTagData(tagData, criterion, userTableAlias, UserActivity.PROPERTIES, userProperties).orderBy(Order.desc(UserActivity.CREATED_AT))); + return userActivityDao.query(queryForTagData(tagData, criterion, null, UserActivity.PROPERTIES, null).orderBy(Order.desc(UserActivity.CREATED_AT))); } public Cursor getActivityAndHistoryForTagData(TagData tagData, Criterion extraCriterion, String userTableAlias, Property...userProperties) { @@ -194,7 +186,6 @@ public class TagDataService { .from(History.TABLE); Query resultQuery = activityQuery.union(historyQuery).orderBy(Order.desc("1")); //$NON-NLS-1$ - System.err.println("QUERY: " + resultQuery); return userActivityDao.query(resultQuery); }