Hard code orders

pull/618/head
Alex Baker 6 years ago
parent 2711485dab
commit 39c10a8ac9

@ -7,14 +7,6 @@ package com.todoroo.andlib.sql;
public final class Functions {
public static String caseStatement(Criterion when, Object ifTrue, Object ifFalse) {
return "(CASE WHEN " + when.toString() + " THEN " + value(ifTrue) + " ELSE " + value(ifFalse) + " END)";
}
private static String value(Object value) {
return value.toString();
}
public static Field upper(Field title) {
return new Field("UPPER(" + title.toString() + ")");
}

@ -73,19 +73,20 @@ public class SortHelper {
order = ORDER_TITLE;
break;
case SORT_DUE:
order = Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0),
Functions.now() + "*2", adjustedDueDateFunction()) + "+" + Task.IMPORTANCE);
order = Order.asc("(CASE WHEN (dueDate=0) THEN (strftime('%s','now')*1000)*2 ELSE (CASE WHEN (dueDate / 60000) > 0 THEN dueDate ELSE (dueDate + 43140000) END) END)+importance");
break;
case SORT_IMPORTANCE:
order = Order.asc(Task.IMPORTANCE + "*" + (2*DateUtilities.now()) +
"+" + Functions.caseStatement(Task.DUE_DATE.eq(0), 2 * DateUtilities.now(), Task.DUE_DATE));
order = Order.asc("importance*(strftime('%s','now')*1000)+(CASE WHEN (dueDate=0) THEN (strftime('%s','now')*1000) ELSE dueDate END)");
break;
case SORT_MODIFIED:
order = Order.desc(Task.MODIFICATION_DATE);
break;
case SORT_WIDGET:
default:
order = defaultTaskOrder();
order = Order.asc("(CASE WHEN (dueDate=0) " + // if no due date
"THEN (strftime('%s','now')*1000)*2 " + // then now * 2
"ELSE (" + adjustedDueDateFunction() + ") END) " + // else due time
"+ 172800000 * importance"); // add 2 days * importance
}
if (sortType != SORT_ALPHA) {
order.addSecondaryExpression(ORDER_TITLE);
@ -94,18 +95,8 @@ public class SortHelper {
return order;
}
/**
* Returns SQL task ordering that is astrid's default algorithm
*/
public static Order defaultTaskOrder() {
return Order.asc(Functions.caseStatement(Task.DUE_DATE.eq(0),
Functions.now() + "*2",
adjustedDueDateFunction()) + " + " + (2 * DateUtilities.ONE_DAY) + " * " +
Task.IMPORTANCE);
}
private static String adjustedDueDateFunction() {
return "(CASE WHEN (" + Task.DUE_DATE.name + " / 60000) > 0" + " THEN " + Task.DUE_DATE.name + " ELSE " + "(" + Task.DUE_DATE.name + " + " + (DateUtilities.ONE_HOUR * 11 + DateUtilities.ONE_MINUTE * 59) + ") END)";
// if no due time use 11:59AM
return "(CASE WHEN (dueDate / 60000) > 0 THEN dueDate ELSE (dueDate + 43140000) END)";
}
}

@ -17,7 +17,6 @@ import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.data.Task;
import org.tasks.BuildConfig;
@ -206,11 +205,11 @@ public abstract class TaskDao {
return false;
}
public List<Task> getAstrid2TaskProviderTasks() {
return toList(query(Query.select()
.where(Criterion.and(TaskCriteria.isActive(), TaskCriteria.isVisible()))
.orderBy(SortHelper.defaultTaskOrder()).limit(100)));
}
@android.arch.persistence.room.Query("SELECT * FROM tasks " +
"WHERE completed = 0 AND deleted = 0 AND hideUntil < (strftime('%s','now')*1000) " +
"ORDER BY (CASE WHEN (dueDate=0) THEN (strftime('%s','now')*1000)*2 ELSE ((CASE WHEN (dueDate / 60000) > 0 THEN dueDate ELSE (dueDate + 43140000) END)) END) + 172800000 * importance ASC " +
"LIMIT 100")
public abstract List<Task> getAstrid2TaskProviderTasks();
/**
* Mark the given task as completed and save it.
@ -239,14 +238,7 @@ public abstract class TaskDao {
}
public List<Task> fetchFiltered(String query) {
return toList(fetchFiltered(query, Task.PROPERTIES));
}
public Cursor fetchFiltered(String queryTemplate, Property<?>... properties) {
return query(Query.select(properties).withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate)));
}
private List<Task> toList(Cursor cursor) {
Cursor cursor = fetchFiltered(query, Task.PROPERTIES);
List<Task> result = new ArrayList<>();
try {
for (cursor.moveToFirst() ; !cursor.isAfterLast() ; cursor.moveToNext()) {
@ -258,10 +250,8 @@ public abstract class TaskDao {
return result;
}
/**
* Construct a query with SQL DSL objects
*/
private Cursor query(Query query) {
public Cursor fetchFiltered(String queryTemplate, Property<?>... properties) {
Query query = Query.select(properties).withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate));
String queryString = query.from(Task.TABLE).toString();
if (BuildConfig.DEBUG) {
Timber.v(queryString);

@ -52,8 +52,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
private static final int MAX_NUMBER_OF_TASKS = 100;
private final static String NAME = "name";
private final static String IMPORTANCE_COLOR = "importance_color";
private final static String IDENTIFIER = "identifier";
@ -163,7 +161,8 @@ public class Astrid2TaskProvider extends InjectingContentProvider {
private Cursor getTasks() {
MatrixCursor ret = new MatrixCursor(TASK_FIELD_LIST);
List<Integer> importanceColors = checkBoxes.get().getPriorityColors();
for (Task task : taskDao.get().getAstrid2TaskProviderTasks()) {
List<Task> tasks = taskDao.get().getAstrid2TaskProviderTasks();
for (Task task : tasks) {
String taskTags = getTagsAsString(task.getId(), TAG_SEPARATOR);
Object[] values = new Object[7];

@ -30,6 +30,8 @@ import javax.inject.Inject;
import timber.log.Timber;
import static com.todoroo.andlib.utility.DateUtilities.now;
public class TaskCreator {
private final GCalHelper gcalHelper;
@ -81,6 +83,8 @@ public class TaskCreator {
*/
public Task createWithValues(Map<String, Object> values, String title) {
Task task = new Task();
task.setCreationDate(now());
task.setModificationDate(now());
if (title != null) {
task.setTitle(title.trim());
}

Loading…
Cancel
Save