marinofaggiana 3 năm trước cách đây
mục cha
commit
704e39d868

+ 1 - 3
iOSClient/AppDelegate.swift

@@ -63,9 +63,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
     var pasteboardOcIds: [String] = []
     var shares: [tableShare] = []
     var timerErrorNetworking: Timer?
-    
-    var player: AVPlayer?
-    
+        
     func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
         
         let userAgent = CCUtility.getUserAgent() as String

+ 19 - 18
iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift

@@ -34,10 +34,11 @@ class NCPlayer: NSObject {
     private var playerToolBar: NCPlayerToolBar?
 
     public var metadata: tableMetadata?
+    public var player: AVPlayer?
     public var videoLayer: AVPlayerLayer?
 
     init(url: URL) {
-        appDelegate.player = AVPlayer(url: url)
+        self.player = AVPlayer(url: url)
     }
     
     deinit {
@@ -49,28 +50,28 @@ class NCPlayer: NSObject {
         self.playerToolBar = playerToolBar
         self.metadata = metadata
         
-        appDelegate.player?.isMuted = CCUtility.getAudioMute()
-        appDelegate.player?.seek(to: .zero)
+        self.player?.isMuted = CCUtility.getAudioMute()
+        self.player?.seek(to: .zero)
 
         // At end go back to start & show toolbar
-        NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: appDelegate.player?.currentItem, queue: .main) { (notification) in
-            if let item = notification.object as? AVPlayerItem, let currentItem = self.appDelegate.player?.currentItem, item == currentItem {
-                self.appDelegate.player?.seek(to: .zero)
+        NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem, queue: .main) { (notification) in
+            if let item = notification.object as? AVPlayerItem, let currentItem = self.player?.currentItem, item == currentItem {
+                self.player?.seek(to: .zero)
                 self.playerToolBar?.showToolBar(metadata: metadata, detailView: nil)
                 NCKTVHTTPCache.shared.saveCache(metadata: metadata)
             }
         }
         
-        appDelegate.player?.currentItem?.asset.loadValuesAsynchronously(forKeys: ["duration", "playable"], completionHandler: {
-            if let duration: CMTime = (self.appDelegate.player?.currentItem?.asset.duration) {
+        self.player?.currentItem?.asset.loadValuesAsynchronously(forKeys: ["duration", "playable"], completionHandler: {
+            if let duration: CMTime = (self.player?.currentItem?.asset.duration) {
                 var error: NSError? = nil
-                let status = self.appDelegate.player?.currentItem?.asset.statusOfValue(forKey: "playable", error: &error)
+                let status = self.player?.currentItem?.asset.statusOfValue(forKey: "playable", error: &error)
                 switch status {
                 case .loaded:
                     DispatchQueue.main.async {
                         if let imageVideoContainer = imageVideoContainer {
                             self.imageVideoContainer = imageVideoContainer
-                            self.videoLayer = AVPlayerLayer(player: self.appDelegate.player)
+                            self.videoLayer = AVPlayerLayer(player: self.player)
                             self.videoLayer!.frame = imageVideoContainer.bounds
                             self.videoLayer!.videoGravity = .resizeAspect
                             imageVideoContainer.layer.addSublayer(self.videoLayer!)
@@ -81,7 +82,7 @@ class NCPlayer: NSObject {
                         NCManageDatabase.shared.addVideoTime(metadata: metadata, time: nil, durationSeconds: self.durationSeconds)
                         // NO Live Photo, seek to datamebase time
                         if !metadata.livePhoto, let time = NCManageDatabase.shared.getVideoTime(metadata: metadata) {
-                            self.appDelegate.player?.seek(to: time)
+                            self.player?.seek(to: time)
                         }
                         DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
                             playerToolBar?.setBarPlayer(ncplayer: self)
@@ -112,7 +113,7 @@ class NCPlayer: NSObject {
     @objc func applicationDidEnterBackground(_ notification: NSNotification) {
         
         if metadata?.classFile == NCCommunicationCommon.typeClassFile.video.rawValue {
-            appDelegate.player?.pause()
+            self.player?.pause()
         }
     }
     
@@ -128,24 +129,24 @@ class NCPlayer: NSObject {
     
     func videoPlay() {
                 
-        appDelegate.player?.play()
+        self.player?.play()
     }
     
     func videoPause() {
         
-        appDelegate.player?.pause()
+        self.player?.pause()
     }
     
     func saveCurrentTime() {
         guard let metadata = self.metadata else { return }
 
-        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: appDelegate.player?.currentTime(), durationSeconds: nil)
+        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: self.player?.currentTime(), durationSeconds: nil)
     }
     
     func videoSeek(time: CMTime) {
         guard let metadata = self.metadata else { return }
         
-        appDelegate.player?.seek(to: time)
+        self.player?.seek(to: time)
         NCManageDatabase.shared.addVideoTime(metadata: metadata, time: time, durationSeconds: nil)
     }
     
@@ -158,7 +159,7 @@ class NCPlayer: NSObject {
     
     func getVideoCurrentSeconds() -> Float64 {
         
-        return CMTimeGetSeconds(appDelegate.player?.currentTime() ?? .zero)
+        return CMTimeGetSeconds(self.player?.currentTime() ?? .zero)
     }
     
     func getVideoDurationSeconds() -> Float64 {
@@ -170,7 +171,7 @@ class NCPlayer: NSObject {
         
         var image: UIImage?
 
-        if let asset = appDelegate.player?.currentItem?.asset {
+        if let asset = self.player?.currentItem?.asset {
 
             do {
                 let imageGenerator = AVAssetImageGenerator(asset: asset)

+ 11 - 11
iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift

@@ -102,9 +102,9 @@ class NCPlayerToolBar: UIView {
                 
         updateToolBar()
         
-        appDelegate.player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: .main, using: { (CMTime) in
+        ncplayer.player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: .main, using: { (CMTime) in
             
-            if self.appDelegate.player?.currentItem?.status == .readyToPlay {
+            if ncplayer.player?.currentItem?.status == .readyToPlay {
                 if self.isHidden == false {
                     self.updateToolBar()
                 }
@@ -152,7 +152,7 @@ class NCPlayerToolBar: UIView {
     public func updateToolBar() {
 
         var namedPlay = "play.fill"
-        if appDelegate.player?.rate == 1 { namedPlay = "pause.fill"}
+        if ncplayer?.player?.rate == 1 { namedPlay = "pause.fill"}
         let currentSeconds = ncplayer?.getVideoCurrentSeconds() ?? 0
         let durationSeconds = ncplayer?.getVideoDurationSeconds() ?? 0
         
@@ -194,7 +194,7 @@ class NCPlayerToolBar: UIView {
             
             switch touchEvent.phase {
             case .began:
-                wasInPlay = appDelegate.player?.rate == 1 ? true : false
+                wasInPlay = ncplayer?.player?.rate == 1 ? true : false
                 ncplayer?.videoPause()
                 playbackSliderEvent = .began
             case .moved:
@@ -226,15 +226,15 @@ class NCPlayerToolBar: UIView {
     
     @IBAction func playerPause(_ sender: Any) {
         
-        if appDelegate.player?.timeControlStatus == .playing {
+        if ncplayer?.player?.timeControlStatus == .playing {
             ncplayer?.videoPause()
             ncplayer?.saveCurrentTime()
-        } else if appDelegate.player?.timeControlStatus == .paused {
+        } else if ncplayer?.player?.timeControlStatus == .paused {
             ncplayer?.videoPlay()
-        } else if appDelegate.player?.timeControlStatus == .waitingToPlayAtSpecifiedRate {
+        } else if ncplayer?.player?.timeControlStatus == .waitingToPlayAtSpecifiedRate {
             ncplayer?.deleteLocalFile()
             print("timeControlStatus.waitingToPlayAtSpecifiedRate")
-            if let reason = appDelegate.player?.reasonForWaitingToPlay {
+            if let reason = ncplayer?.player?.reasonForWaitingToPlay {
                 switch reason {
                 case .evaluatingBufferingRate:
                     print("reasonForWaitingToPlay.evaluatingBufferingRate")
@@ -254,13 +254,13 @@ class NCPlayerToolBar: UIView {
         let mute = CCUtility.getAudioMute()
         
         CCUtility.setAudioMute(!mute)
-        appDelegate.player?.isMuted = !mute
+        ncplayer?.player?.isMuted = !mute
         updateToolBar()
     }
     
     @IBAction func forwardButtonSec(_ sender: Any) {
         guard let ncplayer = ncplayer else { return }
-        guard let player = appDelegate.player else { return }
+        guard let player = ncplayer.player else { return }
 
         let playerCurrentTime = CMTimeGetSeconds(player.currentTime())
         let newTime = playerCurrentTime + seekDuration
@@ -273,7 +273,7 @@ class NCPlayerToolBar: UIView {
     
     @IBAction func backButtonSec(_ sender: Any) {
         guard let ncplayer = ncplayer else { return }
-        guard let player = appDelegate.player else { return }
+        guard let player = ncplayer.player else { return }
 
         let playerCurrenTime = CMTimeGetSeconds(player.currentTime())
         var newTime = playerCurrenTime - seekDuration

+ 2 - 2
iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift

@@ -132,7 +132,7 @@ class NCViewerMedia: UIViewController {
     override func viewWillDisappear(_ animated: Bool) {
         super.viewWillDisappear(animated)
         
-        if let player = appDelegate.player, let time = appDelegate.player?.currentTime() {
+        if let player = ncplayer?.player, let time = ncplayer?.player?.currentTime() {
             if player.rate == 1 {
                 player.pause()
                 NCManageDatabase.shared.addVideoTime(metadata: currentMetadata, time: time, durationSeconds: nil)
@@ -387,7 +387,7 @@ extension NCViewerMedia: UIPageViewControllerDelegate, UIPageViewControllerDataS
     func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
         
         // Save time video
-        if let player = appDelegate.player, let time = appDelegate.player?.currentTime() {
+        if let player = ncplayer?.player, let time = ncplayer?.player?.currentTime() {
             if player.rate == 1 {
                 NCManageDatabase.shared.addVideoTime(metadata: currentMetadata, time: time, durationSeconds: nil)
             }

+ 6 - 2
iOSClient/Viewer/NCViewerMedia/NCViewerMediaZoom.swift

@@ -115,8 +115,6 @@ class NCViewerMediaZoom: UIViewController {
         viewerMedia?.currentViewerMediaZoom = self
         viewerMedia?.currentMetadata = metadata
         
-        self.appDelegate.player?.pause()
-
         if ncplayer == nil, (metadata.classFile == NCCommunicationCommon.typeClassFile.video.rawValue || metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue),  let url = NCKTVHTTPCache.shared.getVideoURL(metadata: metadata) {
             
             self.ncplayer = NCPlayer.init(url: url)
@@ -133,6 +131,12 @@ class NCViewerMediaZoom: UIViewController {
         }
     }
     
+    override func viewDidDisappear(_ animated: Bool) {
+        super.viewDidDisappear(animated)
+        
+        self.ncplayer?.videoPause()
+    }
+    
     override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
         super.viewWillTransition(to: size, with: coordinator)