diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3100885b76..163a583597 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -183,7 +183,7 @@ test_detekt_test = { module = "io.gitlab.arturbosch.detekt:detekt-test", version # https://github.com/matrix-org/matrix-rust-components-kotlin/commits/main/sdk/sdk-android/src/main/kotlin/org/matrix/rustcomponents/sdk/matrix_sdk_ffi.kt # All new features should not be implemented in the pull request that upgrades the version, developers should # only fix API breaks and may add some TODOs. -matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.06.3" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:26.06.11" # Others coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt index 52b1577bf0..565dc59614 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ClientException.kt @@ -15,6 +15,7 @@ sealed class ClientException(message: String, val details: String?, cause: Throw details = details, cause = cause ) + class ContentScanner(message: String, val reason: ContentScannerErrorReason) : ClientException(message, null, null) class Other(message: String, cause: Throwable? = null) : ClientException(message, null, cause) } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ContentScannerErrorReason.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ContentScannerErrorReason.kt new file mode 100644 index 0000000000..5c32b3989b --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/exception/ContentScannerErrorReason.kt @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2026 Element Creations 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.api.exception + +enum class ContentScannerErrorReason { + MCS_MALFORMED_JSON, + MCS_MEDIA_FAILED_TO_DECRYPT, + M_MISSING_TOKEN, + M_UNKNOWN_TOKEN, + M_NOT_FOUND, + MCS_MEDIA_NOT_CLEAN, + MCS_MIME_TYPE_FORBIDDEN, + MCS_BAD_DECRYPTION, + M_UNKNOWN, + MCS_MEDIA_REQUEST_FAILED; + + companion object; + + fun isDangerous(): Boolean = when (this) { + MCS_MEDIA_NOT_CLEAN, MCS_MIME_TYPE_FORBIDDEN -> true + else -> false + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt index eefa6d4986..27d799f67b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ClientException.kt @@ -9,6 +9,7 @@ package io.element.android.libraries.matrix.impl.exception import io.element.android.libraries.matrix.api.exception.ClientException +import io.element.android.libraries.matrix.api.exception.ContentScannerErrorReason import org.matrix.rustcomponents.sdk.ClientException as RustClientException fun Throwable.mapClientException(): ClientException { @@ -23,6 +24,10 @@ fun Throwable.mapClientException(): ClientException { details = details, cause = this, ) + is RustClientException.ContentScanner -> ClientException.ContentScanner( + message = message, + reason = ContentScannerErrorReason.fromRust(reason), + ) } } else -> ClientException.Other(message ?: "Unknown error", this) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ContentScannerErrorReason.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ContentScannerErrorReason.kt new file mode 100644 index 0000000000..085a570278 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/exception/ContentScannerErrorReason.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2026 Element Creations 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.exception + +import io.element.android.libraries.matrix.api.exception.ContentScannerErrorReason +import uniffi.matrix_sdk_contentscanner.ErrorReason +import uniffi.matrix_sdk_contentscanner.ErrorReason.MCS_BAD_DECRYPTION +import uniffi.matrix_sdk_contentscanner.ErrorReason.MCS_MALFORMED_JSON +import uniffi.matrix_sdk_contentscanner.ErrorReason.MCS_MEDIA_FAILED_TO_DECRYPT +import uniffi.matrix_sdk_contentscanner.ErrorReason.MCS_MEDIA_NOT_CLEAN +import uniffi.matrix_sdk_contentscanner.ErrorReason.MCS_MEDIA_REQUEST_FAILED +import uniffi.matrix_sdk_contentscanner.ErrorReason.MCS_MIME_TYPE_FORBIDDEN +import uniffi.matrix_sdk_contentscanner.ErrorReason.M_MISSING_TOKEN +import uniffi.matrix_sdk_contentscanner.ErrorReason.M_NOT_FOUND +import uniffi.matrix_sdk_contentscanner.ErrorReason.M_UNKNOWN +import uniffi.matrix_sdk_contentscanner.ErrorReason.M_UNKNOWN_TOKEN + +fun ContentScannerErrorReason.Companion.fromRust(reason: ErrorReason) = when (reason) { + M_UNKNOWN -> ContentScannerErrorReason.M_UNKNOWN + M_MISSING_TOKEN -> ContentScannerErrorReason.M_MISSING_TOKEN + M_UNKNOWN_TOKEN -> ContentScannerErrorReason.M_UNKNOWN_TOKEN + MCS_MALFORMED_JSON -> ContentScannerErrorReason.MCS_MALFORMED_JSON + MCS_MEDIA_FAILED_TO_DECRYPT -> ContentScannerErrorReason.MCS_MEDIA_FAILED_TO_DECRYPT + M_NOT_FOUND -> ContentScannerErrorReason.M_NOT_FOUND + MCS_MEDIA_NOT_CLEAN -> ContentScannerErrorReason.MCS_MEDIA_NOT_CLEAN + MCS_MIME_TYPE_FORBIDDEN -> ContentScannerErrorReason.MCS_MIME_TYPE_FORBIDDEN + MCS_BAD_DECRYPTION -> ContentScannerErrorReason.MCS_BAD_DECRYPTION + MCS_MEDIA_REQUEST_FAILED -> ContentScannerErrorReason.MCS_MEDIA_REQUEST_FAILED +}