wip
This commit is contained in:
parent
bdcc984386
commit
da104ec43e
|
@ -55,6 +55,7 @@ final class ClientsStore: ObservableObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Login/Connections
|
||||||
extension ClientsStore {
|
extension ClientsStore {
|
||||||
func tryLogin(_ jidStr: String, _ pass: String) async throws {
|
func tryLogin(_ jidStr: String, _ pass: String) async throws {
|
||||||
// login with fake timeout
|
// login with fake timeout
|
||||||
|
@ -79,25 +80,8 @@ extension ClientsStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Manage Rosters
|
||||||
extension ClientsStore {
|
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 {
|
func addRoster(_ credentials: Credentials, contactJID: String, name: String?, groups: [String]) async throws {
|
||||||
// check that roster exist in db as locally deleted and undelete it
|
// check that roster exist in db as locally deleted and undelete it
|
||||||
let deletedLocally = await Roster.allDeletedLocally
|
let deletedLocally = await Roster.allDeletedLocally
|
||||||
|
@ -121,25 +105,7 @@ extension ClientsStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ClientsStore {
|
// MARK: - Produce stores for conversation
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension ClientsStore {
|
extension ClientsStore {
|
||||||
func conversationStores(for roster: Roster) async throws -> (MessagesStore, AttachmentsStore) {
|
func conversationStores(for roster: Roster) async throws -> (MessagesStore, AttachmentsStore) {
|
||||||
while !ready {
|
while !ready {
|
||||||
|
@ -170,3 +136,41 @@ extension ClientsStore {
|
||||||
return (conversationStore, attachmentsStore)
|
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