RoomsListViewModel.swift 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //
  2. // RoomsListViewModel.swift
  3. // Chat
  4. //
  5. // Created by Sergey Tarasov on 10.08.2022.
  6. //
  7. import Foundation
  8. import XMPPFramework
  9. import XMPPFrameworkSwift
  10. final class RoomsListViewModel: NSObject, ObservableObject {
  11. let muc: XMPPMUCLight = XMPPMUCLight()
  12. @Published var rooms: [Room] = []
  13. var timer: Timer?
  14. override init() {
  15. super.init()
  16. self.muc.activate(XMPPController.shared.xmppStream)
  17. self.muc.addDelegate(self, delegateQueue: .main)
  18. self.timer = Timer(timeInterval: 2, repeats: true, block: { [weak self] timer in
  19. self?.fetchRooms()
  20. if !(self?.rooms.isEmpty ?? false) {
  21. timer.invalidate()
  22. }
  23. })
  24. }
  25. func fetchRooms() {
  26. let success = self.muc.discoverRooms(forServiceNamed: "chat.msg.sharix-app.org")
  27. print(success)
  28. }
  29. }
  30. extension RoomsListViewModel: XMPPMUCLightDelegate {
  31. func xmppMUCLight(_ sender: XMPPMUCLight, didDiscoverRooms rooms: [DDXMLElement], forServiceNamed serviceName: String) {
  32. debugPrint(rooms)
  33. self.rooms = rooms.map({ Room(jidString: $0.attributeStringValue(forName: "jid") ?? "", name: $0.attributeStringValue(forName: "name") ?? "") })
  34. }
  35. }