change (media preview config) : final refactoring and tests
This commit is contained in:
parent
4b4cfa341e
commit
ca46166c67
27 changed files with 676 additions and 165 deletions
|
|
@ -26,9 +26,7 @@ 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
|
||||
|
|
@ -111,7 +109,6 @@ 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
|
||||
|
|
@ -220,6 +217,7 @@ class RustMatrixClient(
|
|||
)
|
||||
|
||||
private val mediaPreviewService = RustMediaPreviewService(
|
||||
sessionCoroutineScope = sessionCoroutineScope,
|
||||
innerClient = innerClient,
|
||||
sessionDispatcher = sessionDispatcher,
|
||||
)
|
||||
|
|
@ -694,8 +692,6 @@ class RustMatrixClient(
|
|||
innerClient.isLivekitRtcSupported()
|
||||
}
|
||||
|
||||
|
||||
|
||||
private suspend fun File.getCacheSize(
|
||||
includeCryptoDb: Boolean = false,
|
||||
): Long = withContext(sessionDispatcher) {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,10 @@ 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.CoroutineScope
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.matrix.rustcomponents.sdk.Client
|
||||
import org.matrix.rustcomponents.sdk.InviteAvatars
|
||||
|
|
@ -22,27 +25,27 @@ import org.matrix.rustcomponents.sdk.MediaPreviews
|
|||
import org.matrix.rustcomponents.sdk.MediaPreviewConfig as RustMediaPreviewConfig
|
||||
|
||||
class RustMediaPreviewService(
|
||||
sessionCoroutineScope: CoroutineScope,
|
||||
private val sessionDispatcher: CoroutineDispatcher,
|
||||
private val innerClient: Client,
|
||||
) : MediaPreviewService {
|
||||
override val mediaPreviewConfigFlow: StateFlow<MediaPreviewConfig> =
|
||||
innerClient
|
||||
.getMediaPreviewConfigFlow()
|
||||
.stateIn(sessionCoroutineScope, started = SharingStarted.Lazily, initialValue = MediaPreviewConfig.DEFAULT)
|
||||
|
||||
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
|
||||
|
|
@ -61,7 +64,9 @@ private fun RustMediaPreviewConfig.into(): MediaPreviewConfig {
|
|||
private fun Client.getMediaPreviewConfigFlow() = mxCallbackFlow {
|
||||
subscribeToMediaPreviewConfig(object : MediaPreviewConfigListener {
|
||||
override fun onChange(mediaPreviewConfig: RustMediaPreviewConfig?) {
|
||||
trySend(mediaPreviewConfig?.into())
|
||||
if (mediaPreviewConfig != null) {
|
||||
trySend(mediaPreviewConfig.into())
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -81,4 +86,3 @@ private fun MediaPreviews.into(): MediaPreviewValue {
|
|||
MediaPreviews.PRIVATE -> MediaPreviewValue.Private
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue