Fix timeSinceLastOpen usage

pull/418/head
Niels Andriesse 4 years ago
parent 0d6ce4a14b
commit 601062c9ef

@ -4,18 +4,17 @@ import SessionSnodeKit
@objc(SNOpenGroupAPIV2) @objc(SNOpenGroupAPIV2)
public final class OpenGroupAPIV2 : NSObject { public final class OpenGroupAPIV2 : NSObject {
private static var authTokenPromises: [String:Promise<String>] = [:] private static var authTokenPromises: [String:Promise<String>] = [:]
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 let workQueue = DispatchQueue(label: "OpenGroupAPIV2.workQueue", qos: .userInitiated) // It's important that this is a serial queue
public static var moderators: [String:[String:Set<String>]] = [:] // Server URL to room ID to set of moderator IDs public static var moderators: [String:[String:Set<String>]] = [:] // Server URL to room ID to set of moderator IDs
public static var defaultRoomsPromise: Promise<[Info]>? public static var defaultRoomsPromise: Promise<[Info]>?
public static var groupImagePromises: [String:Promise<Data>] = [:] public static var groupImagePromises: [String:Promise<Data>] = [:]
private static var hasPerformedInitialPoll: [String:Bool] = [:] private static let timeSinceLastOpen: TimeInterval = {
private static var hasUpdatedLastOpenDate = false guard let lastOpen = UserDefaults.standard[.lastOpen] else { return .greatestFiniteMagnitude }
let now = Date()
static var timeSinceLastOpen:Double = { return now.timeIntervalSince(lastOpen)
let lastOpenDate = UserDefaults.standard[.lastOpenDate]
let now = Double(NSDate.millisecondTimestamp())
return now - lastOpenDate
}() }()
// MARK: Settings // MARK: Settings
@ -153,21 +152,20 @@ public final class OpenGroupAPIV2 : NSObject {
let rooms = storage.getAllV2OpenGroups().values.filter { $0.server == server }.map { $0.room } let rooms = storage.getAllV2OpenGroups().values.filter { $0.server == server }.map { $0.room }
var body: [JSON] = [] var body: [JSON] = []
var authTokenPromises: [String:Promise<String>] = [:] var authTokenPromises: [String:Promise<String>] = [:]
let timeSinceLastOpen = self.timeSinceLastOpen let useMessageLimit = (hasPerformedInitialPoll[server] != true && timeSinceLastOpen > OpenGroupPollerV2.maxInactivityPeriod)
let useMessageLimit = (!(hasPerformedInitialPoll[server] ?? false) && timeSinceLastOpen > OpenGroupPollerV2.maxInactivityPeriod)
hasPerformedInitialPoll[server] = true hasPerformedInitialPoll[server] = true
if(!hasUpdatedLastOpenDate) { if !hasUpdatedLastOpenDate {
UserDefaults.standard[.lastOpenDate] = Double(NSDate.millisecondTimestamp()) UserDefaults.standard[.lastOpen] = Date()
hasUpdatedLastOpenDate = true hasUpdatedLastOpenDate = true
} }
for room in rooms { for room in rooms {
authTokenPromises[room] = getAuthToken(for: room, on: server) authTokenPromises[room] = getAuthToken(for: room, on: server)
var json: JSON = [ "room_id" : room ] var json: JSON = [ "room_id" : room ]
if let lastMessageServerID = storage.getLastMessageServerID(for: room, on: server) { if let lastMessageServerID = storage.getLastMessageServerID(for: room, on: server) {
json["from_message_server_id"] = (useMessageLimit) ? nil : lastMessageServerID json["from_message_server_id"] = useMessageLimit ? nil : lastMessageServerID
} }
if let lastDeletionServerID = storage.getLastDeletionServerID(for: room, on: server) { if let lastDeletionServerID = storage.getLastDeletionServerID(for: room, on: server) {
json["from_deletion_server_id"] = (useMessageLimit) ? nil : lastDeletionServerID json["from_deletion_server_id"] = useMessageLimit ? nil : lastDeletionServerID
} }
body.append(json) body.append(json)
} }

@ -9,7 +9,7 @@ public final class OpenGroupPollerV2 : NSObject {
// MARK: Settings // MARK: Settings
private let pollInterval: TimeInterval = 4 private let pollInterval: TimeInterval = 4
static let maxInactivityPeriod: Double = 14 * 24 * 60 * 60 * 1000 static let maxInactivityPeriod: Double = 14 * 24 * 60 * 60
// MARK: Lifecycle // MARK: Lifecycle
public init(for server: String) { public init(for server: String) {

@ -14,11 +14,11 @@ public enum SNUserDefaults {
case lastDisplayNameUpdate case lastDisplayNameUpdate
case lastProfilePictureUpdate case lastProfilePictureUpdate
case lastOpenGroupImageUpdate case lastOpenGroupImageUpdate
case lastOpen
} }
public enum Double : Swift.String { public enum Double : Swift.String {
case lastDeviceTokenUpload = "lastDeviceTokenUploadTime" case lastDeviceTokenUpload = "lastDeviceTokenUploadTime"
case lastOpenDate
} }
public enum Int : Swift.String { public enum Int : Swift.String {

Loading…
Cancel
Save