mv-experiment #1
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue