ソースを参照

fix activity

Signed-off-by: marinofaggiana <ios@nextcloud.com>
marinofaggiana 2 年 前
コミット
87ee5f4592

+ 1 - 1
Nextcloud.xcodeproj/project.pbxproj

@@ -3281,7 +3281,7 @@
 			isa = XCRemoteSwiftPackageReference;
 			isa = XCRemoteSwiftPackageReference;
 			repositoryURL = "https://github.com/nextcloud/ios-communication-library/";
 			repositoryURL = "https://github.com/nextcloud/ios-communication-library/";
 			requirement = {
 			requirement = {
-				branch = develop;
+				branch = improve/activity;
 				kind = branch;
 				kind = branch;
 			};
 			};
 		};
 		};

+ 8 - 9
iOSClient/Activity/NCActivity.swift

@@ -420,11 +420,10 @@ extension NCActivity {
 
 
     /// Check if most recent activivities are loaded, if not trigger reload
     /// Check if most recent activivities are loaded, if not trigger reload
     func checkRecentActivity(disptachGroup: DispatchGroup) {
     func checkRecentActivity(disptachGroup: DispatchGroup) {
-        let recentActivityId = NCManageDatabase.shared.getLatestActivityId(account: appDelegate.account)
-
-        guard recentActivityId > 0, metadata == nil, hasActivityToLoad else {
+        guard let result = NCManageDatabase.shared.getLatestActivityId(account: appDelegate.account), metadata == nil, hasActivityToLoad else {
             return self.loadActivity(idActivity: 0, disptachGroup: disptachGroup)
             return self.loadActivity(idActivity: 0, disptachGroup: disptachGroup)
         }
         }
+        let resultActivityId = max(result.activityFirstKnown, result.activityLastGiven)
 
 
         disptachGroup.enter()
         disptachGroup.enter()
 
 
@@ -433,19 +432,19 @@ extension NCActivity {
             limit: 1,
             limit: 1,
             objectId: nil,
             objectId: nil,
             objectType: objectType,
             objectType: objectType,
-            previews: true) { account, activities, errorCode, _ in
+            previews: true) { account, _, activityFirstKnown, activityLastGiven, errorCode, _ in
                 defer { disptachGroup.leave() }
                 defer { disptachGroup.leave() }
 
 
+                let largestActivityId = max(activityFirstKnown, activityLastGiven)
                 guard errorCode == 0,
                 guard errorCode == 0,
                       account == self.appDelegate.account,
                       account == self.appDelegate.account,
-                      let activity = activities.first,
-                      activity.idActivity > recentActivityId
+                      largestActivityId > resultActivityId
                 else {
                 else {
                     self.hasActivityToLoad = errorCode == 304 ? false : self.hasActivityToLoad
                     self.hasActivityToLoad = errorCode == 304 ? false : self.hasActivityToLoad
                     return
                     return
                 }
                 }
 
 
-                self.loadActivity(idActivity: 0, limit: activity.idActivity - recentActivityId, disptachGroup: disptachGroup)
+                self.loadActivity(idActivity: 0, limit: largestActivityId - resultActivityId, disptachGroup: disptachGroup)
             }
             }
     }
     }
 
 
@@ -459,7 +458,7 @@ extension NCActivity {
             limit: min(limit, 200),
             limit: min(limit, 200),
             objectId: metadata?.fileId,
             objectId: metadata?.fileId,
             objectType: objectType,
             objectType: objectType,
-            previews: true) { account, activities, errorCode, _ in
+            previews: true) { account, activities, activityFirstKnown, activityLastGiven, errorCode, _ in
                 defer { disptachGroup.leave() }
                 defer { disptachGroup.leave() }
                 guard errorCode == 0,
                 guard errorCode == 0,
                       account == self.appDelegate.account,
                       account == self.appDelegate.account,
@@ -472,7 +471,7 @@ extension NCActivity {
 
 
                 // update most recently loaded activity only when all activities are loaded (not filtered)
                 // update most recently loaded activity only when all activities are loaded (not filtered)
                 if self.metadata == nil {
                 if self.metadata == nil {
-                    NCManageDatabase.shared.updateLatestActivityId(activities, account: account)
+                    NCManageDatabase.shared.updateLatestActivityId(activityFirstKnown: activityFirstKnown, activityLastGiven: activityLastGiven, account: account)
                 }
                 }
             }
             }
     }
     }

