jellyflood/Swiftfin/Views/VideoPlayer/VideoPlayer+KeyCommands.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()
// }
// ),
// ])
}
}