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 org.matrix.android.sdk.api.crypto.MXCryptoConfig
|
||||
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.RoomDisplayNameFallbackProvider
|
||||
import java.net.Proxy
|
||||
|
@ -77,9 +78,12 @@ data class MatrixConfiguration(
|
|||
* Sync configuration.
|
||||
*/
|
||||
val syncConfig: SyncConfig = SyncConfig(),
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
||||
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.timeline.EventTypeFilter
|
||||
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.query.latestEvent
|
||||
import javax.inject.Inject
|
||||
|
||||
internal object RoomSummaryEventsHelper {
|
||||
internal class RoomSummaryEventsHelper @Inject constructor(
|
||||
matrixConfiguration: MatrixConfiguration,
|
||||
) {
|
||||
|
||||
private val previewFilters = TimelineEventFilters(
|
||||
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,
|
||||
filterRedacted = false,
|
||||
filterEdits = true
|
||||
|
|
|
@ -78,12 +78,13 @@ internal class RoomSummaryUpdater @Inject constructor(
|
|||
private val crossSigningService: DefaultCrossSigningService,
|
||||
private val roomAccountDataDataSource: RoomAccountDataDataSource,
|
||||
private val homeServerCapabilitiesService: HomeServerCapabilitiesService,
|
||||
private val roomSummaryEventsHelper: RoomSummaryEventsHelper,
|
||||
) {
|
||||
|
||||
fun refreshLatestPreviewContent(realm: Realm, roomId: String) {
|
||||
val roomSummaryEntity = RoomSummaryEntity.getOrNull(realm, roomId)
|
||||
if (roomSummaryEntity != null) {
|
||||
val latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||
val latestPreviewableEvent = roomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||
latestPreviewableEvent?.attemptToDecrypt()
|
||||
}
|
||||
}
|
||||
|
@ -145,7 +146,7 @@ internal class RoomSummaryUpdater @Inject constructor(
|
|||
val encryptionEvent = CurrentStateEventEntity.getOrNull(realm, roomId, type = EventType.STATE_ROOM_ENCRYPTION, stateKey = "")?.root
|
||||
Timber.d("## CRYPTO: currentEncryptionEvent is $encryptionEvent")
|
||||
|
||||
val latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||
val latestPreviewableEvent = roomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||
|
||||
val lastActivityFromEvent = latestPreviewableEvent?.root?.originServerTs
|
||||
if (lastActivityFromEvent != null) {
|
||||
|
@ -231,7 +232,7 @@ internal class RoomSummaryUpdater @Inject constructor(
|
|||
fun updateSendingInformation(realm: Realm, roomId: String) {
|
||||
val roomSummaryEntity = RoomSummaryEntity.getOrCreate(realm, roomId)
|
||||
roomSummaryEntity.updateHasFailedSending()
|
||||
roomSummaryEntity.latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||
roomSummaryEntity.latestPreviewableEvent = roomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue