Procházet zdrojové kódy

Fix detect livepfoto in media

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana před 2 roky
rodič
revize
553e731bd8

+ 2 - 2
Nextcloud.xcodeproj/project.pbxproj

@@ -3701,7 +3701,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 10;
+				CURRENT_PROJECT_VERSION = 11;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
@@ -3764,7 +3764,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 10;
+				CURRENT_PROJECT_VERSION = 11;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;

+ 4 - 0
iOSClient/Data/NCManageDatabase+Metadata.swift

@@ -106,8 +106,11 @@ class tableMetadata: Object, NCUserBaseUrl {
 }
 
 extension tableMetadata {
+
     var fileExtension: String { (fileNameView as NSString).pathExtension }
 
+    var fileNoExtension: String { (fileNameView as NSString).deletingPathExtension }
+
     var isPrintable: Bool {
         classFile == NKCommon.typeClassFile.image.rawValue || ["application/pdf", "com.adobe.pdf"].contains(contentType) || contentType.hasPrefix("text/")
     }
@@ -306,6 +309,7 @@ extension NCManageDatabase {
         metadata.etag = ocId
         metadata.fileName = fileName
         metadata.fileNameView = fileName
+        metadata.fileExtension
         metadata.livePhoto = isLivePhoto
         metadata.name = name
         metadata.ocId = ocId

+ 37 - 8
iOSClient/Media/NCMedia.swift

@@ -461,15 +461,24 @@ extension NCMedia {
             predicate = predicateDefault
         }
 
-        guard var predicateForGetMetadatasMedia = predicate else { return }
-
-        if livePhoto {
-            let predicateLivePhoto = NSPredicate(format: "!(classFile == '\(NKCommon.typeClassFile.video.rawValue)' AND livePhoto == true)")
-            predicateForGetMetadatasMedia = NSCompoundPredicate(andPredicateWithSubpredicates: [predicateForGetMetadatasMedia, predicateLivePhoto])
-        }
-
+        guard let predicate = predicate else { return }
         DispatchQueue.global().async {
-            self.metadatas = NCManageDatabase.shared.getMetadatasMedia(predicate: predicateForGetMetadatasMedia, sort: CCUtility.getMediaSortDate())
+            let metadatas = NCManageDatabase.shared.getMetadatasMedia(predicate: predicate, sort: "fileNameView", ascending: false)
+            if self.livePhoto {
+                self.filterLivePhoto(metadatas: metadatas)
+            } else {
+                self.metadatas = metadatas
+            }
+            switch CCUtility.getMediaSortDate() {
+            case "date":
+                self.metadatas = self.metadatas.sorted(by: {($0.date as Date) > ($1.date as Date)} )
+            case "creationDate":
+                self.metadatas = self.metadatas.sorted(by: {($0.creationDate as Date) > ($1.creationDate as Date)} )
+            case "uploadDate":
+                self.metadatas = self.metadatas.sorted(by: {($0.uploadDate as Date) > ($1.uploadDate as Date)} )
+            default:
+                break
+            }
             DispatchQueue.main.sync {
                 self.reloadDataThenPerform {
                     self.updateMediaControlVisibility()
@@ -480,6 +489,26 @@ 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 {