Fix moved or deleted task synchronization

pull/898/head
Alex Baker 6 years ago
parent 8b920ae50b
commit 243277b7fe

@ -103,7 +103,8 @@ public abstract class CaldavDao {
"SELECT task.*, caldav_task.* FROM tasks AS task " "SELECT task.*, caldav_task.* FROM tasks AS task "
+ "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task " + "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task "
+ "WHERE cd_calendar = :calendar " + "WHERE cd_calendar = :calendar "
+ "AND modified > cd_last_sync") + "AND modified > cd_last_sync "
+ "AND cd_deleted = 0")
public abstract List<CaldavTaskContainer> getCaldavTasksToPush(String calendar); public abstract List<CaldavTaskContainer> getCaldavTasksToPush(String calendar);
@Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE") @Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE")

@ -1,7 +1,6 @@
package org.tasks.data; package org.tasks.data;
import androidx.room.Embedded; import androidx.room.Embedded;
import com.google.common.base.Strings;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
public class CaldavTaskContainer { public class CaldavTaskContainer {
@ -24,7 +23,12 @@ public class CaldavTaskContainer {
return task.isDeleted(); return task.isDeleted();
} }
public boolean isNew() { public String getVtodo() {
return Strings.isNullOrEmpty(caldavTask.getVtodo()); return caldavTask.getVtodo();
}
@Override
public String toString() {
return "CaldavTaskContainer{" + "task=" + task + ", caldavTask=" + caldavTask + '}';
} }
} }

@ -193,10 +193,23 @@ public class EteSynchronizer {
List<SyncEntry> changes = new ArrayList<>(); List<SyncEntry> changes = new ArrayList<>();
for (CaldavTask task : caldavDao.getDeleted(caldavCalendar.getUuid())) { for (CaldavTask task : caldavDao.getDeleted(caldavCalendar.getUuid())) {
changes.add(new SyncEntry(task.getVtodo(), Actions.DELETE)); String vtodo = task.getVtodo();
if (!Strings.isNullOrEmpty(vtodo)) {
changes.add(new SyncEntry(vtodo, Actions.DELETE));
} }
}
for (CaldavTaskContainer task : localChanges.values()) { for (CaldavTaskContainer task : localChanges.values()) {
changes.add(new SyncEntry(getVtodo(task), task.isNew() ? Actions.ADD : Actions.CHANGE)); String vtodo = task.getVtodo();
boolean existingTask = !Strings.isNullOrEmpty(vtodo);
if (task.isDeleted()) {
if (existingTask) {
changes.add(new SyncEntry(vtodo, Actions.DELETE));
}
} else {
changes.add(new SyncEntry(getVtodo(task), existingTask ? Actions.CHANGE : Actions.ADD));
}
} }
remoteCtag = caldavCalendar.getCtag(); remoteCtag = caldavCalendar.getCtag();
@ -211,10 +224,12 @@ public class EteSynchronizer {
updates.add(Pair.create(entry, syncEntry)); updates.add(Pair.create(entry, syncEntry));
previous = entry; previous = entry;
} }
if (updates.size() > 0) {
Timber.v("Pushing local changes"); Timber.v("Pushing local changes");
client.pushEntries(journal, from(updates).transform(p -> p.first).toList(), remoteCtag); client.pushEntries(journal, from(updates).transform(p -> p.first).toList(), remoteCtag);
Timber.v("Applying local changes"); Timber.v("Applying local changes");
applyEntries(caldavCalendar, updates, emptySet()); applyEntries(caldavCalendar, updates, emptySet());
}
Timber.d("UPDATE %s", caldavCalendar); Timber.d("UPDATE %s", caldavCalendar);

Loading…
Cancel
Save