增加换肤功能

This commit is contained in:
启星
2025-08-14 10:07:49 +08:00
parent f6964c1e89
commit 4f9318d98e
8789 changed files with 978530 additions and 2 deletions

View File

@@ -0,0 +1,16 @@
//
// UserActions.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/6/5.
//
import RTCRoomEngine
enum UserActions {
static let key = "action.user"
static let getSelfInfo = ActionTemplate(id: key.appending(".getSelfInfo"))
static let updateSelfInfo = ActionTemplate(id: key.appending(".updateSelfInfo"), payloadType: UserInfo.self)
static let fetchUserInfo = ActionTemplate(id: key.appending(".fetchUserInfo"), payloadType: String.self)
static let updateAllUsers = ActionTemplate(id: key.appending(".updateAllUsers"), payloadType: [UserInfo].self)
}

View File

@@ -0,0 +1,32 @@
//
// UserEffects.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/6/5.
//
import Foundation
import Combine
import ImSDK_Plus
import RTCRoomEngine
class UserEffects: Effects {
typealias Environment = ServiceCenter
let getSelfInfo = Effect<Environment>.dispatchingOne { actions, environment in
actions
.wasCreated(from: UserActions.getSelfInfo)
.flatMap { action -> AnyPublisher<Action, Never> in
let selfId = environment.store?.selectCurrent(UserSelectors.getSelfId) ?? ""
return environment.userService.fetchUserInfo(selfId)
.map { userInfo in
return UserActions.updateSelfInfo(payload: userInfo)
}
.catch { error -> Just<Action> in
return Just(ErrorActions.throwError(payload: error))
}
.eraseToAnyPublisher()
}
.eraseToAnyPublisher()
}
}

View File

@@ -0,0 +1,25 @@
//
// UserReducer.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/6/5.
//
import RTCRoomEngine
import TUICore
let userReducer = Reducer<UserState>(
ReduceOn(UserActions.getSelfInfo, reduce: { state, action in
var selfInfo = UserInfo()
selfInfo.userId = TUILogin.getUserID() ?? ""
selfInfo.userName = TUILogin.getNickName() ?? ""
selfInfo.avatarUrl = TUILogin.getFaceUrl() ?? ""
state.selfInfo = selfInfo
}),
ReduceOn(UserActions.updateSelfInfo, reduce: { state, action in
state.selfInfo = action.payload
}),
ReduceOn(UserActions.updateAllUsers, reduce: { state, action in
state.allUsers = action.payload
})
)

View File

@@ -0,0 +1,19 @@
//
// UserSelectors.swift
// TUIRoomKit
//
// Created by CY zhao on 2024/6/5.
//
import Foundation
enum UserSelectors {
static let getUserState = Selector(keyPath: \OperationState.userState)
static let getSelfInfo = Selector.with(getUserState, keyPath:\UserState.selfInfo)
static let getSelfId = Selector.with(getSelfInfo, keyPath:\UserInfo.userId)
static let getSelfAvatarURL = Selector.with(getSelfInfo, keyPath: \UserInfo.avatarUrl)
static let getSelfUserName = Selector.with(getSelfInfo, keyPath: \UserInfo.userName)
static let getAllUsers = Selector.with(getUserState, keyPath: \UserState.allUsers)
}