Add ShareAccess property

pull/1378/head
Alex Baker 3 years ago
parent 364d9bc3ca
commit c42b22ebe9

@ -234,6 +234,7 @@ dependencies {
testImplementation("com.natpryce:make-it-easy:${Versions.make_it_easy}")
testImplementation("androidx.test:core:${Versions.androidx_test}")
testImplementation("org.mockito:mockito-core:${Versions.mockito}")
testImplementation("org.ogce:xpp3:1.1.6")
}
apply(mapOf("plugin" to "com.google.gms.google-services"))

@ -8,6 +8,7 @@ import android.util.Log
import androidx.core.app.JobIntentService
import androidx.hilt.work.HiltWorkerFactory
import androidx.work.Configuration
import at.bitfire.dav4jvm.PropertyRegistry
import com.todoroo.astrid.service.Upgrader
import dagger.Lazy
import dagger.hilt.android.HiltAndroidApp
@ -17,6 +18,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.tasks.billing.BillingClient
import org.tasks.billing.Inventory
import org.tasks.caldav.property.ShareAccess
import org.tasks.files.FileHelper
import org.tasks.injection.InjectingJobIntentService
import org.tasks.jobs.WorkManager
@ -90,6 +92,9 @@ class Tasks : Application(), Configuration.Provider {
FileHelper.delete(context, preferences.cacheDirectory)
billingClient.get().queryPurchases()
appWidgetManager.get().reconfigureWidgets()
PropertyRegistry.register(listOf(
ShareAccess.Factory(),
))
}
override fun getWorkManagerConfiguration(): Configuration = Configuration.Builder()

@ -19,6 +19,7 @@ import okhttp3.HttpUrl
import okhttp3.OkHttpClient
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.caldav.property.ShareAccess
import org.tasks.data.CaldavAccount
import org.tasks.ui.DisplayableException
import org.xmlpull.v1.XmlPullParserException
@ -121,7 +122,9 @@ open class CaldavClient(
SupportedCalendarComponentSet.NAME,
GetCTag.NAME,
CalendarColor.NAME,
SyncToken.NAME) { response: Response, relation: HrefRelation ->
SyncToken.NAME,
ShareAccess.NAME,
) { response: Response, relation: HrefRelation ->
if (relation == HrefRelation.MEMBER) {
responses.add(response)
}

@ -0,0 +1,47 @@
package org.tasks.caldav.property
import at.bitfire.dav4jvm.Property
import at.bitfire.dav4jvm.PropertyFactory
import at.bitfire.dav4jvm.XmlUtils
import at.bitfire.dav4jvm.XmlUtils.propertyName
import org.tasks.BuildConfig
import org.xmlpull.v1.XmlPullParser
data class ShareAccess(val access: Property.Name): Property {
companion object {
@JvmField
val NAME = Property.Name(XmlUtils.NS_WEBDAV, "share-access")
val SHARED_OWNER = Property.Name(XmlUtils.NS_WEBDAV, "shared-owner")
val READ_WRITE = Property.Name(XmlUtils.NS_WEBDAV, "read-write")
val NOT_SHARED = Property.Name(XmlUtils.NS_WEBDAV, "not-shared")
val READ = Property.Name(XmlUtils.NS_WEBDAV, "read")
}
override fun toString(): String {
return "ShareAccess(access=$access)"
}
class Factory : PropertyFactory {
override fun getName() = NAME
override fun create(parser: XmlPullParser): ShareAccess? {
// <!ELEMENT share-access #PCDATA>
var result: Property.Name? = null
val depth = parser.depth
var eventType = parser.eventType
while (!(eventType == XmlPullParser.END_TAG && parser.depth == depth)) {
if (eventType == XmlPullParser.START_TAG && parser.depth == depth + 1) {
when (val name = parser.propertyName()) {
SHARED_OWNER, READ_WRITE, NOT_SHARED, READ -> result = name
}
}
eventType = parser.next()
}
if (BuildConfig.DEBUG && parser.depth != depth) { error("Assertion failed") }
return result?.let { ShareAccess(it) }
}
}
}

@ -0,0 +1,31 @@
package org.tasks.caldav.property
import at.bitfire.dav4jvm.Property
import at.bitfire.dav4jvm.XmlUtils
import java.io.StringReader
object PropertyUtils {
fun <T: Property> String.toProperty(): T =
toProperties()
.apply { if (this.size != 1) throw IllegalStateException("${this.size} items") }
.first()
.let {
@Suppress("UNCHECKED_CAST")
it as T
}
fun String.toProperties(): List<Property> =
XmlUtils.newPullParser()
.apply {
setInput(
StringReader("""
<test xmlns:d="DAV:">
${this@toProperties}
</test>
""".trimIndent()
)
)
nextTag()
}
.let { Property.parse(it) }
}

@ -0,0 +1,26 @@
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.PropertyUtils.toProperty
import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER
class ShareAccessTest {
@Before
fun setUp() {
PropertyRegistry.register(ShareAccess.Factory())
}
@Test
fun parseShareAccess() {
val access: ShareAccess = """
<d:share-access>
<d:shared-owner />
</d:share-access>
""".toProperty()
assertEquals(ShareAccess(SHARED_OWNER), access)
}
}
Loading…
Cancel
Save