Fix and add default video jump lengths
This commit is contained in:
parent
d1e3e08921
commit
114c070328
|
@ -1179,8 +1179,8 @@
|
||||||
E10EAA48277BB6D7000269ED /* Overlays */ = {
|
E10EAA48277BB6D7000269ED /* Overlays */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
E1C812BB277A8E5D00918266 /* VLCPlayerCompactOverlayView.swift */,
|
|
||||||
E10EAA49277BB6F5000269ED /* VideoPlayerOverlay.swift */,
|
E10EAA49277BB6F5000269ED /* VideoPlayerOverlay.swift */,
|
||||||
|
E1C812BB277A8E5D00918266 /* VLCPlayerCompactOverlayView.swift */,
|
||||||
E1C812B7277A8E5D00918266 /* VLCPlayerOverlayView.swift */,
|
E1C812B7277A8E5D00918266 /* VLCPlayerOverlayView.swift */,
|
||||||
);
|
);
|
||||||
path = Overlays;
|
path = Overlays;
|
||||||
|
@ -1309,10 +1309,10 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
E1C812B9277A8E5D00918266 /* NativePlayerViewController.swift */,
|
E1C812B9277A8E5D00918266 /* NativePlayerViewController.swift */,
|
||||||
|
E10EAA48277BB6D7000269ED /* Overlays */,
|
||||||
E1C812B4277A8E5D00918266 /* PlaybackSpeed.swift */,
|
E1C812B4277A8E5D00918266 /* PlaybackSpeed.swift */,
|
||||||
E1C812B5277A8E5D00918266 /* PlayerOverlayDelegate.swift */,
|
E1C812B5277A8E5D00918266 /* PlayerOverlayDelegate.swift */,
|
||||||
E1C812B8277A8E5D00918266 /* VideoPlayerView.swift */,
|
E1C812B8277A8E5D00918266 /* VideoPlayerView.swift */,
|
||||||
E10EAA48277BB6D7000269ED /* Overlays */,
|
|
||||||
E1C812B6277A8E5D00918266 /* VLCPlayerViewController.swift */,
|
E1C812B6277A8E5D00918266 /* VLCPlayerViewController.swift */,
|
||||||
);
|
);
|
||||||
path = VideoPlayer;
|
path = VideoPlayer;
|
||||||
|
|
|
@ -6,14 +6,17 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import Combine
|
import Combine
|
||||||
|
import Defaults
|
||||||
|
import JellyfinAPI
|
||||||
import MobileVLCKit
|
import MobileVLCKit
|
||||||
import Sliders
|
import Sliders
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import JellyfinAPI
|
|
||||||
|
|
||||||
struct VLCPlayerCompactOverlayView: View, VideoPlayerOverlay {
|
struct VLCPlayerCompactOverlayView: View, VideoPlayerOverlay {
|
||||||
|
|
||||||
@ObservedObject var viewModel: VideoPlayerViewModel
|
@ObservedObject var viewModel: VideoPlayerViewModel
|
||||||
|
@Default(.videoPlayerJumpForward) var jumpForwardLength
|
||||||
|
@Default(.videoPlayerJumpBackward) var jumpBackwardLength
|
||||||
|
|
||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
private var mainButtonView: some View {
|
private var mainButtonView: some View {
|
||||||
|
@ -192,7 +195,7 @@ struct VLCPlayerCompactOverlayView: View, VideoPlayerOverlay {
|
||||||
Button {
|
Button {
|
||||||
viewModel.playerOverlayDelegate?.didSelectBackward()
|
viewModel.playerOverlayDelegate?.didSelectBackward()
|
||||||
} label: {
|
} label: {
|
||||||
Image(systemName: "gobackward.10")
|
Image(systemName: jumpBackwardLength.backwardImageLabel)
|
||||||
.padding(.horizontal, 5)
|
.padding(.horizontal, 5)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +210,7 @@ struct VLCPlayerCompactOverlayView: View, VideoPlayerOverlay {
|
||||||
Button {
|
Button {
|
||||||
viewModel.playerOverlayDelegate?.didSelectForward()
|
viewModel.playerOverlayDelegate?.didSelectForward()
|
||||||
} label: {
|
} label: {
|
||||||
Image(systemName: "goforward.10")
|
Image(systemName: jumpForwardLength.forwardImageLabel)
|
||||||
.padding(.horizontal, 5)
|
.padding(.horizontal, 5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import AVKit
|
import AVKit
|
||||||
import AVFoundation
|
import AVFoundation
|
||||||
import Combine
|
import Combine
|
||||||
|
import Defaults
|
||||||
import JellyfinAPI
|
import JellyfinAPI
|
||||||
import MediaPlayer
|
import MediaPlayer
|
||||||
import MobileVLCKit
|
import MobileVLCKit
|
||||||
|
@ -32,6 +33,14 @@ class VLCPlayerViewController: UIViewController {
|
||||||
return overlayHostingController.view.alpha > 0
|
return overlayHostingController.view.alpha > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var jumpForwardLength: VideoPlayerJumpLength {
|
||||||
|
return Defaults[.videoPlayerJumpForward]
|
||||||
|
}
|
||||||
|
|
||||||
|
private var jumpBackwardLength: VideoPlayerJumpLength {
|
||||||
|
return Defaults[.videoPlayerJumpBackward]
|
||||||
|
}
|
||||||
|
|
||||||
private lazy var videoContentView = makeVideoContentView()
|
private lazy var videoContentView = makeVideoContentView()
|
||||||
private lazy var tapGestureView = makeTapGestureView()
|
private lazy var tapGestureView = makeTapGestureView()
|
||||||
private lazy var overlayHostingController = makeOverlayHostingController()
|
private lazy var overlayHostingController = makeOverlayHostingController()
|
||||||
|
@ -283,7 +292,7 @@ extension VLCPlayerViewController {
|
||||||
// MARK: OverlayTimer
|
// MARK: OverlayTimer
|
||||||
extension VLCPlayerViewController {
|
extension VLCPlayerViewController {
|
||||||
|
|
||||||
private func restartOverlayDismissTimer(interval: Double = 2) {
|
private func restartOverlayDismissTimer(interval: Double = 3) {
|
||||||
self.overlayDismissTimer?.invalidate()
|
self.overlayDismissTimer?.invalidate()
|
||||||
self.overlayDismissTimer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(dismissTimerFired), userInfo: nil, repeats: false)
|
self.overlayDismissTimer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(dismissTimerFired), userInfo: nil, repeats: false)
|
||||||
}
|
}
|
||||||
|
@ -304,8 +313,6 @@ extension VLCPlayerViewController: VLCMediaPlayerDelegate {
|
||||||
func mediaPlayerStateChanged(_ aNotification: Notification!) {
|
func mediaPlayerStateChanged(_ aNotification: Notification!) {
|
||||||
|
|
||||||
self.viewModel.playerState = vlcMediaPlayer.state
|
self.viewModel.playerState = vlcMediaPlayer.state
|
||||||
|
|
||||||
print("Player state changed: \(viewModel.playerState.rawValue)")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func mediaPlayerTimeChanged(_ aNotification: Notification!) {
|
func mediaPlayerTimeChanged(_ aNotification: Notification!) {
|
||||||
|
@ -337,7 +344,6 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
|
||||||
|
|
||||||
func didSelectAudioStream(index: Int) {
|
func didSelectAudioStream(index: Int) {
|
||||||
vlcMediaPlayer.currentAudioTrackIndex = Int32(index)
|
vlcMediaPlayer.currentAudioTrackIndex = Int32(index)
|
||||||
print("New audio index: \(index)")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func didSelectSubtitleStream(index: Int) {
|
func didSelectSubtitleStream(index: Int) {
|
||||||
|
@ -347,7 +353,6 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
|
||||||
// set in case weren't shown
|
// set in case weren't shown
|
||||||
viewModel.subtitlesEnabled = true
|
viewModel.subtitlesEnabled = true
|
||||||
}
|
}
|
||||||
print("New subtitle index: \(index)")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func didSelectClose() {
|
func didSelectClose() {
|
||||||
|
@ -388,13 +393,13 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func didSelectBackward() {
|
func didSelectBackward() {
|
||||||
vlcMediaPlayer.jumpBackward(10)
|
vlcMediaPlayer.jumpBackward(jumpBackwardLength.rawValue)
|
||||||
|
|
||||||
restartOverlayDismissTimer()
|
restartOverlayDismissTimer()
|
||||||
}
|
}
|
||||||
|
|
||||||
func didSelectForward() {
|
func didSelectForward() {
|
||||||
vlcMediaPlayer.jumpForward(10)
|
vlcMediaPlayer.jumpForward(jumpForwardLength.rawValue)
|
||||||
|
|
||||||
restartOverlayDismissTimer()
|
restartOverlayDismissTimer()
|
||||||
}
|
}
|
||||||
|
@ -443,7 +448,5 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
restartOverlayDismissTimer()
|
restartOverlayDismissTimer()
|
||||||
|
|
||||||
print("Scrubbed position: \(position)")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,40 +19,30 @@ enum VideoPlayerJumpLength: Int32, CaseIterable, Defaults.Serializable {
|
||||||
var label: String {
|
var label: String {
|
||||||
return "\(self.rawValue) seconds"
|
return "\(self.rawValue) seconds"
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateForwardImage(with font: UIFont) -> UIImage {
|
var forwardImageLabel: String {
|
||||||
let config = UIImage.SymbolConfiguration(font: font)
|
|
||||||
let systemName: String
|
|
||||||
|
|
||||||
switch self {
|
switch self {
|
||||||
case .thirty:
|
case .thirty:
|
||||||
systemName = "goforward.30"
|
return "goforward.30"
|
||||||
case .fifteen:
|
case .fifteen:
|
||||||
systemName = "goforward.15"
|
return "goforward.15"
|
||||||
case .ten:
|
case .ten:
|
||||||
systemName = "goforward.10"
|
return "goforward.10"
|
||||||
case .five:
|
case .five:
|
||||||
systemName = "goforward.5"
|
return "goforward.5"
|
||||||
}
|
}
|
||||||
|
|
||||||
return UIImage(systemName: systemName, withConfiguration: config)!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateBackwardImage(with font: UIFont) -> UIImage {
|
var backwardImageLabel: String {
|
||||||
let config = UIImage.SymbolConfiguration(font: font)
|
|
||||||
let systemName: String
|
|
||||||
|
|
||||||
switch self {
|
switch self {
|
||||||
case .thirty:
|
case .thirty:
|
||||||
systemName = "gobackward.30"
|
return "gobackward.30"
|
||||||
case .fifteen:
|
case .fifteen:
|
||||||
systemName = "gobackward.15"
|
return "gobackward.15"
|
||||||
case .ten:
|
case .ten:
|
||||||
systemName = "gobackward.10"
|
return "gobackward.10"
|
||||||
case .five:
|
case .five:
|
||||||
systemName = "gobackward.5"
|
return "gobackward.5"
|
||||||
}
|
}
|
||||||
|
|
||||||
return UIImage(systemName: systemName, withConfiguration: config)!
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue