mirror of https://github.com/tasks/tasks
Convert TaskCreator to Kotlin
parent
6670403b7a
commit
c825bfe94a
@ -1,212 +0,0 @@
|
|||||||
package com.todoroo.astrid.service;
|
|
||||||
|
|
||||||
import static com.todoroo.andlib.utility.DateUtilities.now;
|
|
||||||
import static com.todoroo.astrid.helper.UUIDHelper.newUUID;
|
|
||||||
import static org.tasks.Strings.isNullOrEmpty;
|
|
||||||
|
|
||||||
import android.net.Uri;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import com.todoroo.andlib.utility.DateUtilities;
|
|
||||||
import com.todoroo.astrid.api.CaldavFilter;
|
|
||||||
import com.todoroo.astrid.api.Filter;
|
|
||||||
import com.todoroo.astrid.api.GtasksFilter;
|
|
||||||
import com.todoroo.astrid.api.PermaSql;
|
|
||||||
import com.todoroo.astrid.dao.TaskDaoBlocking;
|
|
||||||
import com.todoroo.astrid.data.Task;
|
|
||||||
import com.todoroo.astrid.gcal.GCalHelper;
|
|
||||||
import com.todoroo.astrid.utility.TitleParser;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Map;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.data.CaldavDaoBlocking;
|
|
||||||
import org.tasks.data.CaldavTask;
|
|
||||||
import org.tasks.data.Geofence;
|
|
||||||
import org.tasks.data.GoogleTask;
|
|
||||||
import org.tasks.data.GoogleTaskDaoBlocking;
|
|
||||||
import org.tasks.data.LocationDaoBlocking;
|
|
||||||
import org.tasks.data.Place;
|
|
||||||
import org.tasks.data.Tag;
|
|
||||||
import org.tasks.data.TagDaoBlocking;
|
|
||||||
import org.tasks.data.TagData;
|
|
||||||
import org.tasks.data.TagDataDaoBlocking;
|
|
||||||
import org.tasks.preferences.DefaultFilterProvider;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
public class TaskCreator {
|
|
||||||
|
|
||||||
private final GCalHelper gcalHelper;
|
|
||||||
private final Preferences preferences;
|
|
||||||
private final TagDaoBlocking tagDao;
|
|
||||||
private final GoogleTaskDaoBlocking googleTaskDao;
|
|
||||||
private final DefaultFilterProvider defaultFilterProvider;
|
|
||||||
private final CaldavDaoBlocking caldavDao;
|
|
||||||
private final LocationDaoBlocking locationDao;
|
|
||||||
private final TagDataDaoBlocking tagDataDao;
|
|
||||||
private final TaskDaoBlocking taskDao;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public TaskCreator(
|
|
||||||
GCalHelper gcalHelper,
|
|
||||||
Preferences preferences,
|
|
||||||
TagDataDaoBlocking tagDataDao,
|
|
||||||
TaskDaoBlocking taskDao,
|
|
||||||
TagDaoBlocking tagDao,
|
|
||||||
GoogleTaskDaoBlocking googleTaskDao,
|
|
||||||
DefaultFilterProvider defaultFilterProvider,
|
|
||||||
CaldavDaoBlocking caldavDao,
|
|
||||||
LocationDaoBlocking locationDao) {
|
|
||||||
this.gcalHelper = gcalHelper;
|
|
||||||
this.preferences = preferences;
|
|
||||||
this.tagDataDao = tagDataDao;
|
|
||||||
this.taskDao = taskDao;
|
|
||||||
this.tagDao = tagDao;
|
|
||||||
this.googleTaskDao = googleTaskDao;
|
|
||||||
this.defaultFilterProvider = defaultFilterProvider;
|
|
||||||
this.caldavDao = caldavDao;
|
|
||||||
this.locationDao = locationDao;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setDefaultReminders(Preferences preferences, Task task) {
|
|
||||||
task.setReminderPeriod(
|
|
||||||
DateUtilities.ONE_HOUR
|
|
||||||
* preferences.getIntegerFromString(R.string.p_rmd_default_random_hours, 0));
|
|
||||||
task.setReminderFlags(preferences.getDefaultReminders() | preferences.getDefaultRingMode());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task basicQuickAddTask(String title) {
|
|
||||||
title = title.trim();
|
|
||||||
|
|
||||||
Task task = createWithValues(title);
|
|
||||||
taskDao.createNew(task);
|
|
||||||
|
|
||||||
boolean gcalCreateEventEnabled =
|
|
||||||
preferences.isDefaultCalendarSet() && task.hasDueDate(); // $NON-NLS-1$
|
|
||||||
if (!isNullOrEmpty(task.getTitle())
|
|
||||||
&& gcalCreateEventEnabled
|
|
||||||
&& isNullOrEmpty(task.getCalendarURI())) {
|
|
||||||
Uri calendarUri = gcalHelper.createTaskEvent(task, preferences.getDefaultCalendar());
|
|
||||||
task.setCalendarURI(calendarUri.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
createTags(task);
|
|
||||||
|
|
||||||
boolean addToTop = preferences.addTasksToTop();
|
|
||||||
if (task.hasTransitory(GoogleTask.KEY)) {
|
|
||||||
googleTaskDao.insertAndShift(
|
|
||||||
new GoogleTask(task.getId(), task.getTransitory(GoogleTask.KEY)), addToTop);
|
|
||||||
} else if (task.hasTransitory(CaldavTask.KEY)) {
|
|
||||||
caldavDao.insert(
|
|
||||||
task, new CaldavTask(task.getId(), task.getTransitory(CaldavTask.KEY)), addToTop);
|
|
||||||
} else {
|
|
||||||
Filter remoteList = defaultFilterProvider.getDefaultList();
|
|
||||||
if (remoteList instanceof GtasksFilter) {
|
|
||||||
googleTaskDao.insertAndShift(
|
|
||||||
new GoogleTask(task.getId(), ((GtasksFilter) remoteList).getRemoteId()), addToTop);
|
|
||||||
} else if (remoteList instanceof CaldavFilter) {
|
|
||||||
caldavDao.insert(
|
|
||||||
task, new CaldavTask(task.getId(), ((CaldavFilter) remoteList).getUuid()), addToTop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (task.hasTransitory(Place.KEY)) {
|
|
||||||
Place place = locationDao.getPlace(task.getTransitory(Place.KEY));
|
|
||||||
if (place != null) {
|
|
||||||
locationDao.insert(new Geofence(place.getUid(), preferences));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
taskDao.save(task, null);
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task createWithValues(String title) {
|
|
||||||
return create(null, title);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task createWithValues(Filter filter, String title) {
|
|
||||||
return create(filter == null ? null : filter.valuesForNewTasks, title);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Create task from the given content values, saving it. This version doesn't need to start with a
|
|
||||||
* base task model.
|
|
||||||
*/
|
|
||||||
private Task create(@Nullable Map<String, Object> values, String title) {
|
|
||||||
Task task = new Task();
|
|
||||||
task.setCreationDate(now());
|
|
||||||
task.setModificationDate(now());
|
|
||||||
if (title != null) {
|
|
||||||
task.setTitle(title.trim());
|
|
||||||
}
|
|
||||||
|
|
||||||
task.setUuid(newUUID());
|
|
||||||
|
|
||||||
task.setPriority(preferences.getDefaultPriority());
|
|
||||||
task.setDueDate(
|
|
||||||
Task.createDueDate(
|
|
||||||
preferences.getIntegerFromString(R.string.p_default_urgency_key, Task.URGENCY_NONE),
|
|
||||||
0));
|
|
||||||
int setting =
|
|
||||||
preferences.getIntegerFromString(R.string.p_default_hideUntil_key, Task.HIDE_UNTIL_NONE);
|
|
||||||
task.setHideUntil(task.createHideUntil(setting, 0));
|
|
||||||
setDefaultReminders(preferences, task);
|
|
||||||
|
|
||||||
ArrayList<String> tags = new ArrayList<>();
|
|
||||||
|
|
||||||
if (values != null && values.size() > 0) {
|
|
||||||
for (Map.Entry<String, Object> item : values.entrySet()) {
|
|
||||||
String key = item.getKey();
|
|
||||||
Object value = item.getValue();
|
|
||||||
switch (key) {
|
|
||||||
case Tag.KEY:
|
|
||||||
tags.add((String) value);
|
|
||||||
break;
|
|
||||||
case GoogleTask.KEY:
|
|
||||||
case CaldavTask.KEY:
|
|
||||||
case Place.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.setPriority(Integer.valueOf((String) value));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
TitleParser.parse(tagDataDao, task, tags);
|
|
||||||
} catch (Throwable e) {
|
|
||||||
Timber.e(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
task.setTags(tags);
|
|
||||||
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createTags(Task task) {
|
|
||||||
for (String tag : task.getTags()) {
|
|
||||||
TagData tagData = tagDataDao.getTagByName(tag);
|
|
||||||
if (tagData == null) {
|
|
||||||
tagData = new TagData();
|
|
||||||
tagData.setName(tag);
|
|
||||||
tagDataDao.createNew(tagData);
|
|
||||||
}
|
|
||||||
tagDao.insert(new Tag(task, tagData));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,150 @@
|
|||||||
|
package com.todoroo.astrid.service
|
||||||
|
|
||||||
|
import com.todoroo.andlib.utility.DateUtilities
|
||||||
|
import com.todoroo.astrid.api.CaldavFilter
|
||||||
|
import com.todoroo.astrid.api.Filter
|
||||||
|
import com.todoroo.astrid.api.GtasksFilter
|
||||||
|
import com.todoroo.astrid.api.PermaSql
|
||||||
|
import com.todoroo.astrid.dao.TaskDaoBlocking
|
||||||
|
import com.todoroo.astrid.data.Task
|
||||||
|
import com.todoroo.astrid.data.Task.Companion.createDueDate
|
||||||
|
import com.todoroo.astrid.gcal.GCalHelper
|
||||||
|
import com.todoroo.astrid.helper.UUIDHelper
|
||||||
|
import com.todoroo.astrid.utility.TitleParser.parse
|
||||||
|
import org.tasks.R
|
||||||
|
import org.tasks.Strings.isNullOrEmpty
|
||||||
|
import org.tasks.data.*
|
||||||
|
import org.tasks.preferences.DefaultFilterProvider
|
||||||
|
import org.tasks.preferences.Preferences
|
||||||
|
import timber.log.Timber
|
||||||
|
import java.util.*
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class TaskCreator @Inject constructor(
|
||||||
|
private val gcalHelper: GCalHelper,
|
||||||
|
private val preferences: Preferences,
|
||||||
|
private val tagDataDao: TagDataDaoBlocking,
|
||||||
|
private val taskDao: TaskDaoBlocking,
|
||||||
|
private val tagDao: TagDaoBlocking,
|
||||||
|
private val googleTaskDao: GoogleTaskDaoBlocking,
|
||||||
|
private val defaultFilterProvider: DefaultFilterProvider,
|
||||||
|
private val caldavDao: CaldavDaoBlocking,
|
||||||
|
private val locationDao: LocationDaoBlocking) {
|
||||||
|
fun basicQuickAddTask(title: String): Task {
|
||||||
|
var title = title
|
||||||
|
title = title.trim { it <= ' ' }
|
||||||
|
val task = createWithValues(title)
|
||||||
|
taskDao.createNew(task)
|
||||||
|
val gcalCreateEventEnabled = preferences.isDefaultCalendarSet && task.hasDueDate() // $NON-NLS-1$
|
||||||
|
if (!isNullOrEmpty(task.title)
|
||||||
|
&& gcalCreateEventEnabled
|
||||||
|
&& isNullOrEmpty(task.calendarURI)) {
|
||||||
|
val calendarUri = gcalHelper.createTaskEvent(task, preferences.defaultCalendar)
|
||||||
|
task.calendarURI = calendarUri.toString()
|
||||||
|
}
|
||||||
|
createTags(task)
|
||||||
|
val addToTop = preferences.addTasksToTop()
|
||||||
|
if (task.hasTransitory(GoogleTask.KEY)) {
|
||||||
|
googleTaskDao.insertAndShift(
|
||||||
|
GoogleTask(task.id, task.getTransitory<String>(GoogleTask.KEY)!!), addToTop)
|
||||||
|
} else if (task.hasTransitory(CaldavTask.KEY)) {
|
||||||
|
caldavDao.insert(
|
||||||
|
task, CaldavTask(task.id, task.getTransitory<String>(CaldavTask.KEY)), addToTop)
|
||||||
|
} else {
|
||||||
|
val remoteList = defaultFilterProvider.defaultList
|
||||||
|
if (remoteList is GtasksFilter) {
|
||||||
|
googleTaskDao.insertAndShift(
|
||||||
|
GoogleTask(task.id, remoteList.remoteId), addToTop)
|
||||||
|
} else if (remoteList is CaldavFilter) {
|
||||||
|
caldavDao.insert(
|
||||||
|
task, CaldavTask(task.id, remoteList.uuid), addToTop)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (task.hasTransitory(Place.KEY)) {
|
||||||
|
val place = locationDao.getPlace(task.getTransitory<String>(Place.KEY)!!)
|
||||||
|
if (place != null) {
|
||||||
|
locationDao.insert(Geofence(place.uid, preferences))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taskDao.save(task, null)
|
||||||
|
return task
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createWithValues(title: String?): Task {
|
||||||
|
return create(null, title)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createWithValues(filter: Filter?, title: String?): Task {
|
||||||
|
return create(filter?.valuesForNewTasks, title)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create task from the given content values, saving it. This version doesn't need to start with a
|
||||||
|
* base task model.
|
||||||
|
*/
|
||||||
|
private fun create(values: Map<String, Any>?, title: String?): Task {
|
||||||
|
val task = Task()
|
||||||
|
task.creationDate = DateUtilities.now()
|
||||||
|
task.modificationDate = DateUtilities.now()
|
||||||
|
if (title != null) {
|
||||||
|
task.title = title.trim { it <= ' ' }
|
||||||
|
}
|
||||||
|
task.uuid = UUIDHelper.newUUID()
|
||||||
|
task.priority = preferences.defaultPriority
|
||||||
|
task.dueDate = createDueDate(
|
||||||
|
preferences.getIntegerFromString(R.string.p_default_urgency_key, Task.URGENCY_NONE),
|
||||||
|
0)
|
||||||
|
val setting = preferences.getIntegerFromString(R.string.p_default_hideUntil_key, Task.HIDE_UNTIL_NONE)
|
||||||
|
task.hideUntil = task.createHideUntil(setting, 0)
|
||||||
|
setDefaultReminders(preferences, task)
|
||||||
|
val tags = ArrayList<String>()
|
||||||
|
if (values != null && values.isNotEmpty()) {
|
||||||
|
for (item in values.entries) {
|
||||||
|
val key = item.key
|
||||||
|
var value: Any? = item.value
|
||||||
|
when (key) {
|
||||||
|
Tag.KEY -> tags.add(value as String)
|
||||||
|
GoogleTask.KEY, CaldavTask.KEY, Place.KEY -> task.putTransitory(key, value!!)
|
||||||
|
else -> {
|
||||||
|
if (value is String) {
|
||||||
|
value = PermaSql.replacePlaceholdersForNewTask(value as String?)
|
||||||
|
}
|
||||||
|
when (key) {
|
||||||
|
"dueDate" -> task.dueDate = java.lang.Long.valueOf((value as String?)!!)
|
||||||
|
"importance" -> task.priority = Integer.valueOf((value as String?)!!)
|
||||||
|
else -> {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
parse(tagDataDao, task, tags)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Timber.e(e)
|
||||||
|
}
|
||||||
|
task.setTags(tags)
|
||||||
|
return task
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createTags(task: Task) {
|
||||||
|
for (tag in task.tags) {
|
||||||
|
var tagData = tagDataDao.getTagByName(tag)
|
||||||
|
if (tagData == null) {
|
||||||
|
tagData = TagData()
|
||||||
|
tagData.name = tag
|
||||||
|
tagDataDao.createNew(tagData)
|
||||||
|
}
|
||||||
|
tagDao.insert(Tag(task, tagData))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private fun setDefaultReminders(preferences: Preferences, task: Task) {
|
||||||
|
task.reminderPeriod = (DateUtilities.ONE_HOUR
|
||||||
|
* preferences.getIntegerFromString(R.string.p_rmd_default_random_hours, 0))
|
||||||
|
task.reminderFlags = preferences.defaultReminders or preferences.defaultRingMode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue