mirror of https://github.com/tasks/tasks
Convert TaskDuplicator to Kotlin
parent
c825bfe94a
commit
41f7d1da6b
@ -1,117 +0,0 @@
|
||||
package com.todoroo.astrid.service;
|
||||
|
||||
import static com.google.common.collect.Lists.transform;
|
||||
import static com.todoroo.andlib.utility.DateUtilities.now;
|
||||
import static com.todoroo.astrid.data.Task.NO_UUID;
|
||||
|
||||
import com.todoroo.astrid.dao.TaskDaoBlocking;
|
||||
import com.todoroo.astrid.data.Task;
|
||||
import com.todoroo.astrid.gcal.GCalHelper;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.inject.Inject;
|
||||
import org.tasks.LocalBroadcastManager;
|
||||
import org.tasks.data.Alarm;
|
||||
import org.tasks.data.AlarmDaoBlocking;
|
||||
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.Tag;
|
||||
import org.tasks.data.TagDaoBlocking;
|
||||
import org.tasks.data.TagData;
|
||||
import org.tasks.data.TagDataDaoBlocking;
|
||||
import org.tasks.preferences.Preferences;
|
||||
|
||||
public class TaskDuplicator {
|
||||
|
||||
private final GCalHelper gcalHelper;
|
||||
private final TaskDaoBlocking taskDao;
|
||||
private final TagDaoBlocking tagDao;
|
||||
private final TagDataDaoBlocking tagDataDao;
|
||||
private final GoogleTaskDaoBlocking googleTaskDao;
|
||||
private final CaldavDaoBlocking caldavDao;
|
||||
private final LocationDaoBlocking locationDao;
|
||||
private final AlarmDaoBlocking alarmDao;
|
||||
private final Preferences preferences;
|
||||
private final LocalBroadcastManager localBroadcastManager;
|
||||
|
||||
@Inject
|
||||
public TaskDuplicator(
|
||||
GCalHelper gcalHelper,
|
||||
TaskDaoBlocking taskDao,
|
||||
LocalBroadcastManager localBroadcastManager,
|
||||
TagDaoBlocking tagDao,
|
||||
TagDataDaoBlocking tagDataDao,
|
||||
GoogleTaskDaoBlocking googleTaskDao,
|
||||
CaldavDaoBlocking caldavDao,
|
||||
LocationDaoBlocking locationDao,
|
||||
AlarmDaoBlocking alarmDao,
|
||||
Preferences preferences) {
|
||||
this.gcalHelper = gcalHelper;
|
||||
this.taskDao = taskDao;
|
||||
this.localBroadcastManager = localBroadcastManager;
|
||||
this.tagDao = tagDao;
|
||||
this.tagDataDao = tagDataDao;
|
||||
this.googleTaskDao = googleTaskDao;
|
||||
this.caldavDao = caldavDao;
|
||||
this.locationDao = locationDao;
|
||||
this.alarmDao = alarmDao;
|
||||
this.preferences = preferences;
|
||||
}
|
||||
|
||||
public List<Task> duplicate(List<Long> taskIds) {
|
||||
List<Task> result = new ArrayList<>();
|
||||
for (Task task : taskDao.fetch(taskIds)) {
|
||||
result.add(clone(task));
|
||||
}
|
||||
localBroadcastManager.broadcastRefresh();
|
||||
return result;
|
||||
}
|
||||
|
||||
private Task clone(Task clone) {
|
||||
long originalId = clone.getId();
|
||||
clone.setCreationDate(now());
|
||||
clone.setModificationDate(now());
|
||||
clone.setCompletionDate(0L);
|
||||
clone.setCalendarURI("");
|
||||
clone.setUuid(NO_UUID);
|
||||
clone.suppressSync();
|
||||
clone.suppressRefresh();
|
||||
taskDao.createNew(clone);
|
||||
|
||||
List<TagData> tags = tagDataDao.getTagDataForTask(originalId);
|
||||
if (!tags.isEmpty()) {
|
||||
tagDao.insert(transform(tags, td -> new Tag(clone, td)));
|
||||
}
|
||||
|
||||
GoogleTask googleTask = googleTaskDao.getByTaskId(originalId);
|
||||
boolean addToTop = preferences.addTasksToTop();
|
||||
if (googleTask != null) {
|
||||
googleTaskDao.insertAndShift(new GoogleTask(clone.getId(), googleTask.getListId()), addToTop);
|
||||
}
|
||||
|
||||
CaldavTask caldavTask = caldavDao.getTask(originalId);
|
||||
if (caldavTask != null) {
|
||||
caldavDao.insert(clone, new CaldavTask(clone.getId(), caldavTask.getCalendar()), addToTop);
|
||||
}
|
||||
|
||||
for (Geofence g : locationDao.getGeofencesForTask(originalId)) {
|
||||
locationDao.insert(
|
||||
new Geofence(clone.getId(), g.getPlace(), g.isArrival(), g.isDeparture(), g.getRadius()));
|
||||
}
|
||||
|
||||
List<Alarm> alarms = alarmDao.getAlarms(originalId);
|
||||
if (!alarms.isEmpty()) {
|
||||
alarmDao.insert(transform(alarms, a -> new Alarm(clone.getId(), a.getTime())));
|
||||
}
|
||||
|
||||
gcalHelper.createTaskEventIfEnabled(clone);
|
||||
|
||||
taskDao.save(clone, null); // TODO: delete me
|
||||
|
||||
return clone;
|
||||
}
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
package com.todoroo.astrid.service
|
||||
|
||||
import com.google.common.collect.Lists
|
||||
import com.todoroo.andlib.utility.DateUtilities
|
||||
import com.todoroo.astrid.dao.TaskDao
|
||||
import com.todoroo.astrid.data.Task
|
||||
import com.todoroo.astrid.gcal.GCalHelper
|
||||
import org.tasks.LocalBroadcastManager
|
||||
import org.tasks.data.*
|
||||
import org.tasks.preferences.Preferences
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class TaskDuplicator @Inject constructor(
|
||||
private val gcalHelper: GCalHelper,
|
||||
private val taskDao: TaskDao,
|
||||
private val localBroadcastManager: LocalBroadcastManager,
|
||||
private val tagDao: TagDao,
|
||||
private val tagDataDao: TagDataDao,
|
||||
private val googleTaskDao: GoogleTaskDao,
|
||||
private val caldavDao: CaldavDao,
|
||||
private val locationDao: LocationDao,
|
||||
private val alarmDao: AlarmDao,
|
||||
private val preferences: Preferences) {
|
||||
|
||||
suspend fun duplicate(taskIds: List<Long>): List<Task> {
|
||||
val result: MutableList<Task> = ArrayList()
|
||||
for (task in taskDao.fetch(taskIds)) {
|
||||
result.add(clone(task))
|
||||
}
|
||||
localBroadcastManager.broadcastRefresh()
|
||||
return result
|
||||
}
|
||||
|
||||
private suspend fun clone(clone: Task): Task {
|
||||
val originalId = clone.id
|
||||
clone.creationDate = DateUtilities.now()
|
||||
clone.modificationDate = DateUtilities.now()
|
||||
clone.completionDate = 0L
|
||||
clone.calendarURI = ""
|
||||
clone.uuid = Task.NO_UUID
|
||||
clone.suppressSync()
|
||||
clone.suppressRefresh()
|
||||
taskDao.createNew(clone)
|
||||
val tags = tagDataDao.getTagDataForTask(originalId)
|
||||
if (tags.isNotEmpty()) {
|
||||
tagDao.insert(Lists.transform(tags) { td: TagData? -> Tag(clone, td!!) })
|
||||
}
|
||||
val googleTask = googleTaskDao.getByTaskId(originalId)
|
||||
val addToTop = preferences.addTasksToTop()
|
||||
if (googleTask != null) {
|
||||
googleTaskDao.insertAndShift(GoogleTask(clone.id, googleTask.listId!!), addToTop)
|
||||
}
|
||||
val caldavTask = caldavDao.getTask(originalId)
|
||||
if (caldavTask != null) {
|
||||
caldavDao.insert(clone, CaldavTask(clone.id, caldavTask.calendar), addToTop)
|
||||
}
|
||||
for (g in locationDao.getGeofencesForTask(originalId)) {
|
||||
locationDao.insert(
|
||||
Geofence(clone.id, g.place, g.isArrival, g.isDeparture, g.radius))
|
||||
}
|
||||
val alarms = alarmDao.getAlarms(originalId)
|
||||
if (alarms.isNotEmpty()) {
|
||||
alarmDao.insert(Lists.transform(alarms) { a: Alarm? -> Alarm(clone.id, a!!.time) })
|
||||
}
|
||||
gcalHelper.createTaskEventIfEnabled(clone)
|
||||
taskDao.save(clone, null) // TODO: delete me
|
||||
return clone
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue