diff --git a/SessionMessagingKit/Database/Models/SessionThread.swift b/SessionMessagingKit/Database/Models/SessionThread.swift index 699eb0786..59abf77aa 100644 --- a/SessionMessagingKit/Database/Models/SessionThread.swift +++ b/SessionMessagingKit/Database/Models/SessionThread.swift @@ -462,6 +462,34 @@ public extension SessionThread { ) } + func isMessageRequestFromCommunity(_ db: Database, openGroupId: String) -> Bool { + var isMessageRequestFromCommunity: Bool = false + if let currentUserBlinded15PublicKey: String = Self.getUserHexEncodedBlindedKey( + db, + threadId: openGroupId, + threadVariant: .community, + blindingPrefix: .blinded15 + ) { + isMessageRequestFromCommunity = isMessageRequestFromCommunity || ((try? Interaction + .filter(Interaction.Columns.threadId == self.id) + .filter(Interaction.Columns.openGroupWhisperTo == currentUserBlinded15PublicKey) + .isNotEmpty(db)) ?? false) + } + if let currentUserBlinded25PublicKey: String = Self.getUserHexEncodedBlindedKey( + db, + threadId: openGroupId, + threadVariant: .community, + blindingPrefix: .blinded25 + ) { + isMessageRequestFromCommunity = isMessageRequestFromCommunity || ((try? Interaction + .filter(Interaction.Columns.threadId == self.id) + .filter(Interaction.Columns.openGroupWhisperTo == currentUserBlinded25PublicKey) + .isNotEmpty(db)) ?? false) + } + + return isMessageRequestFromCommunity + } + func isNoteToSelf(_ db: Database? = nil) -> Bool { return ( variant == .contact && diff --git a/SessionMessagingKit/Open Groups/OpenGroupManager.swift b/SessionMessagingKit/Open Groups/OpenGroupManager.swift index d4230c393..2ab473109 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupManager.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupManager.swift @@ -365,9 +365,26 @@ public final class OpenGroupManager { .updateAllAndConfig(db, OpenGroup.Columns.isActive.set(to: false)) } - //TODO: Remove message requests from this open group + if !calledFromConfigHandling, let server: String = server, let roomToken: String = roomToken { + try? SessionUtil.remove(db, server: server, roomToken: roomToken) + } + } + + private func cleanMessageRequests( + _ db: Database, + openGroupId: String, + openGroupServer: String?, + calledFromConfigHandling: Bool, + using dependencies: Dependencies = Dependencies() + ) { + // Remove threads with only message requests from open group + _ = try? SessionThread + .filter(SessionThread.isMessageRequest(userPublicKey: getUserHexEncodedPublicKey(db, using: dependencies))) + .fetchAll(db) + .filter { $0.isMessageRequestFromCommunity(db, openGroupId: openGroupId)} + .map { try $0.delete(db)} - if !calledFromConfigHandling, let server: String = server { + if !calledFromConfigHandling, let server: String = openGroupServer { //Remove inbox messages if let data = try? OpenGroupAPI.preparedClearInbox(db, on: server) { OpenGroupAPI @@ -375,10 +392,6 @@ public final class OpenGroupManager { .map { _ in [server: true] } .sinkUntilComplete() } - - if let roomToken: String = roomToken { - try? SessionUtil.remove(db, server: server, roomToken: roomToken) - } } }