Browse Source

refactor + fix comment filtering & loading

Henrik Storch 3 years ago
parent
commit
452eb4e246

+ 2 - 2
Nextcloud.xcodeproj/project.pbxproj

@@ -2937,8 +2937,8 @@
 			isa = XCRemoteSwiftPackageReference;
 			repositoryURL = "https://github.com/nextcloud/ios-communication-library/";
 			requirement = {
-				kind = revision;
-				revision = 9fa3a3567f9c3092c73e3501cb055b1df40900bb;
+				branch = develop;
+				kind = branch;
 			};
 		};
 		F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */ = {

+ 10 - 46
Nextcloud.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

@@ -10,15 +10,6 @@
           "version": "0.20200225.4"
         }
       },
-      {
-        "package": "Alamofire",
-        "repositoryURL": "https://github.com/Alamofire/Alamofire",
-        "state": {
-          "branch": null,
-          "revision": "d120af1e8638c7da36c8481fd61a66c0c08dc4fc",
-          "version": "5.4.4"
-        }
-      },
       {
         "package": "BoringSSL-GRPC",
         "repositoryURL": "https://github.com/firebase/boringssl-SwiftPM.git",
@@ -42,8 +33,8 @@
         "repositoryURL": "https://github.com/firebase/firebase-ios-sdk",
         "state": {
           "branch": null,
-          "revision": "839cc6b0cd80b0b8bf81fe9bd82b743b25dc6446",
-          "version": "8.9.1"
+          "revision": "81b568348ab4e113dd8bcef5a83c5dd431741ae4",
+          "version": "8.8.1"
         }
       },
       {
@@ -60,8 +51,8 @@
         "repositoryURL": "https://github.com/google/GoogleAppMeasurement.git",
         "state": {
           "branch": null,
-          "revision": "9b2f6aca5b4685c45f9f5481f19bee8e7982c538",
-          "version": "8.9.1"
+          "revision": "06add56b27b88ae5180e92d4ee21a1199ee888a1",
+          "version": "8.8.0"
         }
       },
       {
@@ -69,8 +60,8 @@
         "repositoryURL": "https://github.com/google/GoogleDataTransport.git",
         "state": {
           "branch": null,
-          "revision": "15ccdfd25ac55b9239b82809531ff26605e7556e",
-          "version": "9.1.2"
+          "revision": "7fb27ea49414b9c5483503cd06baa821c8654d1e",
+          "version": "9.1.1"
         }
       },
       {
@@ -78,8 +69,8 @@
         "repositoryURL": "https://github.com/google/GoogleUtilities.git",
         "state": {
           "branch": null,
-          "revision": "797005ad8a1f0614063933e2fa010a5d13cb09d0",
-          "version": "7.6.0"
+          "revision": "616fac2626b6b2d1424d79a6f786b4e2ed1cfb49",
+          "version": "7.5.2"
         }
       },
       {
@@ -100,15 +91,6 @@
           "version": "1.7.0"
         }
       },
-      {
-        "package": "NCCommunication",
-        "repositoryURL": "https://github.com/nextcloud/ios-communication-library/",
-        "state": {
-          "branch": null,
-          "revision": "9fa3a3567f9c3092c73e3501cb055b1df40900bb",
-          "version": null
-        }
-      },
       {
         "package": "leveldb",
         "repositoryURL": "https://github.com/firebase/leveldb.git",
@@ -186,8 +168,8 @@
         "repositoryURL": "https://github.com/realm/realm-cocoa",
         "state": {
           "branch": null,
-          "revision": "9f43d0da902c55b493d6c8bb63203764caa8acbe",
-          "version": "10.18.0"
+          "revision": "7ca0ce1dd58553d5be1ec9cc7283b068c256979d",
+          "version": "10.17.0"
         }
       },
       {
@@ -243,24 +225,6 @@
           "revision": "9bf4b5af6bb4386865636fc504d6c588c2b65040",
           "version": "3.7.2"
         }
-      },
-      {
-        "package": "SwiftyJSON",
-        "repositoryURL": "https://github.com/SwiftyJSON/SwiftyJSON",
-        "state": {
-          "branch": null,
-          "revision": "b3dcd7dbd0d488e1a7077cb33b00f2083e382f07",
-          "version": "5.0.1"
-        }
-      },
-      {
-        "package": "SwiftyXMLParser",
-        "repositoryURL": "https://github.com/yahoojapan/SwiftyXMLParser",
-        "state": {
-          "branch": null,
-          "revision": "ad5eeeaf7797f69e26943aaa53c81c6a9fdaa516",
-          "version": "5.5.0"
-        }
       }
     ]
   },

+ 17 - 16
iOSClient/Activity/NCActivity.swift

