Join query for task rabbit data

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

@ -218,7 +218,7 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
super(table, name, nullable);
}
protected LongProperty(Table table, String name, String expression) {
public LongProperty(Table table, String name, String 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.DependencyInjectionService;
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.Preferences;
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.dao.Database;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
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.subtasks.SubtasksListFragment;
import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.taskrabbit.TaskRabbitMetadata;
import com.todoroo.astrid.ui.QuickAddBar;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Constants;
@ -887,8 +891,13 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
if (filter == null)
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(
filter.getSqlQuery(), sortFlags, sortSort));
joinedTaskRabbitQuery, sortFlags, sortSort));
// perform query
TodorooCursor<Task> currentCursor;

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

Loading…
Cancel
Save