Эх сурвалжийг харах

improve detect LivePhoto

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 2 жил өмнө
parent
commit
cd7795d47c

+ 12 - 3
Widget/Files/FilesData.swift

@@ -107,11 +107,20 @@ func getFilesDataEntry(configuration: AccountIntent?, isPreview: Bool, displaySi
 
     @Sendable func isLive(file: NKFile, files: [NKFile]) -> Bool {
 
-        if file.ext.lowercased() != "mov" { return false }
-        if files.filter({ ($0.fileNameWithoutExt == file.fileNameWithoutExt) && ($0.ext.lowercased() == "jpg") }).first != nil {
+        let ext = (file.fileName as NSString).pathExtension.lowercased()
+        if ext != "mov" { return false }
+
+        let fileName = (file.fileName as NSString).deletingPathExtension.lowercased()
+        let fileNameViewMOV = fileName + ".mov"
+        let fileNameViewJPG = fileName + ".jpg"
+        let fileNameViewHEIC = fileName + ".heic"
+
+        let results = files.filter({ $0.fileName.lowercased() == fileNameViewJPG.lowercased() || $0.fileName.lowercased() == fileNameViewHEIC.lowercased() || $0.fileName.lowercased() == fileNameViewMOV.lowercased() })
+        if results.count == 2 {
             return true
+        } else {
+            return false
         }
-        return false
     }
 
     // NETWORKING

+ 19 - 18
iOSClient/Data/NCManageDatabase+Metadata.swift

@@ -164,7 +164,6 @@ extension NCManageDatabase {
         metadata.fileNameView = file.fileName
         metadata.hasPreview = file.hasPreview
         metadata.iconName = file.iconName
-        metadata.livePhoto = file.livePhoto
         metadata.mountType = file.mountType
         metadata.name = file.name
         metadata.note = file.note
@@ -254,23 +253,7 @@ extension NCManageDatabase {
             counter += 1
         }
 
-        // E2EE detect Live Photo [NOT DETECTED IN NKFILES]
-        if isDirectoryE2EE {
-            for metadata in metadatas {
-                if !metadata.directory && !metadata.livePhoto && (metadata.classFile == NKCommon.typeClassFile.video.rawValue || metadata.classFile == NKCommon.typeClassFile.image.rawValue) {
-                    let fileNameViewMOV = (metadata.fileNameView as NSString).deletingPathExtension + ".mov"
-                    let fileNameViewJPG = (metadata.fileNameView as NSString).deletingPathExtension + ".jpg"
-                    let fileNameViewHEIC = (metadata.fileNameView as NSString).deletingPathExtension + ".heic"
-                    let results = metadatas.filter({ $0.fileNameView.lowercased() == fileNameViewJPG.lowercased() || $0.fileNameView.lowercased() == fileNameViewHEIC.lowercased() || $0.fileNameView.lowercased() == fileNameViewMOV.lowercased() })
-                    if results.count == 2 {
-                        results.first?.livePhoto = true
-                        results.last?.livePhoto = true
-                    }
-                }
-            }
-        }
-
-        completion(metadataFolder, metadataFolders, metadatas)
+        completion(metadataFolder, metadataFolders, setLivePhoto(metadatas: metadatas.sorted(by: {$0.fileNameView > $1.fileNameView})))
     }
 
     @objc func createMetadata(account: String, user: String, userId: String, fileName: String, fileNameView: String, ocId: String, serverUrl: String, urlBase: String, url: String, contentType: String, isLivePhoto: Bool = false, isUrl: Bool = false, name: String = NCGlobal.shared.appName, subline: String? = nil, iconName: String? = nil, iconUrl: String? = nil) -> tableMetadata {
@@ -577,6 +560,24 @@ extension NCManageDatabase {
         }
     }
 
+    func setLivePhoto(metadatas: [tableMetadata]) -> [tableMetadata] {
+
+        let numMetadatas: Int = metadatas.count - 1
+        var metadataOutput: [tableMetadata] = []
+
+        for index in metadatas.indices {
+            let metadata = metadatas[index]
+            if index < numMetadatas,
+               metadata.fileNoExtension == metadatas[index+1].fileNoExtension,
+               ((metadata.classFile == NKCommon.typeClassFile.image.rawValue && metadatas[index+1].classFile == NKCommon.typeClassFile.video.rawValue) || (metadata.classFile == NKCommon.typeClassFile.video.rawValue && metadatas[index+1].classFile == NKCommon.typeClassFile.image.rawValue)){
+                metadata.livePhoto = true
+                metadatas[index+1].livePhoto = true
+            }
+            metadataOutput.append(metadata)
+        }
+        return metadataOutput
+    }
+
     @objc func updateMetadatasFavorite(account: String, metadatas: [tableMetadata]) {
 
         let realm = try! Realm()

+ 24 - 22
iOSClient/Media/NCMedia.swift

@@ -435,9 +435,31 @@ extension NCMedia {
     // MARK: - Datasource
 
     @objc func reloadDataSourceWithCompletion(_ completion: @escaping (_ metadatas: [tableMetadata]) -> Void) {
-
         guard !appDelegate.account.isEmpty else { return }
 
+        func setLivePhoto(metadatas: [tableMetadata]) {
+
+            let numMetadatas: Int = metadatas.count - 1
+            self.metadatas.removeAll()
+
+            for index in metadatas.indices {
+                let metadata = metadatas[index]
+                if index < numMetadatas, metadata.fileNoExtension == metadatas[index+1].fileNoExtension {
+                    var update = false
+                    if !metadata.livePhoto || !metadatas[index+1].livePhoto { update = true}
+                    metadata.livePhoto = true
+                    metadatas[index+1].livePhoto = true
+                    if update { NCManageDatabase.shared.addMetadatas([metadata, metadatas[index+1]]) }
+                }
+                if metadata.livePhoto {
+                    if metadata.classFile == NKCommon.typeClassFile.image.rawValue { self.metadatas.append(metadata) }
+                    continue
+                } else {
+                    self.metadatas.append(metadata)
+                }
+            }
+        }
+
         if account != appDelegate.account {
             self.metadatas = []
             account = appDelegate.account
@@ -465,7 +487,7 @@ extension NCMedia {
         DispatchQueue.global().async {
             let metadatas = NCManageDatabase.shared.getMetadatasMedia(predicate: predicate)
             if self.livePhoto {
-                self.filterLivePhoto(metadatas: metadatas)
+                setLivePhoto(metadatas: metadatas)
             } else {
                 self.metadatas = metadatas
             }
@@ -489,26 +511,6 @@ extension NCMedia {
         }
     }
 
-    func filterLivePhoto(metadatas: [tableMetadata]) {
-
-        let numMetadatas: Int = metadatas.count - 1
-        self.metadatas.removeAll()
-
-        for index in metadatas.indices {
-            let metadata = metadatas[index]
-            if index < numMetadatas, metadata.fileNoExtension == metadatas[index+1].fileNoExtension {
-                metadata.livePhoto = true
-                metadatas[index+1].livePhoto = true
-            }
-            if metadata.livePhoto {
-                if metadata.classFile == NKCommon.typeClassFile.image.rawValue { self.metadatas.append(metadata) }
-                continue
-            } else {
-                self.metadatas.append(metadata)
-            }
-        }
-    }
-
     func updateMediaControlVisibility() {
 
         if self.metadatas.count == 0 {