change (media preview config) : introduce new apis from sdk
This commit is contained in:
parent
03fded9ae7
commit
416f4f2215
8 changed files with 227 additions and 0 deletions
|
|
@ -26,6 +26,9 @@ import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
|
|||
import io.element.android.libraries.matrix.api.createroom.RoomPreset
|
||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewConfig
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewService
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewValue
|
||||
import io.element.android.libraries.matrix.api.notification.NotificationService
|
||||
import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService
|
||||
import io.element.android.libraries.matrix.api.oidc.AccountManagementAction
|
||||
|
|
@ -52,6 +55,7 @@ import io.element.android.libraries.matrix.impl.core.toProgressWatcher
|
|||
import io.element.android.libraries.matrix.impl.encryption.RustEncryptionService
|
||||
import io.element.android.libraries.matrix.impl.exception.mapClientException
|
||||
import io.element.android.libraries.matrix.impl.media.RustMediaLoader
|
||||
import io.element.android.libraries.matrix.impl.media.RustMediaPreviewService
|
||||
import io.element.android.libraries.matrix.impl.notification.RustNotificationService
|
||||
import io.element.android.libraries.matrix.impl.notificationsettings.RustNotificationSettingsService
|
||||
import io.element.android.libraries.matrix.impl.oidc.toRustAction
|
||||
|
|
@ -107,6 +111,7 @@ import org.matrix.rustcomponents.sdk.AuthDataPasswordDetails
|
|||
import org.matrix.rustcomponents.sdk.Client
|
||||
import org.matrix.rustcomponents.sdk.ClientException
|
||||
import org.matrix.rustcomponents.sdk.IgnoredUsersListener
|
||||
import org.matrix.rustcomponents.sdk.InviteAvatars
|
||||
import org.matrix.rustcomponents.sdk.NotificationProcessSetup
|
||||
import org.matrix.rustcomponents.sdk.PowerLevels
|
||||
import org.matrix.rustcomponents.sdk.RoomInfoListener
|
||||
|
|
@ -214,6 +219,11 @@ class RustMatrixClient(
|
|||
innerClient = innerClient,
|
||||
)
|
||||
|
||||
private val mediaPreviewService = RustMediaPreviewService(
|
||||
innerClient = innerClient,
|
||||
sessionDispatcher = sessionDispatcher,
|
||||
)
|
||||
|
||||
private var clientDelegateTaskHandle: TaskHandle? = innerClient.setDelegate(sessionDelegate)
|
||||
|
||||
private val _userProfile: MutableStateFlow<MatrixUser> = MutableStateFlow(
|
||||
|
|
@ -507,6 +517,8 @@ class RustMatrixClient(
|
|||
|
||||
override fun roomDirectoryService(): RoomDirectoryService = roomDirectoryService
|
||||
|
||||
override fun mediaPreviewService(): MediaPreviewService = mediaPreviewService
|
||||
|
||||
internal suspend fun destroy() {
|
||||
innerNotificationClient.close()
|
||||
|
||||
|
|
@ -682,6 +694,8 @@ class RustMatrixClient(
|
|||
innerClient.isLivekitRtcSupported()
|
||||
}
|
||||
|
||||
|
||||
|
||||
private suspend fun File.getCacheSize(
|
||||
includeCryptoDb: Boolean = false,
|
||||
): Long = withContext(sessionDispatcher) {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
|||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewService
|
||||
import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService
|
||||
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
||||
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
|
||||
|
|
@ -71,4 +72,9 @@ object SessionMatrixModule {
|
|||
fun providesRoomDirectoryService(matrixClient: MatrixClient): RoomDirectoryService {
|
||||
return matrixClient.roomDirectoryService()
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun providesMediaPreviewService(matrixClient: MatrixClient): MediaPreviewService {
|
||||
return matrixClient.mediaPreviewService()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Copyright 2025 New Vector Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.impl.media
|
||||
|
||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewConfig
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewService
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewValue
|
||||
import io.element.android.libraries.matrix.impl.util.mxCallbackFlow
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.matrix.rustcomponents.sdk.Client
|
||||
import org.matrix.rustcomponents.sdk.InviteAvatars
|
||||
import org.matrix.rustcomponents.sdk.MediaPreviewConfigListener
|
||||
import org.matrix.rustcomponents.sdk.MediaPreviews
|
||||
import org.matrix.rustcomponents.sdk.MediaPreviewConfig as RustMediaPreviewConfig
|
||||
|
||||
class RustMediaPreviewService(
|
||||
private val sessionDispatcher: CoroutineDispatcher,
|
||||
private val innerClient: Client,
|
||||
) : MediaPreviewService {
|
||||
override suspend fun fetchMediaPreviewConfig(): Result<MediaPreviewConfig?> = withContext(sessionDispatcher) {
|
||||
runCatchingExceptions {
|
||||
innerClient.fetchMediaPreviewConfig()?.into()
|
||||
}
|
||||
}
|
||||
|
||||
override fun getMediaPreviewConfigFlow(): Flow<MediaPreviewConfig?> = innerClient.getMediaPreviewConfigFlow()
|
||||
|
||||
override suspend fun getMediaPreviewValue(): MediaPreviewValue? = innerClient.getMediaPreviewDisplayPolicy()?.into()
|
||||
|
||||
override suspend fun setMediaPreviewValue(mediaPreviewValue: MediaPreviewValue): Result<Unit> = withContext(sessionDispatcher) {
|
||||
runCatchingExceptions {
|
||||
innerClient.setMediaPreviewDisplayPolicy(mediaPreviewValue.into())
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun getHideInviteAvatars(): Boolean = innerClient.getInviteAvatarsDisplayPolicy() == InviteAvatars.OFF
|
||||
|
||||
override suspend fun setHideInviteAvatars(hide: Boolean): Result<Unit> = withContext(sessionDispatcher) {
|
||||
runCatchingExceptions {
|
||||
val inviteAvatars = if (hide) InviteAvatars.OFF else InviteAvatars.ON
|
||||
innerClient.setInviteAvatarsDisplayPolicy(inviteAvatars)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun RustMediaPreviewConfig.into(): MediaPreviewConfig {
|
||||
return MediaPreviewConfig(
|
||||
mediaPreviewValue = this@into.mediaPreviews.into(),
|
||||
hideInviteAvatar = inviteAvatars == InviteAvatars.OFF
|
||||
)
|
||||
}
|
||||
|
||||
private fun Client.getMediaPreviewConfigFlow() = mxCallbackFlow {
|
||||
subscribeToMediaPreviewConfig(object : MediaPreviewConfigListener {
|
||||
override fun onChange(mediaPreviewConfig: RustMediaPreviewConfig?) {
|
||||
trySend(mediaPreviewConfig?.into())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun MediaPreviewValue.into(): MediaPreviews {
|
||||
return when (this) {
|
||||
MediaPreviewValue.On -> MediaPreviews.ON
|
||||
MediaPreviewValue.Off -> MediaPreviews.OFF
|
||||
MediaPreviewValue.Private -> MediaPreviews.PRIVATE
|
||||
}
|
||||
}
|
||||
|
||||
private fun MediaPreviews.into(): MediaPreviewValue {
|
||||
return when (this) {
|
||||
MediaPreviews.ON -> MediaPreviewValue.On
|
||||
MediaPreviews.OFF -> MediaPreviewValue.Off
|
||||
MediaPreviews.PRIVATE -> MediaPreviewValue.Private
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue