提交
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
78
TUIKit/TUIRoomKit/Source/State/ConferenceListState.swift
Normal file
78
TUIKit/TUIRoomKit/Source/State/ConferenceListState.swift
Normal 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)
|
||||
}
|
||||
}
|
||||
15
TUIKit/TUIRoomKit/Source/State/OperationState.swift
Normal file
15
TUIKit/TUIRoomKit/Source/State/OperationState.swift
Normal 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()
|
||||
}
|
||||
52
TUIKit/TUIRoomKit/Source/State/RoomState.swift
Normal file
52
TUIKit/TUIRoomKit/Source/State/RoomState.swift
Normal 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
|
||||
}
|
||||
}
|
||||
147
TUIKit/TUIRoomKit/Source/State/UserState.swift
Normal file
147
TUIKit/TUIRoomKit/Source/State/UserState.swift
Normal 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()
|
||||
}
|
||||
}
|
||||
23
TUIKit/TUIRoomKit/Source/State/ViewState.swift
Normal file
23
TUIKit/TUIRoomKit/Source/State/ViewState.swift
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user