Files
featherVoice/TUIKit/TUIRoomKit/RoomExtension/Model/Manager/InviteToJoinRoomManager.swift
2025-08-08 10:49:36 +08:00

87 lines
3.8 KiB
Swift

//
// InviteToJoinRoomManager.swift
// TUIRoomKit
//
// Created by janejntang on 2023/7/3.
// You can choose to invite members and send invitations.
import Foundation
import RTCRoomEngine
import TUICore
class InviteToJoinRoomManager {
class func startInviteToJoinRoom(message: RoomMessageModel, inviter: TUILoginUserInfo) {
let inviteJoinModel = InviteJoinModel(message: message, inviter: inviter)
pushSelectGroupMemberViewController(groupId: message.groupId) { responseData in
guard let modelList =
responseData[TUICore_TUIGroupObjectFactory_SelectGroupMemberVC_ResultUserList] as? [TUIUserModel]
else { return }
var invitedList: [String] = []
for userModel in modelList {
invitedList.append(userModel.userId)
}
inviteToJoinRoom(inviteJoinModel: inviteJoinModel, invitedList: invitedList)
}
}
class func pushSelectGroupMemberViewController(groupId: String, callback: @escaping TUIValueResultCallback) {
let param = [TUICore_TUIGroupObjectFactory_SelectGroupMemberVC_GroupID: groupId]
if let navigateController = RoomMessageManager.shared.navigateController {
navigateController.push(TUICore_TUIGroupObjectFactory_SelectGroupMemberVC_Classic, param: param) { responseData in
callback(responseData)
}
} else {
let nav = UINavigationController()
let currentViewController = getCurrentWindowViewController()
currentViewController?.present(TUICore_TUIGroupObjectFactory_SelectGroupMemberVC_Classic,
param: param, embbedIn: nav,
forResult: { responseData in
callback(responseData)
})
}
}
class func inviteToJoinRoom(inviteJoinModel: InviteJoinModel, invitedList: [String]) {
guard invitedList.count > 0 else { return }
let dataDict = inviteJoinModel.getDicFromInviteJoinModel(inviteJoinModel: inviteJoinModel)
guard let dataString = dataDict.convertToString() else { return }
let pushInfo = V2TIMOfflinePushInfo()
invitedList.forEach { userId in
V2TIMManager.sharedInstance().invite(userId,
data: dataString,
onlineUserOnly: true,
offlinePushInfo: pushInfo,
timeout: 60) {
debugPrint("invite,success")
} fail: { code, message in
debugPrint("invite,code:\(code),message:\(String(describing: message))")
}
}
}
class private func getCurrentWindowViewController() -> UIViewController? {
var keyWindow: UIWindow?
for window in UIApplication.shared.windows {
if window.isMember(of: UIWindow.self), window.isKeyWindow {
keyWindow = window
break
}
}
guard let rootController = keyWindow?.rootViewController else {
return nil
}
func findCurrentController(from vc: UIViewController?) -> UIViewController? {
if let nav = vc as? UINavigationController {
return findCurrentController(from: nav.topViewController)
} else if let tabBar = vc as? UITabBarController {
return findCurrentController(from: tabBar.selectedViewController)
} else if let presented = vc?.presentedViewController {
return findCurrentController(from: presented)
}
return vc
}
let viewController = findCurrentController(from: rootController)
return viewController
}
}