Content Scanning View (#5831)

* implement a MediaView to delegate at the view level the usage of the content scanner service, to determine how to render the media.

* fix for a small design mismatch

* fix for greedy error state

* updated naming

* just making some screenshot that have been affected by a string change on Localazy

* pr suggestions + updated strings
This commit is contained in:
Mauro
2026-07-06 16:15:27 +02:00
committed by GitHub
parent 0a77ba6c90
commit a2c1ca06dd
95 changed files with 786 additions and 219 deletions
@@ -0,0 +1,29 @@
//
// Copyright 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.
//
import Foundation
struct ContentScannerServiceMockConfiguration {
/// The verdict reported for every source: `true` when safe, `false` when unsafe, or `nil` to
/// never resolve the scan so that the scanning state remains visible.
var scanResult: Bool?
}
extension ContentScannerServiceMock {
convenience init(_ configuration: ContentScannerServiceMockConfiguration) {
self.init()
scanResultFromSourceReturnValue = configuration.scanResult
loadScanResultFromSourceClosure = { _ in
guard let scanResult = configuration.scanResult else {
try? await Task.sleep(for: .seconds(3600))
return .failure(.failedScanning)
}
return .success(scanResult)
}
}
}
@@ -11,6 +11,7 @@ import Foundation
struct UserSessionMockConfiguration {
var clientProxy: ClientProxyProtocol = ClientProxyMock(.init())
var contentScannerService: ContentScannerServiceProtocol?
}
@MainActor extension UserSessionMock {
@@ -20,6 +21,7 @@ struct UserSessionMockConfiguration {
clientProxy = configuration.clientProxy
mediaProvider = MediaProviderMock(.init())
voiceMessageMediaManager = VoiceMessageMediaManagerMock()
contentScannerService = configuration.contentScannerService
sessionSecurityStatePublisher = CurrentValueSubject<SessionSecurityState, Never>(.init(verificationState: .verified, recoveryState: .enabled)).asCurrentValuePublisher()