mirror of
https://github.com/cranci1/Sora.git
synced 2026-05-20 08:41:46 +00:00
test
This commit is contained in:
parent
3cf264fab8
commit
ec380f06d9
2 changed files with 61 additions and 0 deletions
|
|
@ -190,6 +190,10 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
private var subtitleDelay: Double = 0.0
|
private var subtitleDelay: Double = 0.0
|
||||||
var currentPlaybackSpeed: Float = 1.0
|
var currentPlaybackSpeed: Float = 1.0
|
||||||
|
|
||||||
|
private var wasPlayingBeforeBackground = false
|
||||||
|
private var backgroundToken: Any?
|
||||||
|
private var foregroundToken: Any?
|
||||||
|
|
||||||
init(module: ScrapingModule,
|
init(module: ScrapingModule,
|
||||||
urlString: String,
|
urlString: String,
|
||||||
fullUrl: String,
|
fullUrl: String,
|
||||||
|
|
@ -250,6 +254,14 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
view.backgroundColor = .black
|
view.backgroundColor = .black
|
||||||
|
|
||||||
|
backgroundToken = NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, queue: .main ) { [weak self] _ in
|
||||||
|
self?.handleEnterBackground()
|
||||||
|
}
|
||||||
|
|
||||||
|
foregroundToken = NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main ) { [weak self] _ in
|
||||||
|
self?.handleBecomeActive()
|
||||||
|
}
|
||||||
|
|
||||||
setupHoldGesture()
|
setupHoldGesture()
|
||||||
loadSubtitleSettings()
|
loadSubtitleSettings()
|
||||||
setupPlayerViewController()
|
setupPlayerViewController()
|
||||||
|
|
@ -404,6 +416,21 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
player.pause()
|
player.pause()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
if let token = timeObserverToken {
|
||||||
|
player.removeTimeObserver(token)
|
||||||
|
}
|
||||||
|
|
||||||
|
if let backgroundToken = backgroundToken {
|
||||||
|
NotificationCenter.default.removeObserver(backgroundToken)
|
||||||
|
}
|
||||||
|
if let foregroundToken = foregroundToken {
|
||||||
|
NotificationCenter.default.removeObserver(foregroundToken)
|
||||||
|
}
|
||||||
|
|
||||||
|
player.pause()
|
||||||
|
}
|
||||||
|
|
||||||
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
|
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
|
||||||
guard context == &playerItemKVOContext else {
|
guard context == &playerItemKVOContext else {
|
||||||
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
|
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
|
||||||
|
|
@ -1766,6 +1793,25 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleEnterBackground() {
|
||||||
|
wasPlayingBeforeBackground = player.rate > 0
|
||||||
|
if isPipAutoEnabled && AVPictureInPictureController.isPictureInPictureSupported() {
|
||||||
|
startPipIfNeeded()
|
||||||
|
} else {
|
||||||
|
player.pause()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func handleBecomeActive() {
|
||||||
|
if wasPlayingBeforeBackground &&
|
||||||
|
!(pipController?.isPictureInPictureActive ?? false) {
|
||||||
|
player.play()
|
||||||
|
player.rate = currentPlaybackSpeed
|
||||||
|
isPlaying = true
|
||||||
|
playPauseButton.image = UIImage(systemName: "pause.fill")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@objc private func skipIntro() {
|
@objc private func skipIntro() {
|
||||||
if let range = skipIntervals.op {
|
if let range = skipIntervals.op {
|
||||||
player.seek(to: range.end)
|
player.seek(to: range.end)
|
||||||
|
|
@ -1876,6 +1922,8 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
client.updateAnimeProgress(
|
client.updateAnimeProgress(
|
||||||
animeId: self.aniListID,
|
animeId: self.aniListID,
|
||||||
episodeNumber: self.episodeNumber,
|
episodeNumber: self.episodeNumber,
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ class NormalPlayer: AVPlayerViewController {
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
setupHoldGesture()
|
setupHoldGesture()
|
||||||
|
setupAudioSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setupHoldGesture() {
|
private func setupHoldGesture() {
|
||||||
|
|
@ -45,4 +46,16 @@ class NormalPlayer: AVPlayerViewController {
|
||||||
private func endHoldSpeed() {
|
private func endHoldSpeed() {
|
||||||
player?.rate = originalRate
|
player?.rate = originalRate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setupAudioSession() {
|
||||||
|
do {
|
||||||
|
let audioSession = AVAudioSession.sharedInstance()
|
||||||
|
try audioSession.setCategory(.playback, mode: .moviePlayback, options: .mixWithOthers)
|
||||||
|
try audioSession.setActive(true)
|
||||||
|
|
||||||
|
try audioSession.overrideOutputAudioPort(.speaker)
|
||||||
|
} catch {
|
||||||
|
Logger.shared.log("Didn't set up AVAudioSession: \(error)", type: "Debug")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue