marinofaggiana %!s(int64=4) %!d(string=hai) anos
pai
achega
5cef53f7ac

+ 1 - 1
iOSClient/CCGlobal.h

@@ -78,7 +78,7 @@
 
 // Database Realm
 #define k_databaseDefault                               @"nextcloud.realm"
-#define k_databaseSchemaVersion                         146
+#define k_databaseSchemaVersion                         148
 
 // Database JSON
 #define k_databaseDefaultJSON                           @"nextcloud.json"

+ 12 - 0
iOSClient/Data/NCDatabase.swift

@@ -434,3 +434,15 @@ class tableTrash: Object {
         return "fileId"
     }
 }
+
+class tableVideo: Object {
+    
+    @objc dynamic var account = ""
+    @objc dynamic var ocId = ""
+    @objc dynamic var sec: Int64 = 0
+    
+    override static func primaryKey() -> String {
+        return "ocId"
+    }
+}
+

+ 35 - 1
iOSClient/Data/NCManageDatabase.swift

@@ -213,7 +213,8 @@ class NCManageDatabase: NSObject {
         self.clearTable(tableShare.self, account: account)
         self.clearTable(tableTag.self, account: account)
         self.clearTable(tableTrash.self, account: account)
-        
+        self.clearTable(tableVideo.self, account: account)
+
         if removeAccount {
             self.clearTable(tableAccount.self, account: account)
         }
@@ -2686,6 +2687,39 @@ class NCManageDatabase: NSObject {
         return tableTrash.init(value: result)
     }
     
+    //MARK: -
+    //MARK: Table Video
+    
+    @objc func addVideo(account: String, ocId: String, time: CMTime) {
+        
+        let realm = try! Realm()
+
+        do {
+            try realm.safeWrite {
+                let addObject = tableVideo()
+               
+                addObject.account = account
+                addObject.ocId = ocId
+                addObject.sec = Int64(CMTimeGetSeconds(time))
+              
+                realm.add(addObject, update: .all)
+            }
+        } catch let error {
+            NCCommunicationCommon.shared.writeLog("Could not write to database: \(error)")
+        }
+    }
+    
+    @objc func getVideo(account: String, ocId: String) -> tableVideo? {
+        
+        let realm = try! Realm()
+        
+        guard let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", account, ocId).first else {
+            return nil
+        }
+        
+        return tableVideo.init(value: result)
+    }
+    
     //MARK: -
 }
 

+ 14 - 13
iOSClient/Viewer/NCViewerImage/NCViewerImage.swift

@@ -59,7 +59,6 @@ class NCViewerImage: UIViewController {
     private var videoLayer: AVPlayerLayer?
     private var timeObserverToken: Any?
     private var rateObserverToken: Any?
-    var seekTime: CMTime?
     var pictureInPictureOcId: String = ""
     var textColor: UIColor = NCBrandColor.sharedInstance.textView
 
@@ -425,6 +424,16 @@ class NCViewerImage: UIViewController {
                 }
                 */
                 
+                let timeScale = CMTimeScale(NSEC_PER_SEC)
+                let time = CMTime(seconds: 1, preferredTimescale: timeScale)
+                timeObserverToken = player?.addPeriodicTimeObserver(forInterval: time, queue: .main) { time in
+                    NCManageDatabase.sharedInstance.addVideo(account:metadata.account, ocId: metadata.ocId, time: time)
+                }
+                
+//                if let time = player?.currentTime() {
+//                    NCManageDatabase.sharedInstance.addVideo(account: currentMetadata.account, ocId: currentMetadata.ocId, time: time)
+//                }
+                
                 // At end go back to start
                 NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: nil, queue: .main) { (notification) in
                     self.player?.seek(to: CMTime.zero)
@@ -434,9 +443,9 @@ class NCViewerImage: UIViewController {
                 
                 if pictureInPictureOcId != metadata.ocId {
                     player?.play()
-                    if seekTime != nil {
-                        player?.seek(to: seekTime!)
-                        seekTime = nil
+                    if let tableVideo = NCManageDatabase.sharedInstance.getVideo(account: metadata.account, ocId: metadata.ocId) {
+                        let time = CMTimeMake(value: tableVideo.sec, timescale: 1)
+                        player?.seek(to: time)
                     }
                 }
             }
@@ -768,15 +777,7 @@ extension NCViewerImage: NCViewerVideoDelegate {
         pictureInPictureOcId = metadata.ocId
     }
     
-    func stopPictureInPicture(metadata: tableMetadata, time: CMTime?) {
+    func stopPictureInPicture(metadata: tableMetadata) {
         pictureInPictureOcId = ""
-        seekTime = time
-        if currentMetadata.ocId == metadata.ocId {
-            videoPlay(metadata: metadata)
-        }
-    }
-    
-    func playerCurrentTime(_ time: CMTime?) {
-        seekTime = time
     }
 }

+ 7 - 9
iOSClient/Viewer/NCViewerVideo/NCViewerVideo.swift

@@ -24,9 +24,8 @@
 import Foundation
 
 protocol NCViewerVideoDelegate {
-    func stopPictureInPicture(metadata: tableMetadata, time: CMTime?)
+    func stopPictureInPicture(metadata: tableMetadata)
     func startPictureInPicture(metadata: tableMetadata)
-    func playerCurrentTime(_ time: CMTime?)
 }
 
 @objc class NCViewerVideo: AVPlayerViewController {
@@ -82,7 +81,9 @@ protocol NCViewerVideoDelegate {
                 player?.removeObserver(self, forKeyPath: "rate")
                 NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
                 NCKTVHTTPCache.shared.stopProxy()
-                self.delegateViewerVideo?.playerCurrentTime(player?.currentTime())
+                if let time = player?.currentTime() {
+                    NCManageDatabase.sharedInstance.addVideo(account: metadata.account, ocId: metadata.ocId, time: time)
+                }
                 self.rateObserverToken = nil
             }
         }
@@ -109,12 +110,9 @@ extension NCViewerVideo: AVPlayerViewControllerDelegate {
     
     func playerViewControllerDidStopPictureInPicture(_ playerViewController: AVPlayerViewController) {
         pictureInPicture = false
-        if rateObserverToken != nil {
-            player?.removeObserver(self, forKeyPath: "rate")
-            NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
-            NCKTVHTTPCache.shared.stopProxy()
-            self.rateObserverToken = nil
+        if let time = player?.currentTime() {
+            NCManageDatabase.sharedInstance.addVideo(account: metadata.account, ocId: metadata.ocId, time: time)
         }
-        delegateViewerVideo?.stopPictureInPicture(metadata: metadata, time: player?.currentTime())
+        delegateViewerVideo?.stopPictureInPicture(metadata: metadata)
     }
 }