marinofaggiana před 3 roky
rodič
revize
a4edef5740

+ 1 - 0
iOSClient/Data/NCDatabase.swift

@@ -508,6 +508,7 @@ class tableUserStatus: Object {
 class tableVideo: Object {
     
     @objc dynamic var account = ""
+    @objc dynamic var durationSeconds: Double = 0
     @objc dynamic var ocId = ""
     @objc dynamic var time: Int64 = 0
     

+ 24 - 6
iOSClient/Data/NCManageDatabase.swift

@@ -116,7 +116,7 @@ class NCManageDatabase: NSObject {
                         }
                     }
                     
-                    if oldSchemaVersion < 209 {
+                    if oldSchemaVersion < 210 {
                         migration.deleteData(forType: tableDirectory.className())
                         migration.deleteData(forType: tableE2eEncryption.className())
                         migration.deleteData(forType: tableE2eEncryptionLock.className())
@@ -3127,10 +3127,9 @@ class NCManageDatabase: NSObject {
     //MARK: -
     //MARK: Table Video
     
-    func addVideoTime(metadata: tableMetadata, time: CMTime?) {
+    func addVideoTime(metadata: tableMetadata, time: CMTime?, durationSeconds: Double?) {
         
         if metadata.livePhoto { return }
-        guard let time = time else { return }
         let realm = try! Realm()
         
         do {
@@ -3138,9 +3137,14 @@ class NCManageDatabase: NSObject {
                 let addObject = tableVideo()
                
                 addObject.account = metadata.account
+                if let durationSeconds = durationSeconds {
+                    addObject.durationSeconds = durationSeconds
+                }
                 addObject.ocId = metadata.ocId
-                addObject.time = Int64(CMTimeGetSeconds(time) * 1000)
-              
+                if let time = time {
+                    addObject.time = Int64(CMTimeGetSeconds(time)) * 1000
+                }
+                
                 realm.add(addObject, update: .all)
             }
         } catch let error {
@@ -3148,15 +3152,29 @@ class NCManageDatabase: NSObject {
         }
     }
     
+    func getVideoDurationSeconds(metadata: tableMetadata) -> Double? {
+        
+        if metadata.livePhoto { return nil }
+        let realm = try! Realm()
+        
+        guard let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first else {
+            return nil
+        }
+        
+        if result.durationSeconds == 0 { return nil }
+        return result.durationSeconds
+    }
+    
     func getVideoTime(metadata: tableMetadata) -> CMTime? {
         
-        if metadata.livePhoto { return CMTime.zero }
+        if metadata.livePhoto { return nil }
         let realm = try! Realm()
         
         guard let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first else {
             return nil
         }
         
+        if result.time == 0 { return nil }
         let time = CMTimeMake(value: result.time, timescale: 1000)
         return time
     }

+ 1 - 1
iOSClient/NCGlobal.swift

@@ -79,7 +79,7 @@ class NCGlobal: NSObject {
     // Database Realm
     //
     let databaseDefault                             = "nextcloud.realm"
-    let databaseSchemaVersion: UInt64               = 209
+    let databaseSchemaVersion: UInt64               = 210
     
     // Intro selector
     //

+ 1 - 4
iOSClient/Viewer/NCViewerVideo/NCViewerVideo.swift

@@ -73,9 +73,6 @@ class NCViewerVideo: NSObject {
             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)
-                    if metadata.livePhoto {
-                        NCManageDatabase.shared.deleteVideoTime(metadata: metadata)
-                    }
                     self.viewerVideoToolBar?.showToolBar()
                 }
             }
@@ -143,7 +140,7 @@ class NCViewerVideo: NSObject {
                     let timeSecond = Double(CMTimeGetSeconds(time))
                     let durationSeconds = Double(CMTimeGetSeconds(duration))
                     if timeSecond < durationSeconds {
-                        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: self.player?.currentTime())
+                        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: self.player?.currentTime(), durationSeconds: nil)
                         if let time = self.player?.currentTime() {
                             let timeSecond = Double(CMTimeGetSeconds(time))
                             print("Stop video at: \(timeSecond)")

+ 6 - 4
iOSClient/Viewer/NCViewerVideo/NCViewerVideoToolBar.swift

@@ -82,7 +82,7 @@ class NCViewerVideoToolBar: UIView {
         setToolBarImage()
     }
     
-    func setBarPlayer(player: AVPlayer?, metadata: tableMetadata?) {
+    func setBarPlayer(player: AVPlayer?, metadata: tableMetadata) {
         
         self.player = player
         self.metadata = metadata
@@ -98,6 +98,8 @@ class NCViewerVideoToolBar: UIView {
         labelCurrentTime.text = NCUtility.shared.stringFromTimeInterval(interval: 0)
         labelOverallDuration.text = "-" + NCUtility.shared.stringFromTimeInterval(interval: durationSeconds)
         
+        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: nil, durationSeconds: durationSeconds)
+        
         player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: .main, using: { (CMTime) in
             
             if self.player?.currentItem?.status == .readyToPlay {
@@ -188,7 +190,7 @@ class NCViewerVideoToolBar: UIView {
             case .ended:
                 self.player?.seek(to: targetTime)
                 if let metadata = self.metadata {
-                    NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime)
+                    NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime, durationSeconds: nil)
                 }
                 if wasInPlay {
                     self.player?.play()
@@ -240,7 +242,7 @@ class NCViewerVideoToolBar: UIView {
             let targetTime: CMTime = CMTimeMake(value: Int64(newTime * 1000 as Float64), timescale: 1000)
             
             self.player?.seek(to: targetTime)
-            NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime)
+            NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime, durationSeconds: nil)
         }
     }
     
@@ -255,6 +257,6 @@ class NCViewerVideoToolBar: UIView {
         let targetTime: CMTime = CMTimeMake(value: Int64(newTime * 1000 as Float64), timescale: 1000)
         
         self.player?.seek(to: targetTime)
-        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime)
+        NCManageDatabase.shared.addVideoTime(metadata: metadata, time: targetTime, durationSeconds: nil)
     }
 }