增加换肤功能
This commit is contained in:
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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user