diff --git a/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift b/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift index 4ffadb993..600b6545f 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupAPIV2.swift @@ -4,11 +4,19 @@ import SessionSnodeKit @objc(SNOpenGroupAPIV2) public final class OpenGroupAPIV2 : NSObject { private static var authTokenPromises: [String:Promise] = [:] + private static var hasPerformedInitialPoll: [String:Bool] = [:] + private static var hasUpdatedLastOpenDate = false public static let workQueue = DispatchQueue(label: "OpenGroupAPIV2.workQueue", qos: .userInitiated) // It's important that this is a serial queue public static var moderators: [String:[String:Set]] = [:] // Server URL to room ID to set of moderator IDs public static var defaultRoomsPromise: Promise<[Info]>? public static var groupImagePromises: [String:Promise] = [:] - + + private static let timeSinceLastOpen: TimeInterval = { + guard let lastOpen = UserDefaults.standard[.lastOpen] else { return .greatestFiniteMagnitude } + let now = Date() + return now.timeIntervalSince(lastOpen) + }() + // MARK: Settings public static let defaultServer = "http://116.203.70.33" public static let defaultServerPublicKey = "a03c383cf63c3c4efe67acc52112a6dd734b3a946b9545f488aaa93da7991238" @@ -144,14 +152,20 @@ 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 useMessageLimit = (hasPerformedInitialPoll[server] != true && timeSinceLastOpen > OpenGroupPollerV2.maxInactivityPeriod) + hasPerformedInitialPoll[server] = true + if !hasUpdatedLastOpenDate { + UserDefaults.standard[.lastOpen] = Date() + 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..a1975197b 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 // MARK: Lifecycle public init(for server: String) { diff --git a/SessionUtilitiesKit/General/SNUserDefaults.swift b/SessionUtilitiesKit/General/SNUserDefaults.swift index 235b92d92..8a0fad35b 100644 --- a/SessionUtilitiesKit/General/SNUserDefaults.swift +++ b/SessionUtilitiesKit/General/SNUserDefaults.swift @@ -14,6 +14,7 @@ public enum SNUserDefaults { case lastDisplayNameUpdate case lastProfilePictureUpdate case lastOpenGroupImageUpdate + case lastOpen } public enum Double : Swift.String {