mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Add a fullscreen button to TimelineMediaPreviewScreen and hook up swiping through the timeline. (#3638)
* Add a fullscreen button to media previews - Not ideal but the gestures conflict with the preview controller. * Don't un-flip the preview thumbnail until the preview has disappeared, and only do it on iOS 18. * Add all of the loaded items for previewing in the preview controller.
This commit is contained in:
@@ -15,11 +15,19 @@ enum TimelineMediaPreviewViewModelAction: Equatable {
|
||||
}
|
||||
|
||||
struct TimelineMediaPreviewViewState: BindableState {
|
||||
/// All of the items in the timeline that can be previewed.
|
||||
var previewItems: [TimelineMediaPreviewItem]
|
||||
/// The index of the initial item inside of `previewItems` that is to be shown.
|
||||
let initialItemIndex: Int
|
||||
|
||||
/// The media item that is currently being previewed.
|
||||
var currentItem: TimelineMediaPreviewItem
|
||||
/// All of the available actions for the current item.
|
||||
var currentItemActions: TimelineItemMenuActions?
|
||||
|
||||
/// The namespace used for the zoom transition.
|
||||
let transitionNamespace: Namespace.ID
|
||||
/// A publisher that the view model uses to signal to the QLPreviewController when the current item has been loaded.
|
||||
let fileLoadedPublisher = PassthroughSubject<TimelineItemIdentifier, Never>()
|
||||
|
||||
var bindings = TimelineMediaPreviewViewStateBindings()
|
||||
@@ -49,6 +57,21 @@ class TimelineMediaPreviewItem: NSObject, QLPreviewItem, Identifiable {
|
||||
self.timelineItem = timelineItem
|
||||
}
|
||||
|
||||
init?(roomTimelineItemViewState: RoomTimelineItemViewState) {
|
||||
switch roomTimelineItemViewState.type {
|
||||
case .audio(let audioRoomTimelineItem):
|
||||
timelineItem = audioRoomTimelineItem
|
||||
case .file(let fileRoomTimelineItem):
|
||||
timelineItem = fileRoomTimelineItem
|
||||
case .image(let imageRoomTimelineItem):
|
||||
timelineItem = imageRoomTimelineItem
|
||||
case .video(let videoRoomTimelineItem):
|
||||
timelineItem = videoRoomTimelineItem
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Identifiable
|
||||
|
||||
var id: TimelineItemIdentifier { timelineItem.id }
|
||||
|
||||
Reference in New Issue
Block a user