From 5504f7465979f1eab0129c0d72f3e6e39fcdd7cf Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 26 Mar 2021 16:31:15 +1100 Subject: [PATCH] Show V2 open group member count --- Session/Conversations/ConversationVC.swift | 4 ++++ SessionMessagingKit/Database/Storage+OpenGroups.swift | 6 +++++- SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift | 8 ++++++-- SessionMessagingKit/Storage.swift | 4 +++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Session/Conversations/ConversationVC.swift b/Session/Conversations/ConversationVC.swift index 4f8a69a17..00416af6f 100644 --- a/Session/Conversations/ConversationVC.swift +++ b/Session/Conversations/ConversationVC.swift @@ -195,6 +195,10 @@ final class ConversationVC : BaseVC, ConversationViewModelDelegate, OWSConversat if !draft.isEmpty { snInputView.text = draft } + // Update member count if this is a V2 open group + if let v2OpenGroup = Storage.shared.getV2OpenGroup(for: thread.uniqueId!) { + OpenGroupAPIV2.getMemberCount(for: v2OpenGroup.room, on: v2OpenGroup.server).retainUntilComplete() + } } override func viewDidLayoutSubviews() { diff --git a/SessionMessagingKit/Database/Storage+OpenGroups.swift b/SessionMessagingKit/Database/Storage+OpenGroups.swift index 16aa72ccd..e4eee29c4 100644 --- a/SessionMessagingKit/Database/Storage+OpenGroups.swift +++ b/SessionMessagingKit/Database/Storage+OpenGroups.swift @@ -241,7 +241,11 @@ extension Storage { } public func setUserCount(to newValue: Int, forOpenGroupWithID openGroupID: String, using transaction: Any) { - (transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: openGroupID, inCollection: Storage.oldOpenGroupUserCountCollection) + let transaction = transaction as! YapDatabaseReadWriteTransaction + transaction.setObject(newValue, forKey: openGroupID, inCollection: Storage.oldOpenGroupUserCountCollection) + transaction.addCompletionQueue(.main) { + NotificationCenter.default.post(name: .groupThreadUpdated, object: nil) + } } private static let oldOpenGroupCollection = "LokiPublicChatCollection" diff --git a/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift b/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift index f135e9642..580593fa6 100644 --- a/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift +++ b/SessionMessagingKit/Open Groups/V2/OpenGroupAPIV2.swift @@ -343,10 +343,14 @@ public final class OpenGroupAPIV2 : NSObject { } } - public static func getMemberCount(for room: String, on server: String) -> Promise { + public static func getMemberCount(for room: String, on server: String) -> Promise { let request = Request(verb: .get, room: room, server: server, endpoint: "member_count") return send(request).map(on: DispatchQueue.global(qos: .userInitiated)) { json in - guard let memberCount = json["member_count"] as? UInt else { throw Error.parsingFailed } + guard let memberCount = json["member_count"] as? UInt64 else { throw Error.parsingFailed } + let storage = SNMessagingKitConfiguration.shared.storage + storage.write { transaction in + storage.setUserCount(to: memberCount, forV2OpenGroupWithID: "\(server).\(room)", using: transaction) + } return memberCount } } diff --git a/SessionMessagingKit/Storage.swift b/SessionMessagingKit/Storage.swift index 537fa3a59..6440d37ee 100644 --- a/SessionMessagingKit/Storage.swift +++ b/SessionMessagingKit/Storage.swift @@ -67,7 +67,7 @@ public protocol SessionMessagingKitStorageProtocol { // MARK: - Open Group Metadata - func setUserCount(to newValue: Int, forOpenGroupWithID openGroupID: String, using transaction: Any) + func setUserCount(to newValue: UInt64, forV2OpenGroupWithID openGroupID: String, using transaction: Any) func getIDForMessage(withServerID serverID: UInt64) -> String? func setIDForMessage(withServerID serverID: UInt64, to messageID: String, using transaction: Any) func setOpenGroupDisplayName(to displayName: String, for publicKey: String, inOpenGroupWithID openGroupID: String, using transaction: Any) @@ -104,4 +104,6 @@ public protocol SessionMessagingKitStorageProtocol { func getAllUserOpenGroups() -> [String:OpenGroup] func getOpenGroup(for threadID: String) -> OpenGroup? + + func setUserCount(to newValue: Int, forOpenGroupWithID openGroupID: String, using transaction: Any) }