mirror of
https://github.com/bitfireAT/davx5-ose
synced 2024-10-07 03:42:59 +00:00
Provide owner url in jtx collection (bitfireAT/davx5#221)
* provide owner url in jtx collection * Updated contract, added owner displayname to collections sync * Update ical4android --------- Co-authored-by: Patrick Lang <72232737+patrickunterwegs@users.noreply.github.com>
This commit is contained in:
parent
54c6117ba2
commit
fe7a928064
|
@ -306,12 +306,12 @@ class RefreshCollectionsWorkerTest {
|
|||
)
|
||||
|
||||
// Refresh - homesets and their collections
|
||||
assertEquals(0, db.principalDao().get(service.id).size)
|
||||
assertEquals(0, db.principalDao().getByService(service.id).size)
|
||||
RefreshCollectionsWorker.Refresher(db, service, settings, client.okHttpClient)
|
||||
.refreshHomesetsAndTheirCollections()
|
||||
|
||||
// Check principal saved and the collection was updated with its reference
|
||||
val principals = db.principalDao().get(service.id)
|
||||
val principals = db.principalDao().getByService(service.id)
|
||||
assertEquals(1, principals.size)
|
||||
assertEquals(mockServer.url("$PATH_CARDDAV$SUBPATH_PRINCIPAL"), principals[0].url)
|
||||
assertEquals(null, principals[0].displayName)
|
||||
|
@ -401,12 +401,12 @@ class RefreshCollectionsWorkerTest {
|
|||
)
|
||||
|
||||
// Refresh homeless collections
|
||||
assertEquals(0, db.principalDao().get(service.id).size)
|
||||
assertEquals(0, db.principalDao().getByService(service.id).size)
|
||||
RefreshCollectionsWorker.Refresher(db, service, settings, client.okHttpClient)
|
||||
.refreshHomelessCollections()
|
||||
|
||||
// Check principal saved and the collection was updated with its reference
|
||||
val principals = db.principalDao().get(service.id)
|
||||
val principals = db.principalDao().getByService(service.id)
|
||||
assertEquals(1, principals.size)
|
||||
assertEquals(mockServer.url("$PATH_CARDDAV$SUBPATH_PRINCIPAL"), principals[0].url)
|
||||
assertEquals(null, principals[0].displayName)
|
||||
|
@ -449,7 +449,7 @@ class RefreshCollectionsWorkerTest {
|
|||
.refreshPrincipals()
|
||||
|
||||
// Check principal now got a display name
|
||||
val principals = db.principalDao().get(service.id)
|
||||
val principals = db.principalDao().getByService(service.id)
|
||||
assertEquals(1, principals.size)
|
||||
assertEquals(mockServer.url("$PATH_CARDDAV$SUBPATH_PRINCIPAL"), principals[0].url)
|
||||
assertEquals("Mr. Wobbles", principals[0].displayName)
|
||||
|
@ -473,7 +473,7 @@ class RefreshCollectionsWorkerTest {
|
|||
.refreshPrincipals()
|
||||
|
||||
// Check principal was deleted
|
||||
val principals = db.principalDao().get(service.id)
|
||||
val principals = db.principalDao().getByService(service.id)
|
||||
assertEquals(0, principals.size)
|
||||
}
|
||||
|
||||
|
|
|
@ -11,12 +11,15 @@ import okhttp3.HttpUrl
|
|||
@Dao
|
||||
interface PrincipalDao {
|
||||
|
||||
@Query("SELECT * FROM principal WHERE serviceId=:serviceId")
|
||||
fun get(serviceId: Long): List<Principal>
|
||||
@Query("SELECT * FROM principal WHERE id=:id")
|
||||
fun get(id: Long): Principal
|
||||
|
||||
@Query("SELECT * FROM principal WHERE id=:id")
|
||||
fun getLive(id: Long): LiveData<Principal>
|
||||
|
||||
@Query("SELECT * FROM principal WHERE serviceId=:serviceId")
|
||||
fun getByService(serviceId: Long): List<Principal>
|
||||
|
||||
@Query("SELECT * FROM principal WHERE serviceId=:serviceId AND url=:url")
|
||||
fun getByUrl(serviceId: Long, url: HttpUrl): Principal?
|
||||
|
||||
|
|
|
@ -7,13 +7,15 @@ package at.bitfire.davdroid.resource
|
|||
import android.accounts.Account
|
||||
import android.content.ContentProviderClient
|
||||
import android.content.ContentValues
|
||||
import at.bitfire.davdroid.util.DavUtils
|
||||
import at.bitfire.davdroid.db.*
|
||||
import at.bitfire.davdroid.db.Collection
|
||||
import at.bitfire.davdroid.db.SyncState
|
||||
import at.bitfire.davdroid.log.Logger
|
||||
import at.bitfire.davdroid.util.DavUtils
|
||||
import at.bitfire.ical4android.JtxCollection
|
||||
import at.bitfire.ical4android.JtxCollectionFactory
|
||||
import at.bitfire.ical4android.JtxICalObject
|
||||
import at.techbee.jtx.JtxContract
|
||||
import java.util.logging.Level
|
||||
|
||||
class LocalJtxCollection(account: Account, client: ContentProviderClient, id: Long):
|
||||
JtxCollection<JtxICalObject>(account, client, LocalJtxICalObject.Factory, id),
|
||||
|
@ -21,17 +23,20 @@ class LocalJtxCollection(account: Account, client: ContentProviderClient, id: Lo
|
|||
|
||||
companion object {
|
||||
|
||||
fun create(account: Account, client: ContentProviderClient, info: Collection) {
|
||||
val values = valuesFromCollection(info, account)
|
||||
fun create(account: Account, client: ContentProviderClient, info: Collection, owner: Principal?) {
|
||||
val values = valuesFromCollection(info, account, owner)
|
||||
create(account, client, values)
|
||||
}
|
||||
|
||||
fun valuesFromCollection(info: Collection, account: Account) =
|
||||
fun valuesFromCollection(info: Collection, account: Account, owner: Principal?) =
|
||||
ContentValues().apply {
|
||||
put(JtxContract.JtxCollection.URL, info.url.toString())
|
||||
put(JtxContract.JtxCollection.DISPLAYNAME, info.displayName ?: DavUtils.lastSegmentOfUrl(info.url))
|
||||
put(JtxContract.JtxCollection.DESCRIPTION, info.description)
|
||||
put(JtxContract.JtxCollection.OWNER, info.ownerId)
|
||||
if (owner != null)
|
||||
put(JtxContract.JtxCollection.OWNER, owner.url.toString())
|
||||
else Logger.log.log(Level.SEVERE, "No collection owner given. Will create jtx collection without owner")
|
||||
put(JtxContract.JtxCollection.OWNER_DISPLAYNAME, owner?.displayName)
|
||||
put(JtxContract.JtxCollection.COLOR, info.color)
|
||||
put(JtxContract.JtxCollection.SUPPORTSVEVENT, info.supportsVEVENT)
|
||||
put(JtxContract.JtxCollection.SUPPORTSVJOURNAL, info.supportsVJOURNAL)
|
||||
|
@ -50,8 +55,8 @@ class LocalJtxCollection(account: Account, client: ContentProviderClient, id: Lo
|
|||
get() = SyncState.fromString(syncstate)
|
||||
set(value) { syncstate = value.toString() }
|
||||
|
||||
fun updateCollection(info: Collection) {
|
||||
val values = valuesFromCollection(info, account)
|
||||
fun updateCollection(info: Collection, owner: Principal?) {
|
||||
val values = valuesFromCollection(info, account, owner)
|
||||
update(values)
|
||||
}
|
||||
|
||||
|
|
|
@ -427,7 +427,7 @@ class RefreshCollectionsWorker @AssistedInject constructor(
|
|||
*/
|
||||
internal fun refreshPrincipals() {
|
||||
// Refresh principals (collection owner urls)
|
||||
val principals = db.principalDao().get(service.id)
|
||||
val principals = db.principalDao().getByService(service.id)
|
||||
for (oldPrincipal in principals) {
|
||||
val principalUrl = oldPrincipal.url
|
||||
Logger.log.fine("Querying principal $principalUrl")
|
||||
|
|
|
@ -95,7 +95,8 @@ class JtxSyncAdapterService: SyncAdapterService() {
|
|||
} else {
|
||||
// remote CollectionInfo found for this local collection, update data
|
||||
Logger.log.log(Level.FINE, "Updating local collection $url", info)
|
||||
jtxCollection.updateCollection(info)
|
||||
val owner = info.ownerId?.let { db.principalDao().get(it) }
|
||||
jtxCollection.updateCollection(info, owner)
|
||||
// we already have a local task list for this remote collection, don't take into consideration anymore
|
||||
remoteCollections -= url
|
||||
}
|
||||
|
@ -104,7 +105,8 @@ class JtxSyncAdapterService: SyncAdapterService() {
|
|||
// create new local collections
|
||||
for ((_,info) in remoteCollections) {
|
||||
Logger.log.log(Level.INFO, "Adding local collections", info)
|
||||
LocalJtxCollection.create(account, client, info)
|
||||
val owner = info.ownerId?.let { db.principalDao().get(it) }
|
||||
LocalJtxCollection.create(account, client, info, owner)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 43ef1460bf457dadfae9bc432b3041415cd88329
|
||||
Subproject commit 596bb13b4672b37e21ec4c7135ab1316ae733087
|
Loading…
Reference in a new issue