+ 2 - 1
iOSClient/Data/NCDatabase.swift

@@ -134,7 +134,8 @@ class tableActivity: Object, DateCompareable {
 
 
 class tableActivityLatestId: Object {
 class tableActivityLatestId: Object {
     @objc dynamic var account = ""
     @objc dynamic var account = ""
-    @objc dynamic var mostRecentlyLoadedActivityId: Int = 0
+    @objc dynamic var activityFirstKnown: Int = 0
+    @objc dynamic var activityLastGiven: Int = 0
     override static func primaryKey() -> String {
     override static func primaryKey() -> String {
         return "account"
         return "account"
     }
     }

+ 5 - 15
iOSClient/Data/NCManageDatabase+Activity.swift

@@ -166,19 +166,14 @@ extension NCManageDatabase {
         return results
         return results
     }
     }
 
 
-    @objc func updateLatestActivityId(_ activities: [NCCommunicationActivity], account: String) {
+   func updateLatestActivityId(activityFirstKnown: Int, activityLastGiven: Int, account: String) {
         let realm = try! Realm()
         let realm = try! Realm()
-        let previousRecentId = getLatestActivityId(account: account)
 
 
         do {
         do {
             try realm.write {
             try realm.write {
-                guard
-                    let mostRecentActivityId = activities.map({ $0.idActivity }).max(),
-                    mostRecentActivityId > previousRecentId
-                else { return }
-
                 let newRecentActivity = tableActivityLatestId()
                 let newRecentActivity = tableActivityLatestId()
-                newRecentActivity.mostRecentlyLoadedActivityId = mostRecentActivityId
+                newRecentActivity.activityFirstKnown = activityFirstKnown
+                newRecentActivity.activityLastGiven = activityLastGiven
                 newRecentActivity.account = account
                 newRecentActivity.account = account
                 realm.add(newRecentActivity, update: .all)
                 realm.add(newRecentActivity, update: .all)
             }
             }
@@ -187,15 +182,10 @@ extension NCManageDatabase {
         }
         }
     }
     }
 
 
-    @objc func getLatestActivityId(account: String) -> Int {
+    func getLatestActivityId(account: String) -> tableActivityLatestId? {
 
 
         let realm = try! Realm()
         let realm = try! Realm()
-        guard let maxId = realm.objects(tableActivityLatestId.self)
-                .filter("account == %@", account)
-                .map({ $0.mostRecentlyLoadedActivityId }).max()
-        else { return 0 }
-
-        return maxId
+        return realm.objects(tableActivityLatestId.self).filter("account == %@", account).first
     }
     }
     
     
     // MARK: -
     // MARK: -

+ 7 - 0
iOSClient/Data/NCManageDatabase.swift

@@ -164,6 +164,13 @@ class NCManageDatabase: NSObject {
                         migration.deleteData(forType: tableTrash.className())
                         migration.deleteData(forType: tableTrash.className())
                     }
                     }
 
 
+                    if oldSchemaVersion < 237 {
+                        migration.deleteData(forType: tableActivity.className())
+                        migration.deleteData(forType: tableActivityLatestId.className())
+                        migration.deleteData(forType: tableActivityPreview.className())
+                        migration.deleteData(forType: tableActivitySubjectRich.className())
+                    }
+
                 }, shouldCompactOnLaunch: { totalBytes, usedBytes in
                 }, shouldCompactOnLaunch: { totalBytes, usedBytes in
 
 
                     // totalBytes refers to the size of the file on disk in bytes (data + free space)
                     // totalBytes refers to the size of the file on disk in bytes (data + free space)

+ 1 - 1
iOSClient/NCGlobal.swift

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