This commit is contained in:
fmodf 2024-12-26 14:12:19 +01:00
parent b8a86a17bf
commit fd1fb2860f
3 changed files with 34 additions and 9 deletions

View file

@ -104,7 +104,8 @@ public final class XMPPClient {
AuthorizationModule(self.storage), AuthorizationModule(self.storage),
StanzaModule(self.storage), StanzaModule(self.storage),
DiscoveryModule(), DiscoveryModule(),
RosterModule(self.storage) RosterModule(self.storage),
PresenceModule()
] ]
public init(storage: any XMPPStorage, userAgent: UserAgent) { public init(storage: any XMPPStorage, userAgent: UserAgent) {

View file

@ -0,0 +1,22 @@
import Foundation
// NSString* const kSubBoth = @"both";
// NSString* const kSubNone = @"none";
// NSString* const kSubTo = @"to";
// NSString* const kSubFrom = @"from";
// NSString* const kSubRemove = @"remove";
// NSString* const kAskSubscribe = @"subscribe";
// TODO: Cancel subscr. request when contact deleted from roster
// Update when server sends roster push also
final class PresenceModule: XmppModule {
let id = "Presence module"
func reduce(oldState: ClientState, with _: Event) -> ClientState {
oldState
}
func process(state _: ClientState, with _: Event) async -> Event? {
nil
}
}

View file

@ -61,13 +61,6 @@ final class RosterModule: XmppModule {
} }
} }
// NSString* const kSubBoth = @"both";
// NSString* const kSubNone = @"none";
// NSString* const kSubTo = @"to";
// NSString* const kSubFrom = @"from";
// NSString* const kSubRemove = @"remove";
// NSString* const kAskSubscribe = @"subscribe";
private extension RosterModule { private extension RosterModule {
private func update(jidStr: String, args: [String: String]) -> Event? { private func update(jidStr: String, args: [String: String]) -> Event? {
print(jidStr, args) print(jidStr, args)
@ -105,10 +98,19 @@ private extension RosterModule {
existItems = existItems.filter { $0.jid == itemJid } existItems = existItems.filter { $0.jid == itemJid }
default: default:
continue if let rosterItem = RosterItem(wrap: item, owner: state.jid) {
existItems = existItems.filter { $0.jid == itemJid }
existItems.append(rosterItem)
} else {
continue
}
} }
} }
// save roster
guard let data = try? JSONEncoder().encode(existItems.map { $0.wrapped }) else { return nil }
await storage?.setRoster(jid: state.jid, roster: data)
// according to RFC-6121 a set from server (push) // according to RFC-6121 a set from server (push)
// shouyld be answered with result // shouyld be answered with result
guard guard