Add provider for custom event types
This commit is contained in:
parent
fdb8743ad3
commit
4d6c04baf9
|
@ -20,6 +20,7 @@ import okhttp3.ConnectionSpec
|
||||||
import okhttp3.Interceptor
|
import okhttp3.Interceptor
|
||||||
import org.matrix.android.sdk.api.crypto.MXCryptoConfig
|
import org.matrix.android.sdk.api.crypto.MXCryptoConfig
|
||||||
import org.matrix.android.sdk.api.metrics.MetricPlugin
|
import org.matrix.android.sdk.api.metrics.MetricPlugin
|
||||||
|
import org.matrix.android.sdk.api.provider.CustomEventTypesProvider
|
||||||
import org.matrix.android.sdk.api.provider.MatrixItemDisplayNameFallbackProvider
|
import org.matrix.android.sdk.api.provider.MatrixItemDisplayNameFallbackProvider
|
||||||
import org.matrix.android.sdk.api.provider.RoomDisplayNameFallbackProvider
|
import org.matrix.android.sdk.api.provider.RoomDisplayNameFallbackProvider
|
||||||
import java.net.Proxy
|
import java.net.Proxy
|
||||||
|
@ -77,9 +78,12 @@ data class MatrixConfiguration(
|
||||||
* Sync configuration.
|
* Sync configuration.
|
||||||
*/
|
*/
|
||||||
val syncConfig: SyncConfig = SyncConfig(),
|
val syncConfig: SyncConfig = SyncConfig(),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metrics plugin that can be used to capture metrics from matrix-sdk-android.
|
* Metrics plugin that can be used to capture metrics from matrix-sdk-android.
|
||||||
*/
|
*/
|
||||||
val metricPlugins: List<MetricPlugin> = emptyList()
|
val metricPlugins: List<MetricPlugin> = emptyList(),
|
||||||
|
/**
|
||||||
|
* CustomEventTypesProvider to provide custom event types to the sdk which should be processed with internal events.
|
||||||
|
*/
|
||||||
|
val customEventTypesProvider: CustomEventTypesProvider? = null,
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2022 The Matrix.org Foundation C.I.C.
|
||||||
|
*
|
||||||
|
* 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 org.matrix.android.sdk.api.provider
|
||||||
|
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide custom event types which should be processed with the internal event types.
|
||||||
|
*/
|
||||||
|
interface CustomEventTypesProvider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom event types to include when computing [RoomSummary.latestPreviewableEvent].
|
||||||
|
*/
|
||||||
|
val customPreviewableEventTypes: List<String>
|
||||||
|
}
|
|
@ -17,17 +17,23 @@
|
||||||
package org.matrix.android.sdk.internal.session.room.summary
|
package org.matrix.android.sdk.internal.session.room.summary
|
||||||
|
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
|
import org.matrix.android.sdk.api.MatrixConfiguration
|
||||||
import org.matrix.android.sdk.api.session.room.summary.RoomSummaryConstants
|
import org.matrix.android.sdk.api.session.room.summary.RoomSummaryConstants
|
||||||
import org.matrix.android.sdk.api.session.room.timeline.EventTypeFilter
|
import org.matrix.android.sdk.api.session.room.timeline.EventTypeFilter
|
||||||
import org.matrix.android.sdk.api.session.room.timeline.TimelineEventFilters
|
import org.matrix.android.sdk.api.session.room.timeline.TimelineEventFilters
|
||||||
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
|
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
|
||||||
import org.matrix.android.sdk.internal.database.query.latestEvent
|
import org.matrix.android.sdk.internal.database.query.latestEvent
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal object RoomSummaryEventsHelper {
|
internal class RoomSummaryEventsHelper @Inject constructor(
|
||||||
|
matrixConfiguration: MatrixConfiguration,
|
||||||
|
) {
|
||||||
|
|
||||||
private val previewFilters = TimelineEventFilters(
|
private val previewFilters = TimelineEventFilters(
|
||||||
filterTypes = true,
|
filterTypes = true,
|
||||||
allowedTypes = RoomSummaryConstants.PREVIEWABLE_TYPES.map { EventTypeFilter(eventType = it, stateKey = null) },
|
allowedTypes = RoomSummaryConstants.PREVIEWABLE_TYPES
|
||||||
|
.plus(matrixConfiguration.customEventTypesProvider?.customPreviewableEventTypes.orEmpty())
|
||||||
|
.map { EventTypeFilter(eventType = it, stateKey = null) },
|
||||||
filterUseless = true,
|
filterUseless = true,
|
||||||
filterRedacted = false,
|
filterRedacted = false,
|
||||||
filterEdits = true
|
filterEdits = true
|
||||||
|
|
|
@ -78,12 +78,13 @@ internal class RoomSummaryUpdater @Inject constructor(
|
||||||
private val crossSigningService: DefaultCrossSigningService,
|
private val crossSigningService: DefaultCrossSigningService,
|
||||||
private val roomAccountDataDataSource: RoomAccountDataDataSource,
|
private val roomAccountDataDataSource: RoomAccountDataDataSource,
|
||||||
private val homeServerCapabilitiesService: HomeServerCapabilitiesService,
|
private val homeServerCapabilitiesService: HomeServerCapabilitiesService,
|
||||||
|
private val roomSummaryEventsHelper: RoomSummaryEventsHelper,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun refreshLatestPreviewContent(realm: Realm, roomId: String) {
|
fun refreshLatestPreviewContent(realm: Realm, roomId: String) {
|
||||||
val roomSummaryEntity = RoomSummaryEntity.getOrNull(realm, roomId)
|
val roomSummaryEntity = RoomSummaryEntity.getOrNull(realm, roomId)
|
||||||
if (roomSummaryEntity != null) {
|
if (roomSummaryEntity != null) {
|
||||||
val latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
val latestPreviewableEvent = roomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||||
latestPreviewableEvent?.attemptToDecrypt()
|
latestPreviewableEvent?.attemptToDecrypt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,7 +146,7 @@ internal class RoomSummaryUpdater @Inject constructor(
|
||||||
val encryptionEvent = CurrentStateEventEntity.getOrNull(realm, roomId, type = EventType.STATE_ROOM_ENCRYPTION, stateKey = "")?.root
|
val encryptionEvent = CurrentStateEventEntity.getOrNull(realm, roomId, type = EventType.STATE_ROOM_ENCRYPTION, stateKey = "")?.root
|
||||||
Timber.d("## CRYPTO: currentEncryptionEvent is $encryptionEvent")
|
Timber.d("## CRYPTO: currentEncryptionEvent is $encryptionEvent")
|
||||||
|
|
||||||
val latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
val latestPreviewableEvent = roomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||||
|
|
||||||
val lastActivityFromEvent = latestPreviewableEvent?.root?.originServerTs
|
val lastActivityFromEvent = latestPreviewableEvent?.root?.originServerTs
|
||||||
if (lastActivityFromEvent != null) {
|
if (lastActivityFromEvent != null) {
|
||||||
|
@ -231,7 +232,7 @@ internal class RoomSummaryUpdater @Inject constructor(
|
||||||
fun updateSendingInformation(realm: Realm, roomId: String) {
|
fun updateSendingInformation(realm: Realm, roomId: String) {
|
||||||
val roomSummaryEntity = RoomSummaryEntity.getOrCreate(realm, roomId)
|
val roomSummaryEntity = RoomSummaryEntity.getOrCreate(realm, roomId)
|
||||||
roomSummaryEntity.updateHasFailedSending()
|
roomSummaryEntity.updateHasFailedSending()
|
||||||
roomSummaryEntity.latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
roomSummaryEntity.latestPreviewableEvent = roomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue