mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-19 23:52:09 +00:00
skip increments logic
This commit is contained in:
parent
517ccb8983
commit
de08c14918
2 changed files with 75 additions and 15 deletions
|
|
@ -207,12 +207,24 @@ class CustomMediaPlayerViewController: UIViewController {
|
|||
blackCoverView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
|
||||
])
|
||||
|
||||
backwardButton = UIImageView(image: UIImage(systemName: "gobackward.10"))
|
||||
backwardButton = UIImageView(image: UIImage(systemName: "gobackward"))
|
||||
backwardButton.tintColor = .white
|
||||
backwardButton.contentMode = .scaleAspectFit
|
||||
backwardButton.isUserInteractionEnabled = true
|
||||
|
||||
// 1) Tap gesture → normal skip
|
||||
let backwardTap = UITapGestureRecognizer(target: self, action: #selector(seekBackward))
|
||||
backwardTap.numberOfTapsRequired = 1
|
||||
backwardButton.addGestureRecognizer(backwardTap)
|
||||
|
||||
// 2) Long-press gesture → hold skip
|
||||
let backwardLongPress = UILongPressGestureRecognizer(target: self, action: #selector(seekBackwardLongPress(_:)))
|
||||
backwardLongPress.minimumPressDuration = 0.5 // Adjust as needed
|
||||
backwardButton.addGestureRecognizer(backwardLongPress)
|
||||
|
||||
// Make sure the tap doesn’t fire if the long-press is recognized
|
||||
backwardTap.require(toFail: backwardLongPress)
|
||||
|
||||
controlsContainerView.addSubview(backwardButton)
|
||||
backwardButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
||||
|
|
@ -225,14 +237,23 @@ class CustomMediaPlayerViewController: UIViewController {
|
|||
controlsContainerView.addSubview(playPauseButton)
|
||||
playPauseButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
||||
forwardButton = UIImageView(image: UIImage(systemName: "goforward.10"))
|
||||
forwardButton.tintColor = .white
|
||||
forwardButton.contentMode = .scaleAspectFit
|
||||
forwardButton.isUserInteractionEnabled = true
|
||||
let forwardTap = UITapGestureRecognizer(target: self, action: #selector(seekForward))
|
||||
forwardButton.addGestureRecognizer(forwardTap)
|
||||
controlsContainerView.addSubview(forwardButton)
|
||||
forwardButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
forwardButton = UIImageView(image: UIImage(systemName: "goforward"))
|
||||
forwardButton.tintColor = .white
|
||||
forwardButton.contentMode = .scaleAspectFit
|
||||
forwardButton.isUserInteractionEnabled = true
|
||||
|
||||
let forwardTap = UITapGestureRecognizer(target: self, action: #selector(seekForward))
|
||||
forwardTap.numberOfTapsRequired = 1
|
||||
forwardButton.addGestureRecognizer(forwardTap)
|
||||
|
||||
let forwardLongPress = UILongPressGestureRecognizer(target: self, action: #selector(seekForwardLongPress(_:)))
|
||||
forwardLongPress.minimumPressDuration = 0.5
|
||||
forwardButton.addGestureRecognizer(forwardLongPress)
|
||||
|
||||
forwardTap.require(toFail: forwardLongPress)
|
||||
|
||||
controlsContainerView.addSubview(forwardButton)
|
||||
forwardButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
||||
let sliderView = MusicProgressSlider(
|
||||
value: Binding(get: { self.sliderViewModel.sliderValue },
|
||||
|
|
@ -538,13 +559,36 @@ class CustomMediaPlayerViewController: UIViewController {
|
|||
}
|
||||
}
|
||||
|
||||
@objc func seekBackward() {
|
||||
currentTimeVal = max(currentTimeVal - 10, 0)
|
||||
player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600))
|
||||
@objc func seekBackwardLongPress(_ gesture: UILongPressGestureRecognizer) {
|
||||
// Only do the skip when the gesture first begins
|
||||
if gesture.state == .began {
|
||||
let holdValue = UserDefaults.standard.double(forKey: "skipIncrementHold")
|
||||
let finalSkip = holdValue > 0 ? holdValue : 30 // fallback to 30 if not set
|
||||
currentTimeVal = max(currentTimeVal - finalSkip, 0)
|
||||
player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600))
|
||||
}
|
||||
}
|
||||
|
||||
@objc func seekForwardLongPress(_ gesture: UILongPressGestureRecognizer) {
|
||||
if gesture.state == .began {
|
||||
let holdValue = UserDefaults.standard.double(forKey: "skipIncrementHold")
|
||||
let finalSkip = holdValue > 0 ? holdValue : 30
|
||||
currentTimeVal = min(currentTimeVal + finalSkip, duration)
|
||||
player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600))
|
||||
}
|
||||
}
|
||||
|
||||
@objc func seekBackward() {
|
||||
let skipValue = UserDefaults.standard.double(forKey: "skipIncrement")
|
||||
let finalSkip = skipValue > 0 ? skipValue : 10
|
||||
currentTimeVal = max(currentTimeVal - finalSkip, 0)
|
||||
player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600))
|
||||
}
|
||||
|
||||
@objc func seekForward() {
|
||||
currentTimeVal = min(currentTimeVal + 10, duration)
|
||||
let skipValue = UserDefaults.standard.double(forKey: "skipIncrement")
|
||||
let finalSkip = skipValue > 0 ? skipValue : 10
|
||||
currentTimeVal = min(currentTimeVal + finalSkip, duration)
|
||||
player.seek(to: CMTime(seconds: currentTimeVal, preferredTimescale: 600))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,12 +13,14 @@ struct SettingsViewPlayer: View {
|
|||
@AppStorage("hideNextButton") private var isHideNextButton = false
|
||||
@AppStorage("rememberPlaySpeed") private var isRememberPlaySpeed = false
|
||||
@AppStorage("holdSpeedPlayer") private var holdSpeedPlayer: Double = 2.0
|
||||
@AppStorage("skipIncrement") private var skipIncrement: Double = 10.0
|
||||
@AppStorage("skipIncrementHold") private var skipIncrementHold: Double = 30.0
|
||||
|
||||
private let mediaPlayers = ["Default", "VLC", "OutPlayer", "Infuse", "nPlayer", "Sora"]
|
||||
|
||||
var body: some View {
|
||||
Form {
|
||||
Section(header: Text("Media Player"), footer: Text("Some features are limited to the Sora and Default player, such as ForceLandscape and holdSpeed")) {
|
||||
Section(header: Text("Media Player"), footer: Text("Some features are limited to the Sora and Default player, such as ForceLandscape, holdSpeed and custom time skip increments.")) {
|
||||
HStack {
|
||||
Text("Media Player")
|
||||
Spacer()
|
||||
|
|
@ -56,7 +58,21 @@ struct SettingsViewPlayer: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section(header: Text("Skip Settings")) {
|
||||
// Normal skip
|
||||
HStack {
|
||||
Text("Tap Skip:")
|
||||
Spacer()
|
||||
Stepper("\(Int(skipIncrement))s", value: $skipIncrement, in: 5...300, step: 5)
|
||||
}
|
||||
|
||||
// Long-press skip
|
||||
HStack {
|
||||
Text("Long press Skip:")
|
||||
Spacer()
|
||||
Stepper("\(Int(skipIncrementHold))s", value: $skipIncrementHold, in: 5...300, step: 5)
|
||||
}
|
||||
}
|
||||
SubtitleSettingsSection()
|
||||
}
|
||||
.navigationTitle("Player")
|
||||
|
|
|
|||
Loading…
Reference in a new issue