// // User.swift // TUICallKit // // Created by vincepzhang on 2023/1/6. // import Foundation import ImSDK_Plus import TUICallEngine import TUICore enum UserUpdate { case delete(Int) case insert(User, Int) case move(Int, Int) } class User { let id: Observable = Observable("") let nickname: Observable = Observable("") let avatar: Observable = Observable("") let remark: Observable = Observable("") let callRole: Observable = Observable(.none) let callStatus: Observable = Observable(.none) let audioAvailable: Observable = Observable(false) let videoAvailable: Observable = Observable(false) let playoutVolume: Observable = Observable(0) let networkQualityReminder: Observable = Observable(false) var index: Int = -1 static func convertUserFromImFullInfo(user: V2TIMGroupMemberFullInfo) -> User { let dstUser = User() dstUser.nickname.value = user.nickName ?? "" dstUser.avatar.value = user.faceURL ?? "" dstUser.id.value = user.userID ?? "" return dstUser } static func convertUser(user: V2TIMUserInfo) -> User { return self.convertUser(user: user, volume: 0) } static func convertUser(user: V2TIMUserInfo, volume: Float) -> User { let dstUser = User() dstUser.nickname.value = user.nickName ?? "" dstUser.avatar.value = user.faceURL ?? "" dstUser.id.value = user.userID ?? "" dstUser.playoutVolume.value = volume return dstUser } static func getUserInfosFromIM(userIDs: [String], response: @escaping ([User]) -> Void ) { V2TIMManager.sharedInstance().getFriendsInfo(userIDs) { friendInfosOptional in guard let friendInfos = friendInfosOptional else { return } var userModels: [User] = Array() for friendInfo in friendInfos { let userModel = convertUser(user: friendInfo.friendInfo.userFullInfo) userModel.remark.value = friendInfo.friendInfo.friendRemark ?? "" userModels.append(userModel) } response(userModels) } fail: { code, message in print("getUsersInfo file code:\(code) message:\(message ?? "") ") } } static func getSelfUserInfo(response: @escaping (User) -> Void ){ guard let selfId = TUILogin.getUserID() else { return } var selfInfo = User() User.getUserInfosFromIM(userIDs: [selfId]) { users in if let user = users.first { selfInfo = user response(selfInfo) } } } static func getUserDisplayName(user: User) -> String { if !user.remark.value.isEmpty { return user.remark.value } if !user.nickname.value.isEmpty { return user.nickname.value } return user.id.value } }