New tasks in custom filter use noon instead of eod

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

@ -9,6 +9,7 @@ package com.todoroo.astrid.api;
import static org.tasks.date.DateTimeUtils.newDateTime;
import com.todoroo.andlib.utility.DateUtilities;
import org.tasks.time.DateTime;
/**
* 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
*/
public static String replacePlaceholders(String value) {
public static String replacePlaceholdersForQuery(String value) {
if (value.contains(VALUE_NOW)) {
value = value.replace(VALUE_NOW, Long.toString(DateUtilities.now()));
}
@ -97,13 +98,29 @@ public final class PermaSql {
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) {
long time = newDateTime()
.withHourOfDay(23)
.withMinuteOfHour(59)
.withSecondOfMinute(59)
.withMillisOfSecond(0)
.getMillis();
return replaceEodValues(value, newDateTime().endOfDay());
}
private static String replaceEodValues(String value, DateTime dateTime) {
long time = dateTime.getMillis();
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_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY));
@ -114,12 +131,7 @@ public final class PermaSql {
}
private static String replaceNoonValues(String value) {
long time = newDateTime()
.withHourOfDay(12)
.withMinuteOfHour(0)
.withSecondOfMinute(0)
.withMillisOfSecond(0)
.getMillis();
long time = newDateTime().noon().getMillis();
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_TOMORROW, Long.toString(time + DateUtilities.ONE_DAY));

@ -277,7 +277,7 @@ public class CustomFilterActivity extends ThemedInjectingAppCompatActivity imple
sql.append(TaskCriteria.activeAndVisible()).append(' ');
} else {
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(") ");
}

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

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

Loading…
Cancel
Save