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
@@ -21,7 +21,9 @@ struct AudioRoomTimelineView: View {
formattedCaption: timelineItem.content.formattedCaption,
trailingReservedSize: timelineItem.trailingReservedSize,
shouldBoost: timelineItem.shouldBoost,
isAudioFile: true) {
isAudioFile: true,
contentScannerService: context?.contentScannerService,
mediaSource: timelineItem.content.source) {
context?.send(viewAction: .mediaTapped(itemID: timelineItem.id))
}
.accessibilityLabel(L10n.commonAudio)
@@ -31,6 +33,8 @@ struct AudioRoomTimelineView: View {
struct AudioRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static let viewModel = TimelineViewModel.mock
static let scanningViewModel = TimelineViewModel.mock(contentScannerService: ContentScannerServiceMock(.init(scanResult: nil)))
static let unsafeViewModel = TimelineViewModel.mock(contentScannerService: ContentScannerServiceMock(.init(scanResult: false)))
static var previews: some View {
VStack(spacing: 20) {
@@ -42,6 +46,22 @@ struct AudioRoomTimelineView_Previews: PreviewProvider, TestablePreview {
caption: "This song rocks!"))
}
.environmentObject(viewModel.context)
VStack(spacing: 20) {
AudioRoomTimelineView(timelineItem: makeItem(filename: "scanning.ogg",
fileSize: 2 * 1024 * 1024,
caption: "The audio is being scanned."))
.environmentObject(scanningViewModel.context)
.environment(\.timelineContext, scanningViewModel.context)
AudioRoomTimelineView(timelineItem: makeItem(filename: "unsafe.ogg",
fileSize: 2 * 1024 * 1024,
caption: "The audio is not safe."))
.environmentObject(unsafeViewModel.context)
.environment(\.timelineContext, unsafeViewModel.context)
}
.environmentObject(viewModel.context)
.previewDisplayName("Content Scanner")
}
static func makeItem(filename: String, fileSize: UInt, caption: String? = nil) -> AudioRoomTimelineItem {
@@ -55,7 +75,7 @@ struct AudioRoomTimelineView_Previews: PreviewProvider, TestablePreview {
caption: caption,
duration: 300,
waveform: nil,
source: nil,
source: try? MediaSourceProxy(url: .mockMXCAudio, mimeType: nil),
fileSize: fileSize,
contentType: nil))
}