Synchronize RELATED_TO field

pull/848/head^2
Chris Heywood 6 years ago committed by Alex Baker
parent e68b49942a
commit 05f385db7d

@ -5,20 +5,27 @@ import static com.todoroo.astrid.data.Task.URGENCY_SPECIFIC_DAY;
import static com.todoroo.astrid.data.Task.URGENCY_SPECIFIC_DAY_TIME; import static com.todoroo.astrid.data.Task.URGENCY_SPECIFIC_DAY_TIME;
import static org.tasks.date.DateTimeUtils.newDateTime; import static org.tasks.date.DateTimeUtils.newDateTime;
import com.google.common.base.Optional;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Task.Priority; import com.todoroo.astrid.data.Task.Priority;
import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import java.net.URISyntaxException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.Locale; import java.util.Locale;
import net.fortuna.ical4j.model.Date; import net.fortuna.ical4j.model.Date;
import net.fortuna.ical4j.model.DateTime; import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.Recur; import net.fortuna.ical4j.model.Recur;
import net.fortuna.ical4j.model.property.Completed; import net.fortuna.ical4j.model.property.Completed;
import net.fortuna.ical4j.model.property.Due; import net.fortuna.ical4j.model.property.Due;
import net.fortuna.ical4j.model.property.RRule; import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.model.property.RelatedTo;
import net.fortuna.ical4j.model.property.Status; import net.fortuna.ical4j.model.property.Status;
import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTask;
import timber.log.Timber; import timber.log.Timber;
@ -152,6 +159,24 @@ public class CaldavConverter {
} }
remote.setLastModified(newDateTime(task.getModificationDate()).toUTC().getMillis()); remote.setLastModified(newDateTime(task.getModificationDate()).toUTC().getMillis());
remote.setPriority(toRemote(remote.getPriority(), task.getPriority())); remote.setPriority(toRemote(remote.getPriority(), task.getPriority()));
LinkedList<Property> unknownProperties = remote.getUnknownProperties();
Optional<Property> relatedTo =
Iterables.tryFind(unknownProperties, p -> Property.RELATED_TO.equals(p.getName()));
if (caldavTask.getParent() == 0) {
if (relatedTo.isPresent()) {
unknownProperties.remove(relatedTo.get());
}
} else if (relatedTo.isPresent()) {
try {
relatedTo.get().setValue(caldavTask.getRemoteParent());
} catch (IOException | URISyntaxException | ParseException e) {
Timber.e(e);
}
} else {
unknownProperties.add(new RelatedTo(caldavTask.getRemoteParent()));
}
return remote; return remote;
} }
} }

@ -42,6 +42,7 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import javax.net.ssl.SSLException; import javax.net.ssl.SSLException;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.property.ProdId; import net.fortuna.ical4j.model.property.ProdId;
import okhttp3.HttpUrl; import okhttp3.HttpUrl;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
@ -252,6 +253,8 @@ public class CaldavSynchronizer {
Timber.d("UPDATE %s", caldavCalendar); Timber.d("UPDATE %s", caldavCalendar);
caldavDao.update(caldavCalendar); caldavDao.update(caldavCalendar);
caldavDao.updateParents(caldavCalendar.getUuid());
localBroadcastManager.broadcastRefresh(); localBroadcastManager.broadcastRefresh();
} }
@ -372,6 +375,15 @@ public class CaldavSynchronizer {
caldavTask.setVtodo(vtodo); caldavTask.setVtodo(vtodo);
caldavTask.setEtag(eTag); caldavTask.setEtag(eTag);
caldavTask.setLastSync(DateUtilities.now() + 1000L); 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());
}
}
if (caldavTask.getId() == Task.NO_ID) { if (caldavTask.getId() == Task.NO_ID) {
caldavTask.setId(caldavDao.insert(caldavTask)); caldavTask.setId(caldavDao.insert(caldavTask));
Timber.d("NEW %s", caldavTask); Timber.d("NEW %s", caldavTask);

@ -111,6 +111,9 @@ public interface CaldavDao {
+ "GROUP BY tasks._id") + "GROUP BY tasks._id")
List<Long> getTasksWithTags(); List<Long> getTasksWithTags();
@Query("UPDATE caldav_tasks SET cd_parent = IFNULL((SELECT cd_task FROM caldav_tasks AS p WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent), cd_parent) WHERE cd_calendar = :calendar AND cd_remote_parent IS NOT NULL and cd_remote_parent != ''")
void updateParents(String calendar);
@Query("WITH RECURSIVE " @Query("WITH RECURSIVE "
+ " recursive_caldav (cd_task) AS ( " + " recursive_caldav (cd_task) AS ( "
+ " SELECT cd_task " + " SELECT cd_task "

Loading…
Cancel
Save