87 lines
3.8 KiB
Swift
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
|
|
}
|
|
}
|