라이브 방

- 차단한 유저의 채팅이 보이지 않도록 수정
This commit is contained in:
Yu Sung 2024-09-05 18:12:10 +09:00
parent 7408288d85
commit 66ce37defa
4 changed files with 63 additions and 21 deletions

View File

@ -189,6 +189,34 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
var timer: DispatchSourceTimer?
private var blockedMemberIdList = Set<Int>()
func getBlockedMemberIdList() {
userRepository.getBlockedMemberIdList()
.sink { result in
switch result {
case .finished:
DEBUG_LOG("finish")
case .failure(let error):
ERROR_LOG(error.localizedDescription)
}
} receiveValue: { [unowned self] response in
let responseData = response.data
do {
let jsonDecoder = JSONDecoder()
let decoded = try jsonDecoder.decode(ApiResponse<[Int]>.self, from: responseData)
if let data = decoded.data, decoded.success {
self.blockedMemberIdList.removeAll()
self.blockedMemberIdList.formUnion(data)
}
} catch {
}
}
.store(in: &subscription)
}
func setOriginOffset(_ offset: CGFloat) {
guard !isCheckedOriginOffset else { return }
self.originOffset = offset
@ -898,21 +926,21 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
}
func kickOut() {
repository.kickOut(roomId: AppState.shared.roomId, userId: kickOutId)
.sink { result in
switch result {
case .finished:
DEBUG_LOG("finish")
case .failure(let error):
ERROR_LOG(error.localizedDescription)
}
} receiveValue: { _ in
}
.store(in: &subscription)
let nickname = getUserNicknameAndProfileUrl(accountId: kickOutId).nickname
if UserDefaults.int(forKey: .userId) == liveRoomInfo?.creatorId {
repository.kickOut(roomId: AppState.shared.roomId, userId: kickOutId)
.sink { result in
switch result {
case .finished:
DEBUG_LOG("finish")
case .failure(let error):
ERROR_LOG(error.localizedDescription)
}
} receiveValue: { _ in
}
.store(in: &subscription)
let nickname = getUserNicknameAndProfileUrl(accountId: kickOutId).nickname
agora.sendMessageToPeer(peerId: String(kickOutId), rawMessage: LiveRoomRequestType.KICK_OUT.rawValue.data(using: .utf8)!, completion: { [unowned self] errorCode in
if errorCode == .ok {
self.popupContent = "\(nickname)님을 내보냈습니다."
@ -1331,6 +1359,8 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
}
func userBlock(onSuccess: @escaping (Int) -> Void) {
blockedMemberIdList.insert(reportUserId)
isLoading = true
userRepository.memberBlock(userId: reportUserId)
.sink { result in
@ -1374,6 +1404,8 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
}
func userUnBlock() {
blockedMemberIdList.remove(reportUserId)
isLoading = true
userRepository.memberUnBlock(userId: reportUserId)
.sink { result in
@ -1972,11 +2004,12 @@ extension LiveRoomViewModel: AgoraRtmChannelDelegate {
} catch {
}
} else {
let memberId = Int(member.userId) ?? 0
let chat = message.text
let rank = getUserRank(userId: Int(member.userId) ?? 0)
let rank = getUserRank(userId: memberId)
if !chat.trimmingCharacters(in: .whitespaces).isEmpty {
messages.append(LiveRoomNormalChat(userId: Int(member.userId)!, profileUrl: profileUrl, nickname: nickname, rank: rank, chat: chat))
if !chat.trimmingCharacters(in: .whitespaces).isEmpty && !blockedMemberIdList.contains(memberId) {
messages.append(LiveRoomNormalChat(userId: memberId, profileUrl: profileUrl, nickname: nickname, rank: rank, chat: chat))
}
}

View File

@ -358,6 +358,7 @@ struct LiveRoomViewV2: View {
viewModel.getMemberCan()
viewModel.initAgoraEngine()
viewModel.getRoomInfo()
viewModel.getBlockedMemberIdList()
NotificationCenter.default.addObserver(
forName: UIApplication.willTerminateNotification,
@ -520,7 +521,7 @@ struct LiveRoomViewV2: View {
)
Rectangle()
.foregroundColor(Color(hex: "222222"))
.foregroundColor(Color.gray22)
.frame(width: screenSize().width, height: 15.3)
}
.ignoresSafeArea()

View File

@ -22,6 +22,7 @@ enum UserApi {
case updatePushToken(request: PushTokenUpdateRequest)
case creatorFollow(request: CreatorFollowRequest)
case creatorUnFollow(request: CreatorFollowRequest)
case getBlockedMemberIdList
case getBlockedMemberList(page: Int, size: Int)
case memberBlock(request: MemberBlockRequest)
case memberUnBlock(request: MemberBlockRequest)
@ -80,6 +81,9 @@ extension UserApi: TargetType {
case .creatorUnFollow:
return "/member/creator/unfollow"
case .getBlockedMemberIdList:
return "/member/block/id"
case .getBlockedMemberList, .memberBlock:
return "/member/block"
@ -112,7 +116,7 @@ extension UserApi: TargetType {
.profileImageUpdate:
return .post
case .searchUser, .getMypage, .getMemberInfo, .getMyProfile, .getChangeNicknamePrice, .checkNickname, .getBlockedMemberList:
case .searchUser, .getMypage, .getMemberInfo, .getMyProfile, .getChangeNicknamePrice, .checkNickname, .getBlockedMemberList, .getBlockedMemberIdList:
return .get
case .updatePushToken, .profileUpdate, .changeNickname, .updateIdfa:
@ -137,7 +141,7 @@ extension UserApi: TargetType {
case .getMypage, .getMyProfile, .getMemberInfo:
return .requestParameters(parameters: ["container" : "ios"], encoding: URLEncoding.queryString)
case .logout, .logoutAllDevice, .getChangeNicknamePrice:
case .logout, .logoutAllDevice, .getChangeNicknamePrice, .getBlockedMemberIdList:
return .requestPlain
case .notification(let request):

View File

@ -77,6 +77,10 @@ final class UserRepository {
return api.requestPublisher(.creatorUnFollow(request: CreatorFollowRequest(creatorId: creatorId)))
}
func getBlockedMemberIdList() -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getBlockedMemberIdList)
}
func getBlockedMemberList(page: Int, size: Int) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getBlockedMemberList(page: page, size: size))
}