diff --git a/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift b/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift index 4ffadb993..e7ccbfd58 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift @@ -9,6 +9,15 @@ public final class OpenGroupAPIV2 : NSObject { public static var defaultRoomsPromise: Promise<[Info]>? public static var groupImagePromises: [String:Promise] = [:] + private static var hasPerformedInitialPoll: [String:Bool] = [:] + private static var hasUpdatedLastOpenDate = false + + static var timeSinceLastOpen:Double = { + let lastOpenDate = UserDefaults.standard[.lastOpenDate] + let now = Double(NSDate.millisecondTimestamp()) + return now - lastOpenDate + }() + // MARK: Settings public static let defaultServer = "http://116.203.70.33" public static let defaultServerPublicKey = "a03c383cf63c3c4efe67acc52112a6dd734b3a946b9545f488aaa93da7991238" @@ -144,14 +153,21 @@ public final class OpenGroupAPIV2 : NSObject { let rooms = storage.getAllV2OpenGroups().values.filter { $0.server == server }.map { $0.room } var body: [JSON] = [] var authTokenPromises: [String:Promise] = [:] + let timeSinceLastOpen = self.timeSinceLastOpen + let useMessageLimit = (!(hasPerformedInitialPoll[server] ?? false) && timeSinceLastOpen > OpenGroupPollerV2.maxInactivityPeriod) + hasPerformedInitialPoll[server] = true + if(!hasUpdatedLastOpenDate) { + UserDefaults.standard[.lastOpenDate] = Double(NSDate.millisecondTimestamp()) + hasUpdatedLastOpenDate = true + } for room in rooms { authTokenPromises[room] = getAuthToken(for: room, on: server) var json: JSON = [ "room_id" : room ] if let lastMessageServerID = storage.getLastMessageServerID(for: room, on: server) { - json["from_message_server_id"] = lastMessageServerID + json["from_message_server_id"] = (useMessageLimit) ? nil : lastMessageServerID } if let lastDeletionServerID = storage.getLastDeletionServerID(for: room, on: server) { - json["from_deletion_server_id"] = lastDeletionServerID + json["from_deletion_server_id"] = (useMessageLimit) ? nil : lastDeletionServerID } body.append(json) } diff --git a/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift b/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift index dc0d345d6..20213de7b 100644 --- a/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift +++ b/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift @@ -9,6 +9,7 @@ public final class OpenGroupPollerV2 : NSObject { // MARK: Settings private let pollInterval: TimeInterval = 4 + static let maxInactivityPeriod: Double = 14 * 24 * 60 * 60 * 1000 // MARK: Lifecycle public init(for server: String) { diff --git a/SessionUtilitiesKit/General/SNUserDefaults.swift b/SessionUtilitiesKit/General/SNUserDefaults.swift index 235b92d92..b5cf48718 100644 --- a/SessionUtilitiesKit/General/SNUserDefaults.swift +++ b/SessionUtilitiesKit/General/SNUserDefaults.swift @@ -18,6 +18,7 @@ public enum SNUserDefaults { public enum Double : Swift.String { case lastDeviceTokenUpload = "lastDeviceTokenUploadTime" + case lastOpenDate } public enum Int : Swift.String {