@@ -686,31 +686,32 @@ extension NCActivity {
     
     func loadDataSource() {
         
-//        sectionDate.removeAll()
+        guard let metadata = self.metadata else { return }
+
+        NCCommunication.shared.getComments(fileId: metadata.fileId) { (account, comments, errorCode, errorDescription) in
+            if errorCode == 0 && comments != nil {
+                NCManageDatabase.shared.addComments(comments!, account: metadata.account, objectId: metadata.fileId)
+                //FIXME: could cause duplicate comments??
+                self.allItems += self.getComments(account: metadata.account, objectId: metadata.fileId)
+                self.tableView.reloadData()
+            } else {
+                if errorCode != NCGlobal.shared.errorResourceNotFound {
+                    NCContentPresenter.shared.messageNotification("_share_", description: errorDescription, delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: errorCode)
+                }
+            }
+        }
         
         let activities = NCManageDatabase.shared.getActivity(
             predicate: NSPredicate(format: "account == %@", appDelegate.account),
-            filterFileId: metadata?.fileId)
+            filterFileId: metadata.fileId)
 //        self.allActivities = activities.all
 //        self.filterActivities = activities.filter
         self.allItems = activities.filter
-        if let metadata = metadata {
-            self.allItems += getComments(account: metadata.account, objectId: metadata.fileId)
-        }
         
-//        for tableActivity in filterActivities {
-//            guard let date = Calendar.current.date(from: Calendar.current.dateComponents([.year, .month, .day], from: tableActivity.date as Date)) else {
-//                continue
-//            }
-//            if !sectionDate.contains(date) {
-//                sectionDate.append(date)
-//            }
-//        }
-//
         tableView.reloadData()
     }
     
