Load existing caldav subtasks on upgrade

gtask_related_email
Alex Baker 6 years ago
parent e1efcd3e9c
commit 1bfd8e0c47

@ -1,6 +1,10 @@
package com.todoroo.astrid.service;
import static com.google.common.base.Strings.isNullOrEmpty;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Sets.newHashSet;
import static org.tasks.caldav.CaldavUtils.applyRelatedTo;
import static org.tasks.db.DbUtils.batch;
import android.os.Environment;
@ -19,6 +23,7 @@ import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.caldav.CaldavUtils;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask;
import org.tasks.data.CaldavTaskContainer;
import org.tasks.data.Filter;
import org.tasks.data.FilterDao;
@ -47,6 +52,7 @@ public class Upgrader {
private static final int V6_7 = 585;
private static final int V6_8_1 = 607;
private static final int V6_9 = 608;
private static final int V6_10 = 617;
private final Preferences preferences;
private final Tracker tracker;
private final TagDataDao tagDataDao;
@ -96,6 +102,7 @@ public class Upgrader {
run(from, V6_7, this::migrateGoogleTaskFilters);
run(from, V6_8_1, this::migrateCaldavFilters);
run(from, V6_9, this::applyCaldavCategories);
run(from, V6_10, this::applyCaldavSubtasks);
tracker.reportEvent(Tracking.Events.UPGRADE, Integer.toString(from));
}
preferences.setCurrentVersion(to);
@ -108,6 +115,27 @@ public class Upgrader {
}
}
private void applyCaldavSubtasks() {
List<CaldavTask> updated = newArrayList();
for (CaldavTask task : transform(caldavDao.getTasks(), CaldavTaskContainer::getCaldavTask)) {
at.bitfire.ical4android.Task remoteTask = CaldavUtils.fromVtodo(task.getVtodo());
if (remoteTask == null) {
continue;
}
applyRelatedTo(task, remoteTask);
if (!Strings.isNullOrEmpty(task.getRemoteParent())) {
updated.add(task);
}
}
caldavDao.update(updated);
for (String calendar : newHashSet(transform(updated, CaldavTask::getCalendar))) {
caldavDao.updateParents(calendar);
}
}
private void applyCaldavCategories() {
List<Long> tasksWithTags = caldavDao.getTasksWithTags();
for (CaldavTaskContainer container : caldavDao.getTasks()) {

@ -7,6 +7,7 @@ import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.transform;
import static com.google.common.collect.Sets.difference;
import static com.google.common.collect.Sets.newHashSet;
import static org.tasks.caldav.CaldavUtils.applyRelatedTo;
import static org.tasks.time.DateTimeUtils.currentTimeMillis;
import android.content.Context;
@ -42,7 +43,6 @@ import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import javax.net.ssl.SSLException;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.property.ProdId;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
@ -60,7 +60,6 @@ import org.tasks.data.TagDao;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.injection.ForApplication;
import retrofit2.http.HEAD;
import timber.log.Timber;
public class CaldavSynchronizer {
@ -377,13 +376,7 @@ public class CaldavSynchronizer {
caldavTask.setEtag(eTag);
caldavTask.setLastSync(DateUtilities.now() + 1000L);
// Process remote parents
LinkedList<Property> unknownProperties = remote.getUnknownProperties();
for (Property prop : unknownProperties) {
if (prop.getName().equals(Property.RELATED_TO)) {
caldavTask.setRemoteParent(prop.getValue());
}
}
applyRelatedTo(caldavTask, remote);
if (caldavTask.getId() == Task.NO_ID) {
caldavTask.setId(caldavDao.insert(caldavTask));
@ -393,5 +386,4 @@ public class CaldavSynchronizer {
Timber.d("UPDATE %s", caldavTask);
}
}
}

@ -9,6 +9,8 @@ import java.io.StringReader;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import net.fortuna.ical4j.model.Property;
import org.tasks.data.CaldavTask;
import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
@ -33,4 +35,12 @@ public class CaldavUtils {
}
return selectedTags;
}
public static void applyRelatedTo(CaldavTask caldavTask, at.bitfire.ical4android.Task remote) {
for (Property prop : remote.getUnknownProperties()) {
if (prop.getName().equals(Property.RELATED_TO)) {
caldavTask.setRemoteParent(prop.getValue());
}
}
}
}

@ -52,6 +52,9 @@ public abstract class CaldavDao {
@Update
public abstract void update(CaldavTask caldavTask);
@Update
public abstract void update(Iterable<CaldavTask> tasks);
@Delete
public abstract void delete(CaldavTask caldavTask);

@ -6,4 +6,8 @@ import com.todoroo.astrid.data.Task;
public class CaldavTaskContainer {
@Embedded public Task task;
@Embedded public CaldavTask caldavTask;
public CaldavTask getCaldavTask() {
return caldavTask;
}
}

Loading…
Cancel
Save