|
|
|
@ -1,10 +1,12 @@
|
|
|
|
|
package com.todoroo.astrid.service;
|
|
|
|
|
|
|
|
|
|
import static com.google.common.collect.Lists.newArrayList;
|
|
|
|
|
import static com.todoroo.andlib.utility.DateUtilities.now;
|
|
|
|
|
import static java.util.Collections.singletonList;
|
|
|
|
|
|
|
|
|
|
import com.google.common.collect.Iterables;
|
|
|
|
|
import com.todoroo.astrid.dao.TaskDao;
|
|
|
|
|
import com.todoroo.astrid.data.Task;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import javax.inject.Inject;
|
|
|
|
|
import org.tasks.data.CaldavDao;
|
|
|
|
@ -35,17 +37,23 @@ public class TaskCompleter {
|
|
|
|
|
|
|
|
|
|
public void setComplete(Task item, boolean completed) {
|
|
|
|
|
long completionDate = completed ? now() : 0L;
|
|
|
|
|
setComplete(singletonList(item), completionDate);
|
|
|
|
|
setComplete(googleTaskDao.getChildTasks(item.getId()), completionDate);
|
|
|
|
|
setComplete(Collections.singletonList(item), completionDate);
|
|
|
|
|
List<Task> tasks = newArrayList(googleTaskDao.getChildTasks(item.getId()));
|
|
|
|
|
List<Long> caldavChildren = caldavDao.getChildren(item.getId());
|
|
|
|
|
if (!caldavChildren.isEmpty()) {
|
|
|
|
|
setComplete(taskDao.fetch(caldavChildren), completionDate);
|
|
|
|
|
tasks.addAll(taskDao.fetch(caldavChildren));
|
|
|
|
|
}
|
|
|
|
|
setComplete(
|
|
|
|
|
newArrayList(Iterables.filter(tasks, t -> t.isCompleted() != completed)), completionDate);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void setComplete(List<Task> tasks, long completionDate) {
|
|
|
|
|
for (Task task : tasks) {
|
|
|
|
|
for (int i = 0; i < tasks.size(); i++) {
|
|
|
|
|
Task task = tasks.get(i);
|
|
|
|
|
task.setCompletionDate(completionDate);
|
|
|
|
|
if (i < tasks.size() - 1) {
|
|
|
|
|
task.putTransitory(TaskDao.TRANS_SUPPRESS_REFRESH, true);
|
|
|
|
|
}
|
|
|
|
|
taskDao.save(task);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|