라이브 방
- 차단한 유저의 채팅이 보이지 않도록 수정
This commit is contained in:
		| @@ -189,6 +189,34 @@ final class LiveRoomViewModel: NSObject, ObservableObject { | |||||||
|      |      | ||||||
|     var timer: DispatchSourceTimer? |     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) { |     func setOriginOffset(_ offset: CGFloat) { | ||||||
|         guard !isCheckedOriginOffset else { return } |         guard !isCheckedOriginOffset else { return } | ||||||
|         self.originOffset = offset |         self.originOffset = offset | ||||||
| @@ -898,21 +926,21 @@ final class LiveRoomViewModel: NSObject, ObservableObject { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     func kickOut() { |     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 { |         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 |             agora.sendMessageToPeer(peerId: String(kickOutId), rawMessage: LiveRoomRequestType.KICK_OUT.rawValue.data(using: .utf8)!, completion: { [unowned self] errorCode in | ||||||
|                 if errorCode == .ok { |                 if errorCode == .ok { | ||||||
|                     self.popupContent = "\(nickname)님을 내보냈습니다." |                     self.popupContent = "\(nickname)님을 내보냈습니다." | ||||||
| @@ -1331,6 +1359,8 @@ final class LiveRoomViewModel: NSObject, ObservableObject { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     func userBlock(onSuccess: @escaping (Int) -> Void) { |     func userBlock(onSuccess: @escaping (Int) -> Void) { | ||||||
|  |         blockedMemberIdList.insert(reportUserId) | ||||||
|  |          | ||||||
|         isLoading = true |         isLoading = true | ||||||
|         userRepository.memberBlock(userId: reportUserId) |         userRepository.memberBlock(userId: reportUserId) | ||||||
|             .sink { result in |             .sink { result in | ||||||
| @@ -1374,6 +1404,8 @@ final class LiveRoomViewModel: NSObject, ObservableObject { | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     func userUnBlock() { |     func userUnBlock() { | ||||||
|  |         blockedMemberIdList.remove(reportUserId) | ||||||
|  |          | ||||||
|         isLoading = true |         isLoading = true | ||||||
|         userRepository.memberUnBlock(userId: reportUserId) |         userRepository.memberUnBlock(userId: reportUserId) | ||||||
|             .sink { result in |             .sink { result in | ||||||
| @@ -1972,11 +2004,12 @@ extension LiveRoomViewModel: AgoraRtmChannelDelegate { | |||||||
|             } catch { |             } catch { | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|  |             let memberId = Int(member.userId) ?? 0 | ||||||
|             let chat = message.text |             let chat = message.text | ||||||
|             let rank = getUserRank(userId: Int(member.userId) ?? 0) |             let rank = getUserRank(userId: memberId) | ||||||
|              |              | ||||||
|             if !chat.trimmingCharacters(in: .whitespaces).isEmpty { |             if !chat.trimmingCharacters(in: .whitespaces).isEmpty && !blockedMemberIdList.contains(memberId) { | ||||||
|                 messages.append(LiveRoomNormalChat(userId: Int(member.userId)!, profileUrl: profileUrl, nickname: nickname, rank: rank, chat: chat)) |                 messages.append(LiveRoomNormalChat(userId: memberId, profileUrl: profileUrl, nickname: nickname, rank: rank, chat: chat)) | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|          |          | ||||||
|   | |||||||
| @@ -358,6 +358,7 @@ struct LiveRoomViewV2: View { | |||||||
|                 viewModel.getMemberCan() |                 viewModel.getMemberCan() | ||||||
|                 viewModel.initAgoraEngine() |                 viewModel.initAgoraEngine() | ||||||
|                 viewModel.getRoomInfo() |                 viewModel.getRoomInfo() | ||||||
|  |                 viewModel.getBlockedMemberIdList() | ||||||
|                  |                  | ||||||
|                 NotificationCenter.default.addObserver( |                 NotificationCenter.default.addObserver( | ||||||
|                     forName: UIApplication.willTerminateNotification, |                     forName: UIApplication.willTerminateNotification, | ||||||
| @@ -520,7 +521,7 @@ struct LiveRoomViewV2: View { | |||||||
|                         ) |                         ) | ||||||
|                          |                          | ||||||
|                         Rectangle() |                         Rectangle() | ||||||
|                             .foregroundColor(Color(hex: "222222")) |                             .foregroundColor(Color.gray22) | ||||||
|                             .frame(width: screenSize().width, height: 15.3) |                             .frame(width: screenSize().width, height: 15.3) | ||||||
|                     } |                     } | ||||||
|                     .ignoresSafeArea() |                     .ignoresSafeArea() | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ enum UserApi { | |||||||
|     case updatePushToken(request: PushTokenUpdateRequest) |     case updatePushToken(request: PushTokenUpdateRequest) | ||||||
|     case creatorFollow(request: CreatorFollowRequest) |     case creatorFollow(request: CreatorFollowRequest) | ||||||
|     case creatorUnFollow(request: CreatorFollowRequest) |     case creatorUnFollow(request: CreatorFollowRequest) | ||||||
|  |     case getBlockedMemberIdList | ||||||
|     case getBlockedMemberList(page: Int, size: Int) |     case getBlockedMemberList(page: Int, size: Int) | ||||||
|     case memberBlock(request: MemberBlockRequest) |     case memberBlock(request: MemberBlockRequest) | ||||||
|     case memberUnBlock(request: MemberBlockRequest) |     case memberUnBlock(request: MemberBlockRequest) | ||||||
| @@ -79,7 +80,10 @@ extension UserApi: TargetType { | |||||||
|              |              | ||||||
|         case .creatorUnFollow: |         case .creatorUnFollow: | ||||||
|             return "/member/creator/unfollow" |             return "/member/creator/unfollow" | ||||||
|              |          | ||||||
|  |         case .getBlockedMemberIdList: | ||||||
|  |             return "/member/block/id" | ||||||
|  |          | ||||||
|         case .getBlockedMemberList, .memberBlock: |         case .getBlockedMemberList, .memberBlock: | ||||||
|             return "/member/block" |             return "/member/block" | ||||||
|              |              | ||||||
| @@ -112,7 +116,7 @@ extension UserApi: TargetType { | |||||||
|                 .profileImageUpdate: |                 .profileImageUpdate: | ||||||
|             return .post |             return .post | ||||||
|              |              | ||||||
|         case .searchUser, .getMypage, .getMemberInfo, .getMyProfile, .getChangeNicknamePrice, .checkNickname, .getBlockedMemberList: |         case .searchUser, .getMypage, .getMemberInfo, .getMyProfile, .getChangeNicknamePrice, .checkNickname, .getBlockedMemberList, .getBlockedMemberIdList: | ||||||
|             return .get |             return .get | ||||||
|              |              | ||||||
|         case .updatePushToken, .profileUpdate, .changeNickname, .updateIdfa: |         case .updatePushToken, .profileUpdate, .changeNickname, .updateIdfa: | ||||||
| @@ -137,7 +141,7 @@ extension UserApi: TargetType { | |||||||
|         case .getMypage, .getMyProfile, .getMemberInfo: |         case .getMypage, .getMyProfile, .getMemberInfo: | ||||||
|             return .requestParameters(parameters: ["container" : "ios"], encoding: URLEncoding.queryString) |             return .requestParameters(parameters: ["container" : "ios"], encoding: URLEncoding.queryString) | ||||||
|              |              | ||||||
|         case .logout, .logoutAllDevice, .getChangeNicknamePrice: |         case .logout, .logoutAllDevice, .getChangeNicknamePrice, .getBlockedMemberIdList: | ||||||
|             return .requestPlain |             return .requestPlain | ||||||
|              |              | ||||||
|         case .notification(let request): |         case .notification(let request): | ||||||
|   | |||||||
| @@ -77,6 +77,10 @@ final class UserRepository { | |||||||
|         return api.requestPublisher(.creatorUnFollow(request: CreatorFollowRequest(creatorId: creatorId))) |         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> { |     func getBlockedMemberList(page: Int, size: Int) -> AnyPublisher<Response, MoyaError> { | ||||||
|         return api.requestPublisher(.getBlockedMemberList(page: page, size: size)) |         return api.requestPublisher(.getBlockedMemberList(page: page, size: size)) | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Yu Sung
					Yu Sung