117 lines
4.6 KiB
Swift
117 lines
4.6 KiB
Swift
|
|
//
|
||
|
|
// MemberInviteViewModel.swift
|
||
|
|
// TUIRoomKit
|
||
|
|
//
|
||
|
|
// Created by krabyu on 2023/8/21.
|
||
|
|
//
|
||
|
|
|
||
|
|
import Foundation
|
||
|
|
import RTCRoomEngine
|
||
|
|
|
||
|
|
protocol MemberInviteResponder : NSObjectProtocol {
|
||
|
|
func showCopyToast(copyType: CopyType?)
|
||
|
|
}
|
||
|
|
|
||
|
|
class MemberInviteViewModel {
|
||
|
|
var title: String = .inviteMembersToJoin
|
||
|
|
private(set) lazy var messageItems: [ListCellItemData] = {
|
||
|
|
return generateListData()
|
||
|
|
}()
|
||
|
|
private lazy var roomInfo = {
|
||
|
|
EngineManager.shared.store.roomInfo
|
||
|
|
}()
|
||
|
|
private lazy var conferenceInfoDetails = {
|
||
|
|
title
|
||
|
|
}()
|
||
|
|
private var roomLink: String? {
|
||
|
|
guard let bundleId = Bundle.main.bundleIdentifier else { return nil }
|
||
|
|
if bundleId == "com.tencent.tuiroom.apiexample" || bundleId == "com.tencent.fx.rtmpdemo" {
|
||
|
|
return "https://web.sdk.qcloud.com/trtc/webrtc/test/tuiroom-inner/index.html#/" + "room?roomId=" + roomInfo.roomId
|
||
|
|
} else if bundleId == "com.tencent.mrtc" {
|
||
|
|
return "https://web.sdk.qcloud.com/component/tuiroom/index.html#/" + "room?roomId=" + roomInfo.roomId
|
||
|
|
} else {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
}
|
||
|
|
weak var viewResponder: MemberInviteResponder?
|
||
|
|
|
||
|
|
func createListCellItemData(titleText: String, messageText: String,
|
||
|
|
hasButton: Bool, copyType: CopyType?) -> ListCellItemData {
|
||
|
|
let item = ListCellItemData()
|
||
|
|
item.titleText = titleText
|
||
|
|
item.messageText = messageText
|
||
|
|
item.hasRightButton = hasButton
|
||
|
|
if hasButton {
|
||
|
|
let buttonData = ButtonItemData()
|
||
|
|
buttonData.normalIcon = "room_copy"
|
||
|
|
buttonData.normalTitle = .copyText
|
||
|
|
buttonData.cornerRadius = 4
|
||
|
|
buttonData.titleFont = UIFont(name: "PingFangSC-Regular", size: 12)
|
||
|
|
buttonData.titleColor = UIColor(0xB2BBD1)
|
||
|
|
buttonData.backgroundColor = UIColor(0x6B758A).withAlphaComponent(0.7)
|
||
|
|
buttonData.resourceBundle = tuiRoomKitBundle()
|
||
|
|
buttonData.action = { [weak self] sender in
|
||
|
|
guard let self = self, let button = sender as? UIButton else { return }
|
||
|
|
self.copyAction(sender: button, text: item.messageText,copyType: copyType)
|
||
|
|
}
|
||
|
|
conferenceInfoDetails = conferenceInfoDetails + "\n\(titleText) : \(messageText)"
|
||
|
|
item.buttonData = buttonData
|
||
|
|
}
|
||
|
|
return item
|
||
|
|
}
|
||
|
|
|
||
|
|
func generateListData() -> [ListCellItemData] {
|
||
|
|
var array: [ListCellItemData] = []
|
||
|
|
let roomNametem = createListCellItemData(titleText: .roomName, messageText: roomInfo.name, hasButton: false, copyType: nil)
|
||
|
|
array.append(roomNametem)
|
||
|
|
let roomTypeItem = createListCellItemData(titleText: .roomType, messageText: roomInfo.isSeatEnabled ? .onStageSpeechRoom : .freeSpeechRoom, hasButton: false, copyType: nil)
|
||
|
|
array.append(roomTypeItem)
|
||
|
|
let roomIdItem = createListCellItemData(titleText: .roomIdText, messageText: roomInfo.roomId, hasButton: true, copyType: .copyRoomIdType)
|
||
|
|
array.append(roomIdItem)
|
||
|
|
if roomInfo.password.count > 0 {
|
||
|
|
let roomPasswordItem = createListCellItemData(titleText: .roomPassword, messageText: roomInfo.password, hasButton: true, copyType: .copyRoomPassword)
|
||
|
|
array.append(roomPasswordItem)
|
||
|
|
}
|
||
|
|
if let roomLink = roomLink {
|
||
|
|
let roomLinkItem = createListCellItemData(titleText: .roomLinkText, messageText: roomLink, hasButton: true, copyType: .copyRoomLinkType)
|
||
|
|
array.append(roomLinkItem)
|
||
|
|
}
|
||
|
|
return array
|
||
|
|
}
|
||
|
|
|
||
|
|
func copyAction(sender: UIButton, text: String, copyType: CopyType?) {
|
||
|
|
UIPasteboard.general.string = text
|
||
|
|
viewResponder?.showCopyToast(copyType: copyType)
|
||
|
|
}
|
||
|
|
|
||
|
|
func copyAction() {
|
||
|
|
UIPasteboard.general.string = conferenceInfoDetails
|
||
|
|
}
|
||
|
|
|
||
|
|
deinit {
|
||
|
|
debugPrint("deinit \(self)")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private extension String {
|
||
|
|
static var roomIdText: String {
|
||
|
|
localized("ConferenceID")
|
||
|
|
}
|
||
|
|
static var roomLinkText: String {
|
||
|
|
localized("Link")
|
||
|
|
}
|
||
|
|
static var copyText: String {
|
||
|
|
localized("Copy")
|
||
|
|
}
|
||
|
|
static var inviteMemberText: String {
|
||
|
|
localized("Invite member")
|
||
|
|
}
|
||
|
|
static let roomPassword = localized("Conference password")
|
||
|
|
static let conferencePasswordSuccess = localized("Conference password copied successfully.")
|
||
|
|
static let roomName = localized("Room name")
|
||
|
|
static let roomType = localized("Room type")
|
||
|
|
static let freeSpeechRoom = localized("Free Speech Room")
|
||
|
|
static let onStageSpeechRoom = localized("On-stage Speech Room")
|
||
|
|
static let inviteMembersToJoin = localized("Invite Others")
|
||
|
|
}
|