diff --git a/ConversationsClassic/AppData/Store/ClientsStore.swift b/ConversationsClassic/AppData/Store/ClientsStore.swift index ed07fcd..a6fd61f 100644 --- a/ConversationsClassic/AppData/Store/ClientsStore.swift +++ b/ConversationsClassic/AppData/Store/ClientsStore.swift @@ -55,6 +55,7 @@ final class ClientsStore: ObservableObject { } } +// MARK: - Login/Connections extension ClientsStore { func tryLogin(_ jidStr: String, _ pass: String) async throws { // login with fake timeout @@ -79,25 +80,8 @@ extension ClientsStore { } } +// MARK: - Manage Rosters extension ClientsStore { - private func resubscribeRosters() { - let clientsJids = clients - .filter { $0.state != .disabled } - .map { $0.credentials.bareJid } - - rostersCancellable = ValueObservation.tracking { db in - try Roster - .filter(clientsJids.contains(Column("bareJid"))) - .filter(Column("locallyDeleted") == false) - .fetchAll(db) - } - .publisher(in: Database.shared.dbQueue) - .catch { _ in Just([]) } - .sink { [weak self] rosters in - self?.actualRosters = rosters - } - } - func addRoster(_ credentials: Credentials, contactJID: String, name: String?, groups: [String]) async throws { // check that roster exist in db as locally deleted and undelete it let deletedLocally = await Roster.allDeletedLocally @@ -121,25 +105,7 @@ extension ClientsStore { } } -extension ClientsStore { - private func resubscribeChats() { - let clientsJids = clients - .filter { $0.state != .disabled } - .map { $0.credentials.bareJid } - - chatsCancellable = ValueObservation.tracking { db in - try Chat - .filter(clientsJids.contains(Column("account"))) - .fetchAll(db) - } - .publisher(in: Database.shared.dbQueue) - .catch { _ in Just([]) } - .sink { [weak self] chats in - self?.actualChats = chats - } - } -} - +// MARK: - Produce stores for conversation extension ClientsStore { func conversationStores(for roster: Roster) async throws -> (MessagesStore, AttachmentsStore) { while !ready { @@ -170,3 +136,41 @@ extension ClientsStore { return (conversationStore, attachmentsStore) } } + +// MARK: - Subscriptions +private extension ClientsStore { + private func resubscribeRosters() { + let clientsJids = clients + .filter { $0.state != .disabled } + .map { $0.credentials.bareJid } + + rostersCancellable = ValueObservation.tracking { db in + try Roster + .filter(clientsJids.contains(Column("bareJid"))) + .filter(Column("locallyDeleted") == false) + .fetchAll(db) + } + .publisher(in: Database.shared.dbQueue) + .catch { _ in Just([]) } + .sink { [weak self] rosters in + self?.actualRosters = rosters + } + } + + func resubscribeChats() { + let clientsJids = clients + .filter { $0.state != .disabled } + .map { $0.credentials.bareJid } + + chatsCancellable = ValueObservation.tracking { db in + try Chat + .filter(clientsJids.contains(Column("account"))) + .fetchAll(db) + } + .publisher(in: Database.shared.dbQueue) + .catch { _ in Just([]) } + .sink { [weak self] chats in + self?.actualChats = chats + } + } +}