diff --git a/app/src/main/java/org/tasks/Tasks.kt b/app/src/main/java/org/tasks/Tasks.kt
index 4486ce7a4..21fe1e02c 100644
--- a/app/src/main/java/org/tasks/Tasks.kt
+++ b/app/src/main/java/org/tasks/Tasks.kt
@@ -19,6 +19,8 @@ import kotlinx.coroutines.launch
import org.tasks.billing.BillingClient
import org.tasks.billing.Inventory
import org.tasks.caldav.property.Invite
+import org.tasks.caldav.property.OCOwnerPrincipal
+import org.tasks.caldav.property.PropertyUtils.register
import org.tasks.caldav.property.ShareAccess
import org.tasks.files.FileHelper
import org.tasks.injection.InjectingJobIntentService
@@ -93,10 +95,11 @@ class Tasks : Application(), Configuration.Provider {
FileHelper.delete(context, preferences.cacheDirectory)
billingClient.get().queryPurchases()
appWidgetManager.get().reconfigureWidgets()
- PropertyRegistry.register(listOf(
+ PropertyRegistry.register(
ShareAccess.Factory(),
- Invite.Factory()
- ))
+ Invite.Factory(),
+ OCOwnerPrincipal.Factory(),
+ )
}
override fun getWorkManagerConfiguration(): Configuration = Configuration.Builder()
diff --git a/app/src/main/java/org/tasks/caldav/CaldavClient.kt b/app/src/main/java/org/tasks/caldav/CaldavClient.kt
index 495a974c2..75dc00ee4 100644
--- a/app/src/main/java/org/tasks/caldav/CaldavClient.kt
+++ b/app/src/main/java/org/tasks/caldav/CaldavClient.kt
@@ -20,6 +20,7 @@ import okhttp3.OkHttpClient
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.caldav.property.Invite
+import org.tasks.caldav.property.OCOwnerPrincipal
import org.tasks.caldav.property.ShareAccess
import org.tasks.data.CaldavAccount
import org.tasks.ui.DisplayableException
@@ -219,7 +220,8 @@ open class CaldavClient(
CalendarColor.NAME,
SyncToken.NAME,
ShareAccess.NAME,
- Invite.NAME
+ Invite.NAME,
+ OCOwnerPrincipal.NAME,
)
private suspend fun DavResource.propfind(
diff --git a/app/src/main/java/org/tasks/caldav/property/OCOwnerPrincipal.kt b/app/src/main/java/org/tasks/caldav/property/OCOwnerPrincipal.kt
new file mode 100644
index 000000000..5a3c158ab
--- /dev/null
+++ b/app/src/main/java/org/tasks/caldav/property/OCOwnerPrincipal.kt
@@ -0,0 +1,19 @@
+package org.tasks.caldav.property
+
+import at.bitfire.dav4jvm.Property
+import at.bitfire.dav4jvm.PropertyFactory
+import at.bitfire.dav4jvm.XmlUtils
+import org.xmlpull.v1.XmlPullParser
+
+data class OCOwnerPrincipal(val owner: String): Property {
+ companion object {
+ @JvmField
+ val NAME = Property.Name(PropertyUtils.NS_OWNCLOUD, "owner-principal")
+ }
+
+ class Factory: PropertyFactory {
+ override fun getName() = NAME
+ override fun create(parser: XmlPullParser): OCOwnerPrincipal? =
+ XmlUtils.readText(parser)?.let { OCOwnerPrincipal(it) }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/caldav/property/PropertyUtils.kt b/app/src/main/java/org/tasks/caldav/property/PropertyUtils.kt
new file mode 100644
index 000000000..67e9a837a
--- /dev/null
+++ b/app/src/main/java/org/tasks/caldav/property/PropertyUtils.kt
@@ -0,0 +1,10 @@
+package org.tasks.caldav.property
+
+import at.bitfire.dav4jvm.PropertyFactory
+import at.bitfire.dav4jvm.PropertyRegistry
+
+object PropertyUtils {
+ const val NS_OWNCLOUD = "http://owncloud.org/ns"
+
+ fun PropertyRegistry.register(vararg factories: PropertyFactory) = register(factories.toList())
+}
\ No newline at end of file
diff --git a/app/src/test/java/org/tasks/caldav/property/InviteTest.kt b/app/src/test/java/org/tasks/caldav/property/InviteTest.kt
index b69b15c33..8cfee4281 100644
--- a/app/src/test/java/org/tasks/caldav/property/InviteTest.kt
+++ b/app/src/test/java/org/tasks/caldav/property/InviteTest.kt
@@ -4,44 +4,33 @@ import at.bitfire.dav4jvm.PropertyRegistry
import org.junit.Assert.*
import org.junit.Before
import org.junit.Test
-import org.tasks.caldav.property.PropertyUtils.toProperty
+import org.tasks.caldav.property.PropertyUtils.register
import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER
+import org.tasks.caldav.property.TestPropertyUtils.toProperty
class InviteTest {
@Before
fun setUp() {
- PropertyRegistry.register(listOf(
- ShareAccess.Factory(),
- Invite.Factory()
- ))
+ PropertyRegistry.register(ShareAccess.Factory(), Invite.Factory())
}
@Test
- fun emptyInvite() {
- val invite: Invite = "".toProperty()
+ fun emptyInvite() = assertTrue("".toProperty().sharees.isEmpty())
- assertTrue(invite.sharees.isEmpty())
- }
+ @Test
+ fun shareeAccess() = assertEquals(ShareAccess(SHARED_OWNER), sharee(SHARE_OWNER).access)
@Test
- fun shareeAccess() {
- assertEquals(ShareAccess(SHARED_OWNER), sharee(SHARE_OWNER).access)
- }
+ fun shareeHref() = assertEquals("/principals/102967489186752069531", sharee(SHARE_OWNER).href)
@Test
- fun shareeHref() {
- assertEquals("/principals/102967489186752069531", sharee(SHARE_OWNER).href)
- }
+ fun inviteStatus() = assertEquals(Sharee.INVITE_ACCEPTED, sharee(SHARE_OWNER).response)
@Test
- fun inviteStatus() {
- assertEquals(Sharee.INVITE_ACCEPTED, sharee(SHARE_OWNER).response)
- }
+ fun noComment() = assertNull(sharee(SHARE_OWNER).comment)
@Test
- fun noComment() {
- assertNull(sharee(SHARE_OWNER).comment)
- }
+ fun noProperties() = assertTrue(sharee(SHARE_OWNER).properties.isEmpty())
private fun sharee(xml: String): Sharee = xml.toProperty().sharees.first()
diff --git a/app/src/test/java/org/tasks/caldav/property/OCOwnerPrincipalTest.kt b/app/src/test/java/org/tasks/caldav/property/OCOwnerPrincipalTest.kt
new file mode 100644
index 000000000..e0b3d90a5
--- /dev/null
+++ b/app/src/test/java/org/tasks/caldav/property/OCOwnerPrincipalTest.kt
@@ -0,0 +1,22 @@
+package org.tasks.caldav.property
+
+import at.bitfire.dav4jvm.PropertyRegistry
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+import org.tasks.caldav.property.TestPropertyUtils.toProperty
+
+class OCOwnerPrincipalTest {
+ @Before
+ fun setUp() {
+ PropertyRegistry.register(OCOwnerPrincipal.Factory())
+ }
+
+ @Test
+ fun ownerPrincipal() {
+ val owner = "principals/users/test"
+ .toProperty("oc='${PropertyUtils.NS_OWNCLOUD}'")
+
+ assertEquals("principals/users/test", owner.owner)
+ }
+}
\ No newline at end of file
diff --git a/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt b/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt
index 6828e4493..ee56c18b8 100644
--- a/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt
+++ b/app/src/test/java/org/tasks/caldav/property/ShareAccessTest.kt
@@ -4,7 +4,7 @@ import at.bitfire.dav4jvm.PropertyRegistry
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
-import org.tasks.caldav.property.PropertyUtils.toProperty
+import org.tasks.caldav.property.TestPropertyUtils.toProperty
import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER
class ShareAccessTest {
diff --git a/app/src/test/java/org/tasks/caldav/property/PropertyUtils.kt b/app/src/test/java/org/tasks/caldav/property/TestPropertyUtils.kt
similarity index 77%
rename from app/src/test/java/org/tasks/caldav/property/PropertyUtils.kt
rename to app/src/test/java/org/tasks/caldav/property/TestPropertyUtils.kt
index d798b40f9..ce8375d4e 100644
--- a/app/src/test/java/org/tasks/caldav/property/PropertyUtils.kt
+++ b/app/src/test/java/org/tasks/caldav/property/TestPropertyUtils.kt
@@ -4,9 +4,9 @@ import at.bitfire.dav4jvm.Property
import at.bitfire.dav4jvm.XmlUtils
import java.io.StringReader
-object PropertyUtils {
- fun String.toProperty(): T =
- toProperties()
+object TestPropertyUtils {
+ fun String.toProperty(ns: String = """d="DAV:""""): T =
+ toProperties(ns)
.apply { if (this.size != 1) throw IllegalStateException("${this.size} items") }
.first()
.let {
@@ -14,12 +14,12 @@ object PropertyUtils {
it as T
}
- fun String.toProperties(): List =
+ fun String.toProperties(ns: String = """d="DAV:""""): List =
XmlUtils.newPullParser()
.apply {
setInput(
StringReader("""
-
+
${this@toProperties}
""".trimIndent()