Implemented message forwarding for media previews and media timelines (#4579)

* implemented message forwarding for media previews and media timelines

* updated tests

* pr suggestion

* fix tests

* fix tests
This commit is contained in:
Mauro
2025-10-07 14:34:14 +02:00
committed by GitHub
parent 6def8e5973
commit e7ee0af70d
42 changed files with 166 additions and 50 deletions
@@ -11,6 +11,8 @@ import Foundation
typealias TimelineMediaPreviewViewModelType = StateStoreViewModel<TimelineMediaPreviewViewState, TimelineMediaPreviewViewAction>
class TimelineMediaPreviewViewModel: TimelineMediaPreviewViewModelType {
static let displayMessageForwardingDelay: TimeInterval = 1.0
let instanceID = UUID()
private let timelineViewModel: TimelineViewModelProtocol
@@ -86,6 +88,8 @@ class TimelineMediaPreviewViewModel: TimelineMediaPreviewViewModelType {
Task { await saveCurrentItem() }
case .redact:
state.bindings.redactConfirmationItem = item
case .forward(let itemID):
Task { await forwardItem(itemID: itemID) }
default:
MXLog.error("Received unexpected action: \(action)")
}
@@ -96,6 +100,12 @@ class TimelineMediaPreviewViewModel: TimelineMediaPreviewViewModelType {
}
}
private func forwardItem(itemID: TimelineItemIdentifier) async {
guard let forwardingItem = await timelineViewModel.makeForwardingItem(for: itemID) else { return }
state.previewControllerDriver.send(.dismissDetailsSheet)
actionsSubject.send(.displayMessageForwarding(forwardingItem))
}
private func updateCurrentItem(_ previewItem: TimelineMediaPreviewItem) async {
if case let .media(item) = previewItem {
item.downloadError = nil // Clear any existing error.