-    func getTableActivitiesFromSection(_ section: Int) -> [tableActivity] {
+    func getTableActivitiesForSection(_ section: Int) -> [tableActivity] {
         let startDate = sectionDates.sorted()[section]
         let endDate: Date = {
             let components = DateComponents(day: 1, second: -1)
@@ -745,7 +746,7 @@ extension NCActivity {
             previews: true) { (account, activities, errorCode, errorDescription) in
                 
                 if errorCode == 0 && account == self.appDelegate.account {
-                    NCManageDatabase.shared.addActivity(activities , account: account)
+                    NCManageDatabase.shared.addActivity(activities, account: account)
                 }
                 
                 NCUtility.shared.stopActivityIndicator()

+ 64 - 55
iOSClient/Data/NCManageDatabase.swift

@@ -775,56 +775,61 @@ class NCManageDatabase: NSObject {
                     addObjectActivity.user = activity.user
                     addObjectActivity.subject = activity.subject
                     
-                    if let subject_rich = activity.subject_rich {
-                        if let json = JSON(subject_rich).array {
-                            addObjectActivity.subjectRich = json[0].stringValue
-                            if json.count > 1 {
-                                if let dict = json[1].dictionary {
-                                    for (key, value) in dict {
-                                        let addObjectActivitySubjectRich = tableActivitySubjectRich()
-                                        let dict = value as JSON
-                                        addObjectActivitySubjectRich.account = account
-                                        if dict["id"].intValue > 0 {
-                                            addObjectActivitySubjectRich.id = String(dict["id"].intValue)
-                                        } else {
-                                            addObjectActivitySubjectRich.id = dict["id"].stringValue
-                                        }
-                                        addObjectActivitySubjectRich.name = dict["name"].stringValue
-                                        addObjectActivitySubjectRich.idPrimaryKey = account + String(activity.idActivity) + addObjectActivitySubjectRich.id + addObjectActivitySubjectRich.name
-                                        addObjectActivitySubjectRich.key = key
-                                        addObjectActivitySubjectRich.idActivity = activity.idActivity
-                                        addObjectActivitySubjectRich.link = dict["link"].stringValue
-                                        addObjectActivitySubjectRich.path = dict["path"].stringValue
-                                        addObjectActivitySubjectRich.type = dict["type"].stringValue
-
-                                        realm.add(addObjectActivitySubjectRich, update: .all)
-                                    }
+                    if let subject_rich = activity.subject_rich,
+                       let json = JSON(subject_rich).array {
+                        
+                        addObjectActivity.subjectRich = json[0].stringValue
+                        if json.count > 1,
+                           let dict = json[1].dictionary {
+                            
+                            for (key, value) in dict {
+                                let addObjectActivitySubjectRich = tableActivitySubjectRich()
+                                let dict = value as JSON
+                                addObjectActivitySubjectRich.account = account
+                                
+                                if dict["id"].intValue > 0 {
+                                    addObjectActivitySubjectRich.id = String(dict["id"].intValue)
+                                } else {
+                                    addObjectActivitySubjectRich.id = dict["id"].stringValue
                                 }
-                            }
-                        }
-                    }
-                    
-                    if let previews = activity.previews {
-                        if let json = JSON(previews).array {
-                            for preview in json {
-                                let addObjectActivityPreview = tableActivityPreview()
                                 
-                                addObjectActivityPreview.account = account
-                                addObjectActivityPreview.idActivity = activity.idActivity
-                                addObjectActivityPreview.fileId = preview["fileId"].intValue
-                                addObjectActivityPreview.filename = preview["filename"].stringValue
-                                addObjectActivityPreview.idPrimaryKey = account + String(activity.idActivity) + String(addObjectActivityPreview.fileId)
-                                addObjectActivityPreview.source = preview["source"].stringValue
-                                addObjectActivityPreview.link = preview["link"].stringValue
-                                addObjectActivityPreview.mimeType = preview["mimeType"].stringValue
-                                addObjectActivityPreview.view = preview["view"].stringValue
-                                addObjectActivityPreview.isMimeTypeIcon = preview["isMimeTypeIcon"].boolValue
+                                addObjectActivitySubjectRich.name = dict["name"].stringValue
+                                addObjectActivitySubjectRich.idPrimaryKey = account
+                                + String(activity.idActivity)
+                                + addObjectActivitySubjectRich.id
+                                + addObjectActivitySubjectRich.name
+                                
+                                addObjectActivitySubjectRich.key = key
+                                addObjectActivitySubjectRich.idActivity = activity.idActivity
+                                addObjectActivitySubjectRich.link = dict["link"].stringValue
+                                addObjectActivitySubjectRich.path = dict["path"].stringValue
+                                addObjectActivitySubjectRich.type = dict["type"].stringValue
                                 
-                                realm.add(addObjectActivityPreview, update: .all)
+                                realm.add(addObjectActivitySubjectRich, update: .all)
                             }
                         }
                     }
                     
+                    if let previews = activity.previews,
+                       let json = JSON(previews).array {
+                        for preview in json {
+                            let addObjectActivityPreview = tableActivityPreview()
+                            
+                            addObjectActivityPreview.account = account
+                            addObjectActivityPreview.idActivity = activity.idActivity
+                            addObjectActivityPreview.fileId = preview["fileId"].intValue
+                            addObjectActivityPreview.filename = preview["filename"].stringValue
+                            addObjectActivityPreview.idPrimaryKey = account + String(activity.idActivity) + String(addObjectActivityPreview.fileId)
+                            addObjectActivityPreview.source = preview["source"].stringValue
+                            addObjectActivityPreview.link = preview["link"].stringValue
+                            addObjectActivityPreview.mimeType = preview["mimeType"].stringValue
+                            addObjectActivityPreview.view = preview["view"].stringValue
+                            addObjectActivityPreview.isMimeTypeIcon = preview["isMimeTypeIcon"].boolValue
+
+                            realm.add(addObjectActivityPreview, update: .all)
+                        }
+                    }
+
                     addObjectActivity.icon = activity.icon
                     addObjectActivity.link = activity.link
                     addObjectActivity.message = activity.message
@@ -846,21 +851,25 @@ class NCManageDatabase: NSObject {
         
         let results = realm.objects(tableActivity.self).filter(predicate).sorted(byKeyPath: "idActivity", ascending: false)
         let allActivity = Array(results.map(tableActivity.init))
-        if filterFileId != nil {
-            var resultsFilter: [tableActivity] = []
-            for result in results {
-                let resultsActivitySubjectRich = realm.objects(tableActivitySubjectRich.self).filter("account == %@ && idActivity == %d", result.account, result.idActivity)
-                for resultActivitySubjectRich in resultsActivitySubjectRich {
-                    if filterFileId!.contains(resultActivitySubjectRich.id) && resultActivitySubjectRich.key == "file" {
-                        resultsFilter.append(result)
-                        break
-                    }
+        guard let filterFileId = filterFileId else {
+            return (all: allActivity, filter: allActivity)
+        }
+        // comments are loaded seperately
+        let filtered = allActivity.filter({ String($0.objectId) == filterFileId && $0.type != "comments" })
+        return (all: allActivity, filter: filtered)
+        
+        //HELP: What is this? What is it used for? Why not using `.filter()` on the array
+        var resultsFilter: [tableActivity] = []
+        for result in results {
+            let resultsActivitySubjectRich = realm.objects(tableActivitySubjectRich.self).filter("account == %@ && idActivity == %d", result.account, result.idActivity)
+            for resultActivitySubjectRich in resultsActivitySubjectRich {
+                if filterFileId.contains(resultActivitySubjectRich.id) && resultActivitySubjectRich.key == "file" {
+                    resultsFilter.append(result)
+                    break
                 }
             }
-            return(all: allActivity, filter: Array(resultsFilter.map(tableActivity.init)))
-        } else {
-            return(all: allActivity, filter: allActivity)
         }
+        return(all: allActivity, filter: Array(resultsFilter.map(tableActivity.init)))
     }
     
     @objc func getActivitySubjectRich(account: String, idActivity: Int, key: String) -> tableActivitySubjectRich? {