InviteToJoinRoomManager.swift 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // InviteToJoinRoomManager.swift
  3. // TUIRoomKit
  4. //
  5. // Created by janejntang on 2023/7/3.
  6. // You can choose to invite members and send invitations.
  7. import Foundation
  8. import RTCRoomEngine
  9. import TUICore
  10. class InviteToJoinRoomManager {
  11. class func startInviteToJoinRoom(message: RoomMessageModel, inviter: TUILoginUserInfo) {
  12. let inviteJoinModel = InviteJoinModel(message: message, inviter: inviter)
  13. pushSelectGroupMemberViewController(groupId: message.groupId) { responseData in
  14. guard let modelList =
  15. responseData[TUICore_TUIContactObjectFactory_SelectGroupMemberVC_ResultUserList] as? [TUIUserModel]
  16. else { return }
  17. var invitedList: [String] = []
  18. for userModel in modelList {
  19. invitedList.append(userModel.userId)
  20. }
  21. inviteToJoinRoom(inviteJoinModel: inviteJoinModel, invitedList: invitedList)
  22. }
  23. }
  24. class func pushSelectGroupMemberViewController(groupId: String, callback: @escaping TUIValueResultCallback) {
  25. let param = [TUICore_TUIContactObjectFactory_SelectGroupMemberVC_GroupID: groupId]
  26. if let navigateController = RoomMessageManager.shared.navigateController {
  27. navigateController.push(TUICore_TUIContactObjectFactory_SelectGroupMemberVC_Classic, param: param) { responseData in
  28. callback(responseData)
  29. }
  30. } else {
  31. let nav = UINavigationController()
  32. let currentViewController = getCurrentWindowViewController()
  33. currentViewController?.present(TUICore_TUIContactObjectFactory_SelectGroupMemberVC_Classic,
  34. param: param, embbedIn: nav,
  35. forResult: { responseData in
  36. callback(responseData)
  37. })
  38. }
  39. }
  40. class func inviteToJoinRoom(inviteJoinModel: InviteJoinModel, invitedList: [String]) {
  41. guard invitedList.count > 0 else { return }
  42. let dataDict = inviteJoinModel.getDicFromInviteJoinModel(inviteJoinModel: inviteJoinModel)
  43. guard let dataString = dataDict.convertToString() else { return }
  44. let pushInfo = V2TIMOfflinePushInfo()
  45. invitedList.forEach { userId in
  46. V2TIMManager.sharedInstance().invite(invitee: userId,
  47. data: dataString,
  48. onlineUserOnly: true,
  49. offlinePushInfo: pushInfo,
  50. timeout: 60) {
  51. debugPrint("invite,success")
  52. } fail: { code, message in
  53. debugPrint("invite,code:\(code),message:\(String(describing: message))")
  54. }
  55. }
  56. }
  57. class private func getCurrentWindowViewController() -> UIViewController? {
  58. var keyWindow: UIWindow?
  59. for window in UIApplication.shared.windows {
  60. if window.isMember(of: UIWindow.self), window.isKeyWindow {
  61. keyWindow = window
  62. break
  63. }
  64. }
  65. guard let rootController = keyWindow?.rootViewController else {
  66. return nil
  67. }
  68. func findCurrentController(from vc: UIViewController?) -> UIViewController? {
  69. if let nav = vc as? UINavigationController {
  70. return findCurrentController(from: nav.topViewController)
  71. } else if let tabBar = vc as? UITabBarController {
  72. return findCurrentController(from: tabBar.selectedViewController)
  73. } else if let presented = vc?.presentedViewController {
  74. return findCurrentController(from: presented)
  75. }
  76. return vc
  77. }
  78. let viewController = findCurrentController(from: rootController)
  79. return viewController
  80. }
  81. }