Join query for task rabbit data

pull/14/head
Sam Bosley 13 years ago
parent 0223ec11a3
commit 4c128d4df6

@ -218,7 +218,7 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
super(table, name, nullable); super(table, name, nullable);
} }
protected LongProperty(Table table, String name, String expression) { public LongProperty(Table table, String name, String expression) {
super(table, name, expression); super(table, name, expression);
} }

@ -59,6 +59,8 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.ActFmLoginActivity; import com.todoroo.astrid.actfm.ActFmLoginActivity;
@ -79,6 +81,7 @@ import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.core.SortHelper; import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
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;
import com.todoroo.astrid.helper.SyncActionHelper; import com.todoroo.astrid.helper.SyncActionHelper;
@ -97,6 +100,7 @@ import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.service.UpgradeService; import com.todoroo.astrid.service.UpgradeService;
import com.todoroo.astrid.subtasks.SubtasksListFragment; import com.todoroo.astrid.subtasks.SubtasksListFragment;
import com.todoroo.astrid.sync.SyncProviderPreferences; import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.taskrabbit.TaskRabbitMetadata;
import com.todoroo.astrid.ui.QuickAddBar; import com.todoroo.astrid.ui.QuickAddBar;
import com.todoroo.astrid.utility.AstridPreferences; import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Constants; import com.todoroo.astrid.utility.Constants;
@ -887,8 +891,13 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
if (filter == null) if (filter == null)
return; return;
// TODO: For now, we'll modify the query to join and include the task rabbit data here.
// Eventually, we might consider restructuring things so that this query is constructed elsewhere.
String joinedTaskRabbitQuery = Join.left(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(TaskRabbitMetadata.METADATA_KEY), Task.ID.eq(Metadata.TASK)))
+ filter.getSqlQuery();
sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort( sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort(
filter.getSqlQuery(), sortFlags, sortSort)); joinedTaskRabbitQuery, sortFlags, sortSort));
// perform query // perform query
TodorooCursor<Task> currentCursor; TodorooCursor<Task> currentCursor;

@ -57,11 +57,13 @@ import android.widget.TextView;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
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.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
@ -107,6 +109,8 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
public static final String BROADCAST_EXTRA_TASK = "model"; //$NON-NLS-1$ public static final String BROADCAST_EXTRA_TASK = "model"; //$NON-NLS-1$
private static final String TASK_RABBIT_COL = "taskRabbitMd";
// --- other constants // --- other constants
/** Properties that need to be read from the action item */ /** Properties that need to be read from the action item */
@ -126,7 +130,8 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
Task.RECURRENCE, Task.RECURRENCE,
Task.NOTES, Task.NOTES,
Task.USER_ID, Task.USER_ID,
Task.USER Task.USER,
(LongProperty) Metadata.ID.as(TASK_RABBIT_COL) // Task rabbit metadata id (non-zero means it exists
}; };
public static int[] IMPORTANCE_RESOURCES = new int[] { public static int[] IMPORTANCE_RESOURCES = new int[] {
@ -326,6 +331,9 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
TodorooCursor<Task> cursor = (TodorooCursor<Task>)c; TodorooCursor<Task> cursor = (TodorooCursor<Task>)c;
ViewHolder viewHolder = ((ViewHolder)view.getTag()); ViewHolder viewHolder = ((ViewHolder)view.getTag());
int taskRabbitIndex = cursor.getColumnIndex(TASK_RABBIT_COL);
viewHolder.isTaskRabbit = (taskRabbitIndex >= 0 && c.getLong(taskRabbitIndex) > 0);
Task task = viewHolder.task; Task task = viewHolder.task;
task.clear(); task.clear();
task.readFromCursor(cursor); task.readFromCursor(cursor);
@ -362,6 +370,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
public LinearLayout taskRow; public LinearLayout taskRow;
public View taskActionContainer; public View taskActionContainer;
public ImageView taskActionIcon; public ImageView taskActionIcon;
public boolean isTaskRabbit;
public View[] decorations; public View[] decorations;
} }
@ -430,8 +439,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
// image view // image view
final AsyncImageView pictureView = viewHolder.picture; { final AsyncImageView pictureView = viewHolder.picture; {
if (pictureView != null) { if (pictureView != null) {
// TaskRabbitTaskContainer container = TaskRabbitDataService.getInstance().getContainerForTask(task);
if(task.getValue(Task.USER_ID) == Task.USER_ID_SELF /*&& !container.isTaskRabbit()*/) { if(task.getValue(Task.USER_ID) == Task.USER_ID_SELF /*&& !container.isTaskRabbit()*/) {
pictureView.setVisibility(View.GONE); pictureView.setVisibility(View.GONE);
if (viewHolder.pictureBorder != null) if (viewHolder.pictureBorder != null)
@ -441,7 +448,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
if (viewHolder.pictureBorder != null) if (viewHolder.pictureBorder != null)
viewHolder.pictureBorder.setVisibility(View.VISIBLE); viewHolder.pictureBorder.setVisibility(View.VISIBLE);
pictureView.setUrl(null); pictureView.setUrl(null);
if (false/*container.isTaskRabbit()*/) { if (viewHolder.isTaskRabbit) {
pictureView.setDefaultImageResource(R.drawable.task_rabbit_image); pictureView.setDefaultImageResource(R.drawable.task_rabbit_image);
} else if(task.getValue(Task.USER_ID) == Task.USER_ID_UNASSIGNED) } else if(task.getValue(Task.USER_ID) == Task.USER_ID_UNASSIGNED)
pictureView.setDefaultImageResource(R.drawable.icn_anyone_transparent); pictureView.setDefaultImageResource(R.drawable.icn_anyone_transparent);
@ -780,6 +787,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
@SuppressWarnings("nls") @SuppressWarnings("nls")
public class ActionsLoaderThread extends Thread { public class ActionsLoaderThread extends Thread {
public static final String FILE_COLUMN = "fileId"; public static final String FILE_COLUMN = "fileId";
private static final String METADATA_JOIN = "for_actions";
@Override @Override
public void run() { public void run() {
@ -790,8 +798,12 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
else else
groupedQuery = query.get() + " GROUP BY " + Task.ID; groupedQuery = query.get() + " GROUP BY " + Task.ID;
final TodorooCursor<Task> fetchCursor = taskService.query(Query.select(Task.ID, Task.TITLE, Task.NOTES, Task.COMPLETION_DATE, Metadata.ID.as(FILE_COLUMN)).join(Join.left(Metadata.TABLE, Query q = Query.select(Task.ID, Task.TITLE, Task.NOTES, Task.COMPLETION_DATE,
Criterion.and(Metadata.KEY.eq(FileMetadata.METADATA_KEY), Task.ID.eq(Metadata.TASK)))).withQueryTemplate(groupedQuery)); new LongProperty(Metadata.TABLE, Metadata.ID.name, METADATA_JOIN + "." + Metadata.ID.name).as(FILE_COLUMN))
.join(Join.left(Metadata.TABLE.as(METADATA_JOIN),
Criterion.and(Field.field(METADATA_JOIN + "." + Metadata.KEY.name).eq(FileMetadata.METADATA_KEY),
Task.ID.eq(Field.field(METADATA_JOIN + "." + Metadata.TASK.name))))).withQueryTemplate(groupedQuery);
final TodorooCursor<Task> fetchCursor = taskService.query(q);
try { try {
Task task = new Task(); Task task = new Task();

Loading…
Cancel
Save