This commit is contained in:
启星
2025-08-08 10:49:36 +08:00
parent 6400cf78bb
commit b5ce3d580a
8780 changed files with 978183 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
//
// ConferenceInvitationState.swift
// TUIRoomKit
//
// Created by jeremiawang on 2024/8/19.
//
import RTCRoomEngine
struct ConferenceInvitationState {
var invitationList: [TUIInvitation] = []
}
extension TUIInvitation {
convenience init(userInfo: UserInfo) {
self.init()
self.invitee = TUIUserInfo()
self.invitee.userId = userInfo.userId
self.invitee.userName = userInfo.userName
self.invitee.avatarUrl = userInfo.avatarUrl
}
static func ==(lhs: TUIInvitation, rhs: TUIInvitation) -> Bool {
return lhs.status == rhs.status &&
lhs.invitee.userId == rhs.invitee.userId &&
lhs.invitee.userName == rhs.invitee.userName &&
lhs.invitee.avatarUrl == rhs.invitee.avatarUrl
}
}

View File

@@ -0,0 +1,78 @@
//
// ListState.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/6/6.
//
import Foundation
import RTCRoomEngine
struct ConferenceListState {
var scheduledConferences: [ConferenceInfo] = []
var fetchScheduledConferencesCursor = ""
}
struct ConferenceInfo {
var scheduleStartTime: UInt = 0
var scheduleEndTime: UInt = 0
var status: TUIConferenceStatus = []
var timeZone: TimeZone = .current
var attendeeListResult = AttendeeListResult()
var durationTime: UInt = 0
var reminderSecondsBeforeStart = 0
// MARK: basic info
var basicInfo = RoomInfo()
init() {}
init(with conferenceInfo: TUIConferenceInfo) {
self.scheduleStartTime = conferenceInfo.scheduleStartTime
self.scheduleEndTime = conferenceInfo.scheduleEndTime
self.durationTime = self.scheduleEndTime - self.scheduleStartTime
self.status = conferenceInfo.status
self.reminderSecondsBeforeStart = conferenceInfo.reminderSecondsBeforeStart
self.basicInfo = RoomInfo(with: conferenceInfo.basicRoomInfo)
}
}
extension ConferenceInfo: Hashable {
static func ==(lhs: ConferenceInfo, rhs: ConferenceInfo) -> Bool {
return lhs.basicInfo.roomId == rhs.basicInfo.roomId &&
lhs.basicInfo.name == rhs.basicInfo.name &&
lhs.scheduleStartTime == rhs.scheduleStartTime &&
lhs.scheduleEndTime == rhs.scheduleEndTime &&
lhs.status == rhs.status
}
func hash(into hasher: inout Hasher) {
hasher.combine(basicInfo.roomId)
hasher.combine(basicInfo.name)
hasher.combine(scheduleStartTime)
hasher.combine(scheduleEndTime)
hasher.combine(status)
}
}
struct AttendeeListResult: Hashable {
var attendeeList: [UserInfo] = []
var fetchCursor: String = ""
var totalCount: UInt = 0
}
extension TUIConferenceInfo {
convenience init(conferenceInfo: ConferenceInfo) {
self.init()
self.scheduleStartTime = UInt(conferenceInfo.scheduleStartTime)
self.scheduleEndTime = self.scheduleStartTime + conferenceInfo.durationTime
self.scheduleAttendees = conferenceInfo.attendeeListResult.attendeeList.map { $0.userId }
self.basicRoomInfo = TUIRoomInfo(roomInfo: conferenceInfo.basicInfo)
self.reminderSecondsBeforeStart = conferenceInfo.reminderSecondsBeforeStart
}
}
extension TUIConferenceStatus: Hashable {
public func hash(into hasher: inout Hasher) {
hasher.combine(self.rawValue)
}
}

View File

@@ -0,0 +1,15 @@
//
// OperationState.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/6/12.
//
import Foundation
struct OperationState {
var roomState = RoomInfo()
var userState = UserState()
var conferenceListState = ConferenceListState()
var conferenceInvitationState = ConferenceInvitationState()
}

View File

