Start creating bunch of necessary classes
This commit is contained in:
parent
4589aaa11c
commit
29c9d3070c
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.api.auth.data
|
||||||
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.android.api.util.JsonDict
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* https://matrix.org/docs/spec/client_server/r0.4.0.html#server-discovery
|
* https://matrix.org/docs/spec/client_server/r0.4.0.html#server-discovery
|
||||||
|
@ -52,31 +53,5 @@ data class WellKnown(
|
||||||
val identityServer: WellKnownBaseConfig? = null,
|
val identityServer: WellKnownBaseConfig? = null,
|
||||||
|
|
||||||
@Json(name = "m.integrations")
|
@Json(name = "m.integrations")
|
||||||
val integrations: Map<String, @JvmSuppressWildcards Any>? = null
|
val integrations: JsonDict? = null
|
||||||
) {
|
)
|
||||||
/**
|
|
||||||
* Returns the list of integration managers proposed
|
|
||||||
*/
|
|
||||||
fun getIntegrationManagers(): List<WellKnownManagerConfig> {
|
|
||||||
val managers = ArrayList<WellKnownManagerConfig>()
|
|
||||||
integrations?.get("managers")?.let {
|
|
||||||
(it as? ArrayList<*>)?.let { configs ->
|
|
||||||
configs.forEach { config ->
|
|
||||||
(config as? Map<*, *>)?.let { map ->
|
|
||||||
val apiUrl = map["api_url"] as? String
|
|
||||||
val uiUrl = map["ui_url"] as? String ?: apiUrl
|
|
||||||
if (apiUrl != null
|
|
||||||
&& apiUrl.startsWith("https://")
|
|
||||||
&& uiUrl!!.startsWith("https://")) {
|
|
||||||
managers.add(WellKnownManagerConfig(
|
|
||||||
apiUrl = apiUrl,
|
|
||||||
uiUrl = uiUrl
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return managers
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.api.session.widgets.model
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.android.api.util.JsonDict
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class WidgetContent(
|
||||||
|
@Json(name = "creatorUserId") val creatorUserId: String,
|
||||||
|
@Json(name = "id") val id: String,
|
||||||
|
@Json(name = "type") val type: String,
|
||||||
|
@Json(name = "url") val url: String,
|
||||||
|
@Json(name = "name") val name: String,
|
||||||
|
@Json(name = "data") val data: JsonDict,
|
||||||
|
@Json(name = "waitForIframeLoad") val waitForIframeLoad: Boolean = false
|
||||||
|
)
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.database.mapper
|
||||||
|
|
||||||
|
import com.squareup.moshi.Moshi
|
||||||
|
import im.vector.matrix.android.api.util.JSON_DICT_PARAMETERIZED_TYPE
|
||||||
|
import im.vector.matrix.android.internal.database.model.UserAccountDataEntity
|
||||||
|
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountDataEvent
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
internal class AccountDataMapper @Inject constructor(moshi: Moshi) {
|
||||||
|
|
||||||
|
private val adapter = moshi.adapter<Map<String, Any>>(JSON_DICT_PARAMETERIZED_TYPE)
|
||||||
|
|
||||||
|
fun map(entity: UserAccountDataEntity): UserAccountDataEvent {
|
||||||
|
return UserAccountDataEvent(
|
||||||
|
type = entity.type ?: "",
|
||||||
|
content = entity.contentStr?.let { adapter.fromJson(it) } ?: emptyMap()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.integrationmanager
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class AllowedWidgetsContent(
|
||||||
|
/**
|
||||||
|
* Map of stateEventId to Allowed
|
||||||
|
*/
|
||||||
|
@Json(name = "widgets") val widgets: Map<String, Boolean>,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of native widgetType to a map of domain to Allowed
|
||||||
|
* {
|
||||||
|
* "jitsi" : {
|
||||||
|
* "jitsi.domain.org" : true,
|
||||||
|
* "jitsi.other.org" : false
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
@Json(name = "native_widgets") val native: Map<String, Map<String, Boolean>>
|
||||||
|
)
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2019 New Vector Ltd
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -13,9 +13,9 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package im.vector.matrix.android.api.auth.data
|
package im.vector.matrix.android.internal.session.integrationmanager
|
||||||
|
|
||||||
data class WellKnownManagerConfig(
|
data class IntegrationManagerConfig(
|
||||||
val apiUrl : String,
|
val uiUrl: String,
|
||||||
val uiUrl: String
|
val apiUrl: String
|
||||||
)
|
)
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.integrationmanager
|
||||||
|
|
||||||
|
import im.vector.matrix.android.api.auth.data.WellKnown
|
||||||
|
|
||||||
|
internal class IntegrationManagerConfigExtractor {
|
||||||
|
|
||||||
|
fun extract(wellKnown: WellKnown): List<IntegrationManagerConfig> {
|
||||||
|
val managers = ArrayList<IntegrationManagerConfig>()
|
||||||
|
wellKnown.integrations?.get("managers")?.let {
|
||||||
|
(it as? List<*>)?.let { configs ->
|
||||||
|
configs.forEach { config ->
|
||||||
|
(config as? Map<*, *>)?.let { map ->
|
||||||
|
val apiUrl = map["api_url"] as? String
|
||||||
|
val uiUrl = map["ui_url"] as? String ?: apiUrl
|
||||||
|
if (apiUrl != null
|
||||||
|
&& apiUrl.startsWith("https://")
|
||||||
|
&& uiUrl!!.startsWith("https://")) {
|
||||||
|
managers.add(IntegrationManagerConfig(
|
||||||
|
apiUrl = apiUrl,
|
||||||
|
uiUrl = uiUrl
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return managers
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.integrationmanager
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class IntegrationManagerWidgetData(
|
||||||
|
@Json(name = "api_url") val apiUrl: String? = null
|
||||||
|
)
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.integrationmanager
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class IntegrationProvisioningContent(
|
||||||
|
@Json(name = "enabled") val enabled: Boolean
|
||||||
|
)
|
|
@ -30,5 +30,9 @@ abstract class UserAccountData : AccountDataContent {
|
||||||
const val TYPE_PREVIEW_URLS = "org.matrix.preview_urls"
|
const val TYPE_PREVIEW_URLS = "org.matrix.preview_urls"
|
||||||
const val TYPE_WIDGETS = "m.widgets"
|
const val TYPE_WIDGETS = "m.widgets"
|
||||||
const val TYPE_PUSH_RULES = "m.push_rules"
|
const val TYPE_PUSH_RULES = "m.push_rules"
|
||||||
|
|
||||||
|
const val ACCOUNT_DATA_TYPE_INTEGRATION_PROVISIONING = "im.vector.setting.integration_provisioning"
|
||||||
|
const val ACCOUNT_DATA_TYPE_ALLOWED_WIDGETS = "im.vector.setting.allowed_widgets"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.sync.model.accountdata
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.android.internal.session.integrationmanager.AllowedWidgetsContent
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
internal data class UserAccountDataAllowedWidgets(
|
||||||
|
@Json(name = "type") override val type: String = ACCOUNT_DATA_TYPE_ALLOWED_WIDGETS,
|
||||||
|
@Json(name = "content") val content: AllowedWidgetsContent
|
||||||
|
) : UserAccountData()
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.sync.model.accountdata
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.android.internal.session.integrationmanager.IntegrationProvisioningContent
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
internal data class UserAccountDataIntegrationProvisioning(
|
||||||
|
@Json(name = "type") override val type: String = ACCOUNT_DATA_TYPE_INTEGRATION_PROVISIONING,
|
||||||
|
@Json(name = "content") val content: IntegrationProvisioningContent
|
||||||
|
) : UserAccountData()
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.sync.model.accountdata
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import im.vector.matrix.android.api.session.events.model.Event
|
||||||
|
|
||||||
|
/*
|
||||||
|
"m.widgets":{
|
||||||
|
"stickerpicker_@rxl881:matrix.org_1514573757015":{
|
||||||
|
"content":{
|
||||||
|
"creatorUserId":"@rxl881:matrix.org",
|
||||||
|
"data":{
|
||||||
|
"..."
|
||||||
|
},
|
||||||
|
"id":"stickerpicker_@rxl881:matrix.org_1514573757015",
|
||||||
|
"name":"Stickerpicker",
|
||||||
|
"type":"m.stickerpicker",
|
||||||
|
"url":"https://...",
|
||||||
|
"waitForIframeLoad":true
|
||||||
|
},
|
||||||
|
"sender":"@rxl881:matrix.org"
|
||||||
|
"state_key":"stickerpicker_@rxl881:matrix.org_1514573757015",
|
||||||
|
"type":"m.widget"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"..."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
internal data class UserAccountDataWidgets(
|
||||||
|
@Json(name = "type") override val type: String = TYPE_WIDGETS,
|
||||||
|
@Json(name = "content") val content: Map<String, Event>
|
||||||
|
) : UserAccountData()
|
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.matrix.android.internal.session.user.accountdata
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
|
import androidx.lifecycle.Transformations
|
||||||
|
import com.zhuinden.monarchy.Monarchy
|
||||||
|
import im.vector.matrix.android.api.util.Optional
|
||||||
|
import im.vector.matrix.android.api.util.toOptional
|
||||||
|
import im.vector.matrix.android.internal.database.mapper.AccountDataMapper
|
||||||
|
import im.vector.matrix.android.internal.database.model.UserAccountDataEntity
|
||||||
|
import im.vector.matrix.android.internal.database.model.UserAccountDataEntityFields
|
||||||
|
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountDataEvent
|
||||||
|
import io.realm.Realm
|
||||||
|
import io.realm.RealmQuery
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
internal class AccountDataDataSource @Inject constructor(private val monarchy: Monarchy,
|
||||||
|
private val accountDataMapper: AccountDataMapper) {
|
||||||
|
|
||||||
|
fun getAccountDataEvent(type: String): UserAccountDataEvent? {
|
||||||
|
return getAccountDataEvents(setOf(type)).firstOrNull()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getLiveAccountDataEvent(type: String): LiveData<Optional<UserAccountDataEvent>> {
|
||||||
|
return Transformations.map(getLiveAccountDataEvents(setOf(type))) {
|
||||||
|
it.firstOrNull()?.toOptional()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getAccountDataEvents(types: Set<String>): List<UserAccountDataEvent> {
|
||||||
|
return monarchy.fetchAllMappedSync(
|
||||||
|
{ accountDataEventsQuery(it, types) },
|
||||||
|
accountDataMapper::map
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getLiveAccountDataEvents(types: Set<String>): LiveData<List<UserAccountDataEvent>> {
|
||||||
|
return monarchy.findAllMappedWithChanges(
|
||||||
|
{ accountDataEventsQuery(it, types) },
|
||||||
|
accountDataMapper::map
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun accountDataEventsQuery(realm: Realm, types: Set<String>): RealmQuery<UserAccountDataEntity> {
|
||||||
|
val query = realm.where(UserAccountDataEntity::class.java)
|
||||||
|
if (types.isNotEmpty()) {
|
||||||
|
query.`in`(UserAccountDataEntityFields.TYPE, types.toTypedArray())
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,18 +17,12 @@
|
||||||
package im.vector.matrix.android.internal.session.user.accountdata
|
package im.vector.matrix.android.internal.session.user.accountdata
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.Transformations
|
|
||||||
import com.zhuinden.monarchy.Monarchy
|
import com.zhuinden.monarchy.Monarchy
|
||||||
import im.vector.matrix.android.api.MatrixCallback
|
import im.vector.matrix.android.api.MatrixCallback
|
||||||
import im.vector.matrix.android.api.session.accountdata.AccountDataService
|
import im.vector.matrix.android.api.session.accountdata.AccountDataService
|
||||||
import im.vector.matrix.android.api.session.events.model.Content
|
import im.vector.matrix.android.api.session.events.model.Content
|
||||||
import im.vector.matrix.android.api.util.Cancelable
|
import im.vector.matrix.android.api.util.Cancelable
|
||||||
import im.vector.matrix.android.api.util.JSON_DICT_PARAMETERIZED_TYPE
|
|
||||||
import im.vector.matrix.android.api.util.Optional
|
import im.vector.matrix.android.api.util.Optional
|
||||||
import im.vector.matrix.android.api.util.toOptional
|
|
||||||
import im.vector.matrix.android.internal.database.model.UserAccountDataEntity
|
|
||||||
import im.vector.matrix.android.internal.database.model.UserAccountDataEntityFields
|
|
||||||
import im.vector.matrix.android.internal.di.MoshiProvider
|
|
||||||
import im.vector.matrix.android.internal.session.sync.UserAccountDataSyncHandler
|
import im.vector.matrix.android.internal.session.sync.UserAccountDataSyncHandler
|
||||||
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountDataEvent
|
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountDataEvent
|
||||||
import im.vector.matrix.android.internal.task.TaskExecutor
|
import im.vector.matrix.android.internal.task.TaskExecutor
|
||||||
|
@ -39,54 +33,24 @@ internal class DefaultAccountDataService @Inject constructor(
|
||||||
private val monarchy: Monarchy,
|
private val monarchy: Monarchy,
|
||||||
private val updateUserAccountDataTask: UpdateUserAccountDataTask,
|
private val updateUserAccountDataTask: UpdateUserAccountDataTask,
|
||||||
private val userAccountDataSyncHandler: UserAccountDataSyncHandler,
|
private val userAccountDataSyncHandler: UserAccountDataSyncHandler,
|
||||||
|
private val accountDataDataSource: AccountDataDataSource,
|
||||||
private val taskExecutor: TaskExecutor
|
private val taskExecutor: TaskExecutor
|
||||||
) : AccountDataService {
|
) : AccountDataService {
|
||||||
|
|
||||||
private val moshi = MoshiProvider.providesMoshi()
|
|
||||||
private val adapter = moshi.adapter<Map<String, Any>>(JSON_DICT_PARAMETERIZED_TYPE)
|
|
||||||
|
|
||||||
override fun getAccountDataEvent(type: String): UserAccountDataEvent? {
|
override fun getAccountDataEvent(type: String): UserAccountDataEvent? {
|
||||||
return getAccountDataEvents(setOf(type)).firstOrNull()
|
return accountDataDataSource.getAccountDataEvent(type)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLiveAccountDataEvent(type: String): LiveData<Optional<UserAccountDataEvent>> {
|
override fun getLiveAccountDataEvent(type: String): LiveData<Optional<UserAccountDataEvent>> {
|
||||||
return Transformations.map(getLiveAccountDataEvents(setOf(type))) {
|
return accountDataDataSource.getLiveAccountDataEvent(type)
|
||||||
it.firstOrNull()?.toOptional()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAccountDataEvents(types: Set<String>): List<UserAccountDataEvent> {
|
override fun getAccountDataEvents(types: Set<String>): List<UserAccountDataEvent> {
|
||||||
return monarchy.fetchAllCopiedSync { realm ->
|
return accountDataDataSource.getAccountDataEvents(types)
|
||||||
realm.where(UserAccountDataEntity::class.java)
|
|
||||||
.apply {
|
|
||||||
if (types.isNotEmpty()) {
|
|
||||||
`in`(UserAccountDataEntityFields.TYPE, types.toTypedArray())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.mapNotNull { entity ->
|
|
||||||
entity.type?.let { type ->
|
|
||||||
UserAccountDataEvent(
|
|
||||||
type = type,
|
|
||||||
content = entity.contentStr?.let { adapter.fromJson(it) } ?: emptyMap()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLiveAccountDataEvents(types: Set<String>): LiveData<List<UserAccountDataEvent>> {
|
override fun getLiveAccountDataEvents(types: Set<String>): LiveData<List<UserAccountDataEvent>> {
|
||||||
return monarchy.findAllMappedWithChanges({ realm ->
|
return accountDataDataSource.getLiveAccountDataEvents(types)
|
||||||
realm.where(UserAccountDataEntity::class.java)
|
|
||||||
.apply {
|
|
||||||
if (types.isNotEmpty()) {
|
|
||||||
`in`(UserAccountDataEntityFields.TYPE, types.toTypedArray())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, { entity ->
|
|
||||||
UserAccountDataEvent(
|
|
||||||
type = entity.type ?: "",
|
|
||||||
content = entity.contentStr?.let { adapter.fromJson(it) } ?: emptyMap()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateAccountData(type: String, content: Content, callback: MatrixCallback<Unit>?): Cancelable {
|
override fun updateAccountData(type: String, content: Content, callback: MatrixCallback<Unit>?): Cancelable {
|
||||||
|
|
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.session.user.accountdata
|
||||||
|
|
||||||
import im.vector.matrix.android.internal.di.UserId
|
import im.vector.matrix.android.internal.di.UserId
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
|
import im.vector.matrix.android.internal.session.integrationmanager.AllowedWidgetsContent
|
||||||
import im.vector.matrix.android.internal.session.sync.model.accountdata.BreadcrumbsContent
|
import im.vector.matrix.android.internal.session.sync.model.accountdata.BreadcrumbsContent
|
||||||
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountData
|
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountData
|
||||||
import im.vector.matrix.android.internal.task.Task
|
import im.vector.matrix.android.internal.task.Task
|
||||||
|
@ -50,6 +51,14 @@ internal interface UpdateUserAccountDataTask : Task<UpdateUserAccountDataTask.Pa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class AllowedWidgets(override val type: String = UserAccountData.ACCOUNT_DATA_TYPE_ALLOWED_WIDGETS,
|
||||||
|
private val allowedWidgetsContent: AllowedWidgetsContent) : Params {
|
||||||
|
|
||||||
|
override fun getData(): Any {
|
||||||
|
return allowedWidgetsContent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
data class AnyParams(override val type: String,
|
data class AnyParams(override val type: String,
|
||||||
private val any: Any
|
private val any: Any
|
||||||
) : Params {
|
) : Params {
|
||||||
|
|
Loading…
Reference in New Issue