Synchronize RELATED_TO field

pull/848/head^2
Chris Heywood 5 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 org.tasks.date.DateTimeUtils.newDateTime;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.Task.Priority;
import java.io.IOException;
import java.io.StringReader;
import java.net.URISyntaxException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.Locale;
import net.fortuna.ical4j.model.Date;
import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.Recur;
import net.fortuna.ical4j.model.property.Completed;
import net.fortuna.ical4j.model.property.Due;
import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.model.property.RelatedTo;
import net.fortuna.ical4j.model.property.Status;
import org.tasks.data.CaldavTask;
import timber.log.Timber;
@ -152,6 +159,24 @@ public class CaldavConverter {
}
remote.setLastModified(newDateTime(task.getModificationDate()).toUTC().getMillis());
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;
}
}

@ -42,6 +42,7 @@ 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;
@ -252,6 +253,8 @@ public class CaldavSynchronizer {
Timber.d("UPDATE %s", caldavCalendar);
caldavDao.update(caldavCalendar);
caldavDao.updateParents(caldavCalendar.getUuid());
localBroadcastManager.broadcastRefresh();
}
@ -372,6 +375,15 @@ public class CaldavSynchronizer {
caldavTask.setVtodo(vtodo);
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());
}
}
if (caldavTask.getId() == Task.NO_ID) {
caldavTask.setId(caldavDao.insert(caldavTask));
Timber.d("NEW %s", caldavTask);

@ -111,6 +111,9 @@ public interface CaldavDao {
+ "GROUP BY tasks._id")
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 "
+ " recursive_caldav (cd_task) AS ( "
+ " SELECT cd_task "

Loading…
Cancel
Save