This commit is contained in:
Francesco 2025-06-01 20:44:39 +02:00
parent 3cf264fab8
commit ec380f06d9
2 changed files with 61 additions and 0 deletions

View file

@ -190,6 +190,10 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
private var subtitleDelay: Double = 0.0
var currentPlaybackSpeed: Float = 1.0
private var wasPlayingBeforeBackground = false
private var backgroundToken: Any?
private var foregroundToken: Any?
init(module: ScrapingModule,
urlString: String,
fullUrl: String,
@ -250,6 +254,14 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
super.viewDidLoad()
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()
loadSubtitleSettings()
setupPlayerViewController()
@ -404,6 +416,21 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
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?) {
guard context == &playerItemKVOContext else {
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() {
if let range = skipIntervals.op {
player.seek(to: range.end)
@ -1876,6 +1922,8 @@ class CustomMediaPlayerViewController: UIViewController, UIGestureRecognizerDele
}
}()
client.updateAnimeProgress(
animeId: self.aniListID,
episodeNumber: self.episodeNumber,

View file

@ -14,6 +14,7 @@ class NormalPlayer: AVPlayerViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupHoldGesture()
setupAudioSession()
}
private func setupHoldGesture() {
@ -45,4 +46,16 @@ class NormalPlayer: AVPlayerViewController {
private func endHoldSpeed() {
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")
}
}
}