Fix moved or deleted task synchronization

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

@ -103,7 +103,8 @@ public abstract class CaldavDao {
"SELECT task.*, caldav_task.* FROM tasks AS task "
+ "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task "
+ "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);
@Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE")

@ -1,7 +1,6 @@
package org.tasks.data;
import androidx.room.Embedded;
import com.google.common.base.Strings;
import com.todoroo.astrid.data.Task;
public class CaldavTaskContainer {
@ -24,7 +23,12 @@ public class CaldavTaskContainer {
return task.isDeleted();
}
public boolean isNew() {
return Strings.isNullOrEmpty(caldavTask.getVtodo());
public String 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<>();
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()) {
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();
@ -211,10 +224,12 @@ public class EteSynchronizer {
updates.add(Pair.create(entry, syncEntry));
previous = entry;
}
Timber.v("Pushing local changes");
client.pushEntries(journal, from(updates).transform(p -> p.first).toList(), remoteCtag);
Timber.v("Applying local changes");
applyEntries(caldavCalendar, updates, emptySet());
if (updates.size() > 0) {
Timber.v("Pushing local changes");
client.pushEntries(journal, from(updates).transform(p -> p.first).toList(), remoteCtag);
Timber.v("Applying local changes");
applyEntries(caldavCalendar, updates, emptySet());
}
Timber.d("UPDATE %s", caldavCalendar);

Loading…
Cancel
Save