diff --git a/.gitmodules b/.gitmodules index c59c05c97..e69de29bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +0,0 @@ -[submodule "ical4android"] - path = ical4android - url = https://gitlab.com/tasks.org/ical4android.git -[submodule "dav4android"] - path = dav4jvm - url = https://gitlab.com/tasks.org/dav4jvm.git diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1e9bdd013..98942a245 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -11,6 +11,7 @@ plugins { repositories { jcenter() google() + maven(url = "https://jitpack.io") } android { @@ -127,10 +128,8 @@ val googleplayImplementation by configurations val amazonImplementation by configurations dependencies { - implementation(project(":dav4jvm")) { - exclude(group = "org.ogce", module = "xpp3") - } - implementation(project(":ical4android")) { + implementation("com.gitlab.bitfireAT:dav4jvm:d7c21fb481") + implementation("com.gitlab.bitfireAT:ical4android:1fcb759079") { exclude(group = "org.threeten", module = "threetenbp") } diff --git a/app/licenses.yml b/app/licenses.yml index f1ebbadb8..d651980b2 100644 --- a/app/licenses.yml +++ b/app/licenses.yml @@ -1,15 +1,13 @@ -- artifact: at.bitfire:dav4jvm:+ +- artifact: com.gitlab.bitfireAT:dav4jvm:+ name: dav4jvm copyrightHolder: bitfire web engineering (Ricki Hirner, Bernhard Stockmann) license: Mozilla Public License, Version 2.0 licenseUrl: https://www.mozilla.org/en-US/MPL/2.0/ - forceGenerate: true -- artifact: at.bitfire:ical4android:+ +- artifact: com.gitlab.bitfireAT:ical4android:+ name: ical4android copyrightHolder: bitfire web engineering (Ricki Hirner, Bernhard Stockmann) license: GNU General Public License, Version 3.0 licenseUrl: https://www.gnu.org/licenses/gpl.txt - forceGenerate: true - artifact: androidx.coordinatorlayout:coordinatorlayout:+ name: Android Support Library Coordinator Layout copyrightHolder: Android Open Source Project diff --git a/app/src/main/assets/licenses.json b/app/src/main/assets/licenses.json index cfa4ee4f7..ede1cb7e5 100644 --- a/app/src/main/assets/licenses.json +++ b/app/src/main/assets/licenses.json @@ -8,12 +8,12 @@ "licenseUrl": "https://www.mozilla.org/en-US/MPL/2.0/", "normalizedLicense": "mpl2", "year": null, - "url": null, + "url": "", "libraryName": "dav4jvm", "artifactId": { "name": "dav4jvm", - "group": "at.bitfire", - "version": "+" + "group": "com.gitlab.bitfireAT", + "version": "d7c21fb481" } }, { @@ -24,12 +24,12 @@ "licenseUrl": "https://www.gnu.org/licenses/gpl.txt", "normalizedLicense": "gpl3", "year": null, - "url": null, + "url": "", "libraryName": "ical4android", "artifactId": { "name": "ical4android", - "group": "at.bitfire", - "version": "+" + "group": "com.gitlab.bitfireAT", + "version": "1fcb759079" } }, { diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java index 9f51fe627..4a7f5979d 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java @@ -3,7 +3,7 @@ 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 org.tasks.caldav.CaldavUtils.applyRelatedTo; +import static org.tasks.caldav.CaldavUtils.getParent; import static org.tasks.db.DbUtils.batch; import android.os.Environment; @@ -122,7 +122,7 @@ public class Upgrader { if (remoteTask == null) { continue; } - applyRelatedTo(task, remoteTask); + task.setRemoteParent(getParent(remoteTask)); if (!Strings.isNullOrEmpty(task.getRemoteParent())) { updated.add(task); } diff --git a/app/src/main/java/org/tasks/caldav/CaldavConverter.java b/app/src/main/java/org/tasks/caldav/CaldavConverter.java index 57f31e38c..b31a611a4 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavConverter.java +++ b/app/src/main/java/org/tasks/caldav/CaldavConverter.java @@ -3,30 +3,24 @@ package org.tasks.caldav; import static com.todoroo.andlib.utility.DateUtilities.now; 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.caldav.CaldavUtils.fromVtodo; +import static org.tasks.caldav.CaldavUtils.setParent; 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.DtStart; 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; @@ -112,10 +106,7 @@ public class CaldavConverter { at.bitfire.ical4android.Task remote = null; try { if (!Strings.isNullOrEmpty(caldavTask.getVtodo())) { - remote = - at.bitfire.ical4android.Task.Companion.fromReader( - new StringReader(caldavTask.getVtodo())) - .get(0); + remote = fromVtodo(caldavTask.getVtodo()); } } catch (Exception e) { Timber.e(e); @@ -163,23 +154,7 @@ public class CaldavConverter { } remote.setLastModified(newDateTime(task.getModificationDate()).toUTC().getMillis()); remote.setPriority(toRemote(remote.getPriority(), task.getPriority())); - - LinkedList unknownProperties = remote.getUnknownProperties(); - Optional 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())); - } + setParent(remote, caldavTask.getParent() == 0 ? null : caldavTask.getRemoteParent()); return remote; } diff --git a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java index 120764644..0b36cfa1b 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java +++ b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java @@ -7,7 +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.caldav.CaldavUtils.getParent; import static org.tasks.time.DateTimeUtils.currentTimeMillis; import android.content.Context; @@ -375,8 +375,7 @@ public class CaldavSynchronizer { caldavTask.setVtodo(vtodo); caldavTask.setEtag(eTag); caldavTask.setLastSync(DateUtilities.now() + 1000L); - - applyRelatedTo(caldavTask, remote); + caldavTask.setRemoteParent(getParent(remote)); if (caldavTask.getId() == Task.NO_ID) { caldavTask.setId(caldavDao.insert(caldavTask)); diff --git a/app/src/main/java/org/tasks/caldav/CaldavUtils.java b/app/src/main/java/org/tasks/caldav/CaldavUtils.java index 1e8fdc979..aa965b346 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavUtils.java +++ b/app/src/main/java/org/tasks/caldav/CaldavUtils.java @@ -1,23 +1,33 @@ package org.tasks.caldav; +import static com.google.common.collect.Iterables.removeIf; +import static com.google.common.collect.Iterables.tryFind; 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 androidx.annotation.Nullable; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.base.Strings; import java.io.StringReader; import java.util.Collections; +import java.util.LinkedList; import java.util.List; import java.util.Set; -import net.fortuna.ical4j.model.Property; -import org.tasks.data.CaldavTask; +import net.fortuna.ical4j.model.Parameter; +import net.fortuna.ical4j.model.parameter.RelType; +import net.fortuna.ical4j.model.property.RelatedTo; import org.tasks.data.TagData; import org.tasks.data.TagDataDao; public class CaldavUtils { + private static final Predicate IS_PARENT = + r -> r.getParameters().isEmpty() || r.getParameter(Parameter.RELTYPE) == RelType.PARENT; + public static @Nullable at.bitfire.ical4android.Task fromVtodo(String vtodo) { List tasks = - at.bitfire.ical4android.Task.Companion.fromReader(new StringReader(vtodo)); + at.bitfire.ical4android.Task.Companion.tasksFromReader(new StringReader(vtodo)); return tasks.size() == 1 ? tasks.get(0) : null; } @@ -36,11 +46,23 @@ 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()); + public static void setParent(at.bitfire.ical4android.Task remote, @Nullable String value) { + LinkedList relatedTo = remote.getRelatedTo(); + if (Strings.isNullOrEmpty(value)) { + removeIf(relatedTo, IS_PARENT); + } else { + Optional parent = tryFind(relatedTo, IS_PARENT); + if (parent.isPresent()) { + parent.get().setValue(value); + } else { + relatedTo.add(new RelatedTo(value)); } } } + + public static @Nullable String getParent(at.bitfire.ical4android.Task remote) { + LinkedList relatedTo = remote.getRelatedTo(); + Optional parent = tryFind(relatedTo, IS_PARENT); + return parent.isPresent() ? parent.get().getValue() : null; + } } diff --git a/dav4jvm b/dav4jvm deleted file mode 160000 index 753df939c..000000000 --- a/dav4jvm +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 753df939cbfa821414240e5cea1afc0b4390b4a0 diff --git a/ical4android b/ical4android deleted file mode 160000 index 232477eca..000000000 --- a/ical4android +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 232477eca62684dfd35fe8ff20d505991fa21b30 diff --git a/settings.gradle.kts b/settings.gradle.kts index 0cbce0e38..7c438a013 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1 @@ -include("dav4jvm", "ical4android", "app") +include("app")