@@ -0,0 +1,52 @@
//
// RoomState.swift
// TUIRoomKit
//
// Created by janejntang on 2024/7/9.
//
import Foundation
import RTCRoomEngine
struct RoomInfo {
var roomId = ""
var name = ""
var ownerId = ""
var ownerName = ""
var ownerAvatarUrl = ""
var isSeatEnabled = false
var password = ""
var isMicrophoneDisableForAllUser = true
var isCameraDisableForAllUser = true
var createTime: UInt = 0
var isPasswordEnabled: Bool = false
var isEnteredRoom = false
init() {}
init(with roomInfo: TUIRoomInfo) {
self.roomId = roomInfo.roomId
self.name = roomInfo.name
self.ownerId = roomInfo.ownerId
self.ownerName = roomInfo.ownerName
self.ownerAvatarUrl = roomInfo.ownerAvatarUrl
self.isSeatEnabled = roomInfo.isSeatEnabled
self.password = roomInfo.password
self.isMicrophoneDisableForAllUser = roomInfo.isMicrophoneDisableForAllUser
self.isCameraDisableForAllUser = roomInfo.isCameraDisableForAllUser
self.createTime = roomInfo.createTime
self.isPasswordEnabled = roomInfo.password.count > 0
}
}
extension TUIRoomInfo {
convenience init(roomInfo: RoomInfo) {
self.init()
self.roomId = roomInfo.roomId
self.name = roomInfo.name
self.isSeatEnabled = roomInfo.isSeatEnabled
self.password = roomInfo.password
self.isMicrophoneDisableForAllUser = roomInfo.isMicrophoneDisableForAllUser
self.isCameraDisableForAllUser = roomInfo.isCameraDisableForAllUser
self.seatMode = .applyToTake
}
}

View File

@@ -0,0 +1,147 @@
//
// UserState.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/6/5.
//
import Foundation
import RTCRoomEngine
struct UserState {
var selfInfo: UserInfo = UserInfo()
var allUsers: [UserInfo] = []
var hasAudioStreamUsers = Set<String>()
var hasCameraStreamUsers = Set<String>()
var hasScreenStreamUsers = Set<String>()
var disableMessageUsers = Set<String>()
}
struct UserInfo: Codable {
var userId: String = ""
var userName: String = ""
var avatarUrl: String = ""
var userRole: TUIRole? = .generalUser
init() {}
init(loginUserInfo: TUILoginUserInfo) {
self.userId = loginUserInfo.userId
self.userName = loginUserInfo.userName
self.avatarUrl = loginUserInfo.avatarUrl
}
init(userInfo: TUIUserInfo) {
self.userId = userInfo.userId
self.userName = userInfo.userName
self.avatarUrl = userInfo.avatarUrl
self.userRole = userInfo.userRole
}
init(userEntity: UserEntity) {
self.userId = userEntity.userId
self.userName = userEntity.userName
self.avatarUrl = userEntity.avatarUrl
self.userRole = userEntity.userRole
}
}
enum UserListType {
case allUsers
case onStageUsers
case offStageUsers
case notInRoomUsers
}
extension UserInfo: Hashable {
static func == (lhs: UserInfo, rhs: UserInfo) -> Bool {
return lhs.userId == rhs.userId && lhs.userName == rhs.userName && lhs.avatarUrl == rhs.avatarUrl
}
func hash(into hasher: inout Hasher) {
hasher.combine(userId)
hasher.combine(userName)
hasher.combine(avatarUrl)
hasher.combine(userRole)
}
}
extension UserInfo {
func convertToUser() -> User {
return User(self)
}
}
extension TUIRole: Codable {
public init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let rawValue = try container.decode(UInt.self)
self = TUIRole(rawValue: rawValue) ?? .generalUser
}
public func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(self.rawValue)
}
}
@objc public class User: NSObject, Codable {
private(set) var userInfo: UserInfo
@objc public var userId: String {
get { return userInfo.userId}
}
@objc public var userName: String {
get { return userInfo.userName}
}
@objc public var avatarUrl: String {
get { return userInfo.avatarUrl}
}
@objc public init(userId: String, userName: String, avatarUrl: String) {
var info = UserInfo()
info.userId = userId
info.userName = userName
info.avatarUrl = avatarUrl
self.userInfo = info
super.init()
}
init(_ userInfo: UserInfo) {
self.userInfo = userInfo
super.init()
}
public required init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
self.userInfo = try container.decode(UserInfo.self)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(userInfo)
}
@objc public func setUserId(_ userId: String) {
userInfo.userId = userId
}
@objc public func setUserName(_ userName: String) {
userInfo.userName = userName
}
@objc public func setAvatarUrl(_ avatarUrl: String) {
userInfo.avatarUrl = avatarUrl
}
}
@objc public class ConferenceParticipants: NSObject {
@objc public var selectedList: [User] = []
@objc public var unSelectableList : [User] = []
@objc public init(selectedList: [User] = [], unSelectableList: [User] = []) {
self.selectedList = selectedList
self.unSelectableList = unSelectableList
super.init()
}
}

View File

@@ -0,0 +1,23 @@
//
// ViewState.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/7/15.
//
import Foundation
struct ViewState {
var scheduleViewState = ScheduleViewState()
var invitationViewState = InvitationViewState()
}
struct ScheduleViewState {
var shouldRefreshList = false
var detailViewPopFlag = false
}
struct InvitationViewState {
var invitationViewDismissFlag = true
var showInvitationPopupView = false
}