ChatListViewModel.swift 932 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //
  2. // ChatListViewModel.swift
  3. // Chat
  4. //
  5. // Created by Sergey Tarasov on 25.07.2022.
  6. //
  7. import Foundation
  8. import XMPPFramework
  9. import XMPPFrameworkSwift
  10. final class ChatListViewModel: NSObject, ObservableObject {
  11. let manager = XMPPController.shared
  12. @Published var users: [User] = []
  13. var nicknames: [String] {
  14. return users.map({ $0.nickname.isEmpty ? $0.jidString : $0.nickname })
  15. }
  16. var timer: Timer?
  17. override init() {
  18. super.init()
  19. self.timer = Timer(timeInterval: 2, repeats: true, block: { [weak self] timer in
  20. self?.fetchChatList()
  21. if !(self?.users.isEmpty ?? true) {
  22. timer.invalidate()
  23. }
  24. })
  25. }
  26. public func fetchChatList() {
  27. let xmppUsers = manager.xmppRosterStorage.sortedUsersByAvailabilityName() as? [XMPPUser]
  28. guard let users = xmppUsers?.compactMap({ User(jidString: $0.jid.bare, nickname: $0.nickname) }) else {
  29. return
  30. }
  31. self.users = users
  32. }
  33. }