From 9dfd73b09087adbd85d8eb10bad98a27461ac513 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 4 Sep 2024 22:29:55 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=B0=A9=20-=20?= =?UTF-8?q?=EC=B0=A8=EB=8B=A8=ED=95=9C=20=EC=9C=A0=EC=A0=80=EC=9D=98=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=EC=9D=B4=20=EB=B3=B4=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/live/room/LiveRoomActivity.kt | 30 +++++++------ .../sodalive/live/room/LiveRoomViewModel.kt | 42 +++++++++++++++++-- .../kr/co/vividnext/sodalive/user/UserApi.kt | 5 +++ .../vividnext/sodalive/user/UserRepository.kt | 2 + 4 files changed, 64 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt index 1bf62a3..cf042dc 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt @@ -249,6 +249,7 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB viewModel.getMemberCan() viewModel.getRoomInfo(roomId) + viewModel.getBlockedMemberIdList() binding.etChat.setOnFocusChangeListener { view, hasFocus -> if (isNoChatting && hasFocus) { @@ -522,6 +523,7 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB when (it.itemId) { R.id.menu_user_block -> { viewModel.memberUnBlock(userId) + viewModel.removeBlockedMember(memberId = userId) } R.id.menu_user_report -> { @@ -573,6 +575,7 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB dialog.setPositiveButton("차단") { _, _ -> roomUserProfileDialog.dismiss() viewModel.memberBlock(userId) { + viewModel.addBlockedMember(memberId = userId) if (viewModel.roomInfoResponse.creatorId == SharedPreferenceManager.userId) { kickOut(userId) } @@ -1529,20 +1532,23 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB else -> {} } } else { - val chat = message.text + val memberId = fromMember.userId.toLong() + if (viewModel.isNotBlockedMember(memberId)) { + val chat = message.text - if (chat.isNotBlank()) { - handler.post { - chatAdapter.items.add( - LiveRoomNormalChat( - userId = fromMember.userId.toLong(), - profileUrl = profileUrl, - nickname = nickname, - rank = rank, - chat = chat + if (chat.isNotBlank()) { + handler.post { + chatAdapter.items.add( + LiveRoomNormalChat( + userId = memberId, + profileUrl = profileUrl, + nickname = nickname, + rank = rank, + chat = chat + ) ) - ) - invalidateChat() + invalidateChat() + } } } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt index 44b2c60..f847e81 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt @@ -90,6 +90,8 @@ class LiveRoomViewModel( lateinit var getRealPathFromURI: (Uri) -> String? + private val blockedMemberIdList: MutableList = mutableListOf() + fun getUserNickname(memberId: Int): String { for (manager in roomInfoResponse.managerList) { if (manager.id.toInt() == memberId) { @@ -236,6 +238,35 @@ class LiveRoomViewModel( return memberId == roomInfoResponse.creatorId.toInt() } + fun isNotBlockedMember(memberId: Long): Boolean { + return !blockedMemberIdList.contains(memberId) + } + + fun addBlockedMember(memberId: Long) { + blockedMemberIdList.add(memberId) + } + + fun removeBlockedMember(memberId: Long) { + blockedMemberIdList.remove(memberId) + } + + fun getBlockedMemberIdList() { + compositeDisposable.add( + userRepository.getBlockedMemberIdList(token = "Bearer ${SharedPreferenceManager.token}") + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + if (it.success && it.data != null) { + this.blockedMemberIdList.clear() + this.blockedMemberIdList.addAll(it.data) + } + }, + {} + ) + ) + } + fun getMemberCan() { compositeDisposable.add( userRepository.getMemberInfo(token = "Bearer ${SharedPreferenceManager.token}") @@ -247,8 +278,7 @@ class LiveRoomViewModel( SharedPreferenceManager.can = it.data.can } }, - { - } + {} ) ) } @@ -526,7 +556,13 @@ class LiveRoomViewModel( ) { _isLoading.postValue(true) compositeDisposable.add( - repository.donation(roomId, can, message, isSecret, "Bearer ${SharedPreferenceManager.token}") + repository.donation( + roomId, + can, + message, + isSecret, + "Bearer ${SharedPreferenceManager.token}" + ) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/UserApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/UserApi.kt index 30ff7ac..6b25024 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/UserApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/UserApi.kt @@ -152,4 +152,9 @@ interface UserApi { @Query("size") size: Int, @Header("Authorization") authHeader: String ): Single> + + @GET("/member/block/id") + fun getBlockedMemberIdList( + @Header("Authorization") authHeader: String + ): Single>> } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/user/UserRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/user/UserRepository.kt index e2c6898..a3fec9a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/user/UserRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/user/UserRepository.kt @@ -122,4 +122,6 @@ class UserRepository(private val userApi: UserApi) { size = size, authHeader = token ) + + fun getBlockedMemberIdList(token: String) = userApi.getBlockedMemberIdList(authHeader = token) }