236 lines
9.9 KiB
Swift
236 lines
9.9 KiB
Swift
//
|
|
// Swiftfin is subject to the terms of the Mozilla Public
|
|
// License, v2.0. If a copy of the MPL was not distributed with this
|
|
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
//
|
|
// Copyright (c) 2023 Jellyfin & Jellyfin Contributors
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
extension View {
|
|
|
|
func videoPlayerKeyCommands(
|
|
gestureStateHandler: VideoPlayer.GestureStateHandler,
|
|
videoPlayerManager: VideoPlayerManager,
|
|
updateViewProxy: UpdateViewProxy
|
|
) -> some View {
|
|
self
|
|
.addingKeyCommand(
|
|
title: L10n.playAndPause,
|
|
input: " "
|
|
) {
|
|
if videoPlayerManager.state == .playing {
|
|
videoPlayerManager.proxy.pause()
|
|
updateViewProxy.present(systemName: "pause.fill", title: "Pause")
|
|
} else {
|
|
videoPlayerManager.proxy.play()
|
|
updateViewProxy.present(systemName: "play.fill", title: "Play")
|
|
}
|
|
}
|
|
.addingKeyCommand(
|
|
title: L10n.jumpForward,
|
|
input: UIKeyCommand.inputRightArrow
|
|
) {
|
|
if gestureStateHandler.jumpForwardKeyPressActive {
|
|
gestureStateHandler.jumpForwardKeyPressAmount += 1
|
|
gestureStateHandler.jumpForwardKeyPressWorkItem?.cancel()
|
|
|
|
let task = DispatchWorkItem {
|
|
gestureStateHandler.jumpForwardKeyPressActive = false
|
|
gestureStateHandler.jumpForwardKeyPressAmount = 0
|
|
}
|
|
|
|
gestureStateHandler.jumpForwardKeyPressWorkItem = task
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
} else {
|
|
gestureStateHandler.jumpForwardKeyPressActive = true
|
|
gestureStateHandler.jumpForwardKeyPressAmount += 1
|
|
|
|
let task = DispatchWorkItem {
|
|
gestureStateHandler.jumpForwardKeyPressActive = false
|
|
gestureStateHandler.jumpForwardKeyPressAmount = 0
|
|
}
|
|
|
|
gestureStateHandler.jumpForwardKeyPressWorkItem = task
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
}
|
|
|
|
// jumpAction(unitPoint: .init(x: 1, y: 0), amount: gestureStateHandler.jumpForwardKeyPressAmount)
|
|
}
|
|
.addingKeyCommand(
|
|
title: L10n.jumpBackward,
|
|
input: UIKeyCommand.inputLeftArrow
|
|
) {
|
|
if gestureStateHandler.jumpBackwardKeyPressActive {
|
|
gestureStateHandler.jumpBackwardKeyPressAmount += 1
|
|
gestureStateHandler.jumpBackwardKeyPressWorkItem?.cancel()
|
|
|
|
let task = DispatchWorkItem {
|
|
gestureStateHandler.jumpBackwardKeyPressActive = false
|
|
gestureStateHandler.jumpBackwardKeyPressAmount = 0
|
|
}
|
|
|
|
gestureStateHandler.jumpBackwardKeyPressWorkItem = task
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
} else {
|
|
gestureStateHandler.jumpBackwardKeyPressActive = true
|
|
gestureStateHandler.jumpBackwardKeyPressAmount += 1
|
|
|
|
let task = DispatchWorkItem {
|
|
gestureStateHandler.jumpBackwardKeyPressActive = false
|
|
gestureStateHandler.jumpBackwardKeyPressAmount = 0
|
|
}
|
|
|
|
gestureStateHandler.jumpBackwardKeyPressWorkItem = task
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
}
|
|
|
|
// jumpAction(unitPoint: .init(x: 0, y: 0), amount: gestureStateHandler.jumpBackwardKeyPressAmount)
|
|
}
|
|
|
|
// self.keyCommands([
|
|
// .init(
|
|
// title: L10n.playAndPause,
|
|
// input: " ",
|
|
// action: {
|
|
// if videoPlayerManager.state == .playing {
|
|
// videoPlayerManager.proxy.pause()
|
|
// updateViewProxy.present(systemName: "pause.fill", title: "Pause")
|
|
// } else {
|
|
// videoPlayerManager.proxy.play()
|
|
// updateViewProxy.present(systemName: "play.fill", title: "Play")
|
|
// }
|
|
// }
|
|
// ),
|
|
// .init(
|
|
// title: L10n.jumpForward,
|
|
// input: UIKeyCommand.inputRightArrow,
|
|
// action: {
|
|
// if gestureStateHandler.jumpForwardKeyPressActive {
|
|
// gestureStateHandler.jumpForwardKeyPressAmount += 1
|
|
// gestureStateHandler.jumpForwardKeyPressWorkItem?.cancel()
|
|
//
|
|
// let task = DispatchWorkItem {
|
|
// gestureStateHandler.jumpForwardKeyPressActive = false
|
|
// gestureStateHandler.jumpForwardKeyPressAmount = 0
|
|
// }
|
|
//
|
|
// gestureStateHandler.jumpForwardKeyPressWorkItem = task
|
|
//
|
|
// DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
// } else {
|
|
// gestureStateHandler.jumpForwardKeyPressActive = true
|
|
// gestureStateHandler.jumpForwardKeyPressAmount += 1
|
|
//
|
|
// let task = DispatchWorkItem {
|
|
// gestureStateHandler.jumpForwardKeyPressActive = false
|
|
// gestureStateHandler.jumpForwardKeyPressAmount = 0
|
|
// }
|
|
//
|
|
// gestureStateHandler.jumpForwardKeyPressWorkItem = task
|
|
//
|
|
// DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
// }
|
|
//
|
|
//// jumpAction(unitPoint: .init(x: 1, y: 0), amount: gestureStateHandler.jumpForwardKeyPressAmount)
|
|
// }
|
|
// ),
|
|
// .init(
|
|
// title: L10n.jumpBackward,
|
|
// input: UIKeyCommand.inputLeftArrow,
|
|
// action: {
|
|
// if gestureStateHandler.jumpBackwardKeyPressActive {
|
|
// gestureStateHandler.jumpBackwardKeyPressAmount += 1
|
|
// gestureStateHandler.jumpBackwardKeyPressWorkItem?.cancel()
|
|
//
|
|
// let task = DispatchWorkItem {
|
|
// gestureStateHandler.jumpBackwardKeyPressActive = false
|
|
// gestureStateHandler.jumpBackwardKeyPressAmount = 0
|
|
// }
|
|
//
|
|
// gestureStateHandler.jumpBackwardKeyPressWorkItem = task
|
|
//
|
|
// DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
// } else {
|
|
// gestureStateHandler.jumpBackwardKeyPressActive = true
|
|
// gestureStateHandler.jumpBackwardKeyPressAmount += 1
|
|
//
|
|
// let task = DispatchWorkItem {
|
|
// gestureStateHandler.jumpBackwardKeyPressActive = false
|
|
// gestureStateHandler.jumpBackwardKeyPressAmount = 0
|
|
// }
|
|
//
|
|
// gestureStateHandler.jumpBackwardKeyPressWorkItem = task
|
|
//
|
|
// DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: task)
|
|
// }
|
|
//
|
|
//// jumpAction(unitPoint: .init(x: 0, y: 0), amount: gestureStateHandler.jumpBackwardKeyPressAmount)
|
|
// }
|
|
// ),
|
|
// .init(
|
|
// title: "Decrease Playback Speed",
|
|
// input: "[",
|
|
// modifierFlags: .command,
|
|
// action: {
|
|
// let clampedPlaybackSpeed = clamp(
|
|
// videoPlayerManager.playbackSpeed - 0.25,
|
|
// min: 0.25,
|
|
// max: 5.0
|
|
// )
|
|
//
|
|
// updateViewProxy.present(systemName: "speedometer", title: clampedPlaybackSpeed.rateLabel)
|
|
// videoPlayerManager.proxy.setRate(.absolute(clampedPlaybackSpeed))
|
|
// }
|
|
// ),
|
|
// .init(
|
|
// title: "Increase Playback Speed",
|
|
// input: "]",
|
|
// modifierFlags: .command,
|
|
// action: {
|
|
// let clampedPlaybackSpeed = clamp(
|
|
// videoPlayerManager.playbackSpeed + 0.25,
|
|
// min: 0.25,
|
|
// max: 5.0
|
|
// )
|
|
//
|
|
// updateViewProxy.present(systemName: "speedometer", title: clampedPlaybackSpeed.rateLabel)
|
|
// videoPlayerManager.proxy.setRate(.absolute(clampedPlaybackSpeed))
|
|
// }
|
|
// ),
|
|
// .init(
|
|
// title: "Reset Playback Speed",
|
|
// input: "\\",
|
|
// modifierFlags: .command,
|
|
// action: {
|
|
// let clampedPlaybackSpeed: Float = 1
|
|
//
|
|
// updateViewProxy.present(systemName: "speedometer", title: clampedPlaybackSpeed.rateLabel)
|
|
// videoPlayerManager.proxy.setRate(.absolute(clampedPlaybackSpeed))
|
|
// }
|
|
// ),
|
|
// .init(
|
|
// title: L10n.nextItem,
|
|
// input: UIKeyCommand.inputRightArrow,
|
|
// modifierFlags: .command,
|
|
// action: {
|
|
// videoPlayerManager.selectNextViewModel()
|
|
// }
|
|
// ),
|
|
// .init(
|
|
// title: L10n.nextItem,
|
|
// input: UIKeyCommand.inputLeftArrow,
|
|
// modifierFlags: .command,
|
|
// action: {
|
|
// videoPlayerManager.selectPreviousViewModel()
|
|
// }
|
|
// ),
|
|
// ])
|
|
}
|
|
}
|