라이브 방
- 차단한 유저의 채팅이 보이지 않도록 수정
This commit is contained in:
		| @@ -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)) | ||||
|             } | ||||
|         } | ||||
|          | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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): | ||||
|   | ||||
| @@ -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)) | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Yu Sung
					Yu Sung