New tasks in custom filter use noon instead of eod

pull/699/head
Alex Baker 7 years ago
parent f601e42f4c
commit bb44afbb7d

@ -9,6 +9,7 @@ package com.todoroo.astrid.api;
import static org.tasks.date.DateTimeUtils.newDateTime; import static org.tasks.date.DateTimeUtils.newDateTime;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import org.tasks.time.DateTime;
/** /**
* PermaSql allows for creating SQL statements that can be saved and used * PermaSql allows for creating SQL statements that can be saved and used
@ -80,7 +81,7 @@ public final class PermaSql {
/** /**
* Replace placeholder strings with actual * Replace placeholder strings with actual
*/ */
public static String replacePlaceholders(String value) { public static String replacePlaceholdersForQuery(String value) {
if (value.contains(VALUE_NOW)) { if (value.contains(VALUE_NOW)) {
value = value.replace(VALUE_NOW, Long.toString(DateUtilities.now())); value = value.replace(VALUE_NOW, Long.toString(DateUtilities.now()));
} }
@ -97,13 +98,29 @@ public final class PermaSql {
return value; return value;
} }
public static String replacePlaceholdersForNewTask(String value) {
if (value.contains(VALUE_NOW)) {
value = value.replace(VALUE_NOW, Long.toString(DateUtilities.now()));
}
if (value.contains(VALUE_EOD) || value.contains(VALUE_EOD_DAY_AFTER) ||
value.contains(VALUE_EOD_NEXT_WEEK) || value.contains(VALUE_EOD_TOMORROW) ||
value.contains(VALUE_EOD_YESTERDAY) || value.contains(VALUE_EOD_NEXT_MONTH)) {
value = replaceEodValues(value, newDateTime().noon());
}
if (value.contains(VALUE_NOON) || value.contains(VALUE_NOON_DAY_AFTER) ||
value.contains(VALUE_NOON_NEXT_WEEK) || value.contains(VALUE_NOON_TOMORROW) ||
value.contains(VALUE_NOON_YESTERDAY) || value.contains(VALUE_NOON_NEXT_MONTH)) {
value = replaceNoonValues(value);
}
return value;
}
private static String replaceEodValues(String value) { private static String replaceEodValues(String value) {
long time = newDateTime() return replaceEodValues(value, newDateTime().endOfDay());
.withHourOfDay(23) }
.withMinuteOfHour(59)
.withSecondOfMinute(59) private static String replaceEodValues(String value, DateTime dateTime) {
.withMillisOfSecond(0) long time = dateTime.getMillis();
.getMillis();
value = value.replace(VALUE_EOD_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY)); value = value.replace(VALUE_EOD_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY));
value = value.replace(VALUE_EOD, Long.toString(time)); value = value.replace(VALUE_EOD, Long.toString(time));
value = value.replace(VALUE_EOD_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY)); value = value.replace(VALUE_EOD_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY));
@ -114,12 +131,7 @@ public final class PermaSql {
} }
private static String replaceNoonValues(String value) { private static String replaceNoonValues(String value) {
long time = newDateTime() long time = newDateTime().noon().getMillis();
.withHourOfDay(12)
.withMinuteOfHour(0)
.withSecondOfMinute(0)
.withMillisOfSecond(0)
.getMillis();
value = value.replace(VALUE_NOON_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY)); value = value.replace(VALUE_NOON_YESTERDAY, Long.toString(time - DateUtilities.ONE_DAY));
value = value.replace(VALUE_NOON, Long.toString(time)); value = value.replace(VALUE_NOON, Long.toString(time));
value = value.replace(VALUE_NOON_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY)); value = value.replace(VALUE_NOON_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY));

@ -277,7 +277,7 @@ public class CustomFilterActivity extends ThemedInjectingAppCompatActivity imple
sql.append(TaskCriteria.activeAndVisible()).append(' '); sql.append(TaskCriteria.activeAndVisible()).append(' ');
} else { } else {
String subSql = instance.criterion.sql.replace("?", UnaryCriterion.sanitize(value)); String subSql = instance.criterion.sql.replace("?", UnaryCriterion.sanitize(value));
subSql = PermaSql.replacePlaceholders(subSql); subSql = PermaSql.replacePlaceholdersForQuery(subSql);
sql.append(Task.ID).append(" IN (").append(subSql).append(") "); sql.append(Task.ID).append(" IN (").append(subSql).append(") ");
} }

@ -233,7 +233,7 @@ public abstract class TaskDao {
public Cursor getCursor(String queryTemplate) { public Cursor getCursor(String queryTemplate) {
Query query = Query.select(Task.PROPERTIES) Query query = Query.select(Task.PROPERTIES)
.withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate)); .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate));
String queryString = query.from(Task.TABLE).toString(); String queryString = query.from(Task.TABLE).toString();
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Timber.v(queryString); Timber.v(queryString);
@ -245,7 +245,7 @@ public abstract class TaskDao {
Property<?>... properties) { Property<?>... properties) {
String query = Query String query = Query
.select(properties) .select(properties)
.withQueryTemplate(PermaSql.replacePlaceholders(queryTemplate)) .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate))
.from(Task.TABLE).toString(); .from(Task.TABLE).toString();
return new LimitOffsetDataSource(database, query); return new LimitOffsetDataSource(database, query);
} }

@ -132,24 +132,33 @@ public class TaskCreator {
for (Map.Entry<String, Object> item : values.entrySet()) { for (Map.Entry<String, Object> item : values.entrySet()) {
String key = item.getKey(); String key = item.getKey();
Object value = item.getValue(); Object value = item.getValue();
if (key.equals(Tag.KEY)) { switch (key) {
tags.add((String) value); case Tag.KEY:
} else if (key.equals(GoogleTask.KEY)) { tags.add((String) value);
task.putTransitory(key, value); break;
} else if (key.equals(CaldavTask.KEY)) { case GoogleTask.KEY:
task.putTransitory(key, value); task.putTransitory(key, value);
} else { break;
if (value instanceof String) { case CaldavTask.KEY:
value = PermaSql.replacePlaceholders((String) value); task.putTransitory(key, value);
} break;
default:
if (key.equals("dueDate")) { if (value instanceof String) {
task.setDueDate(Long.valueOf((String) value)); value = PermaSql.replacePlaceholdersForNewTask((String) value);
} else if (key.equals("importance")) { }
task.setImportance(Integer.valueOf((String) value));
} else { switch (key) {
tracker.reportEvent(Tracking.Events.TASK_CREATION_FAILED, "Unhandled key: " + key); case "dueDate":
} task.setDueDate(Long.valueOf((String) value));
break;
case "importance":
task.setImportance(Integer.valueOf((String) value));
break;
default:
tracker.reportEvent(Tracking.Events.TASK_CREATION_FAILED, "Unhandled key: " + key);
break;
}
break;
} }
} }
} }

@ -115,6 +115,24 @@ public class DateTime {
return new DateTime(calendar); return new DateTime(calendar);
} }
public DateTime noon() {
Calendar calendar = getCalendar();
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new DateTime(calendar);
}
public DateTime endOfDay() {
Calendar calendar = getCalendar();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 0);
return new DateTime(calendar);
}
public DateTime withMillisOfDay(int millisOfDay) { public DateTime withMillisOfDay(int millisOfDay) {
if (millisOfDay > MAX_MILLIS_PER_DAY || millisOfDay < 0) { if (millisOfDay > MAX_MILLIS_PER_DAY || millisOfDay < 0) {
throw new RuntimeException("Illegal millis of day: " + millisOfDay); throw new RuntimeException("Illegal millis of day: " + millisOfDay);

Loading…
Cancel
Save