parent
108eb759ec
commit
02c815077e
|
@ -21,6 +21,7 @@ import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResp
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationTotalResponse
|
import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationTotalResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessage
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessage
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest
|
||||||
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse
|
import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest
|
import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest
|
||||||
import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse
|
import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse
|
||||||
|
@ -156,11 +157,11 @@ interface LiveApi {
|
||||||
@Header("Authorization") authHeader: String
|
@Header("Authorization") authHeader: String
|
||||||
): Single<ApiResponse<Any>>
|
): Single<ApiResponse<Any>>
|
||||||
|
|
||||||
@POST("/live/room/donation")
|
@POST("/live/room/donation/v2")
|
||||||
fun donation(
|
fun donation(
|
||||||
@Body request: LiveRoomDonationRequest,
|
@Body request: LiveRoomDonationRequest,
|
||||||
@Header("Authorization") authHeader: String
|
@Header("Authorization") authHeader: String
|
||||||
): Single<ApiResponse<String>>
|
): Single<ApiResponse<LiveRoomDonationResponse>>
|
||||||
|
|
||||||
@POST("/live/room/donation/refund/{id}")
|
@POST("/live/room/donation/refund/{id}")
|
||||||
fun refundDonation(
|
fun refundDonation(
|
||||||
|
|
|
@ -14,6 +14,7 @@ import kr.co.vividnext.sodalive.live.room.create.CreateLiveRoomResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.detail.GetRoomDetailResponse
|
import kr.co.vividnext.sodalive.live.room.detail.GetRoomDetailResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.DeleteLiveRoomDonationMessage
|
import kr.co.vividnext.sodalive.live.room.donation.DeleteLiveRoomDonationMessage
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRequest
|
||||||
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest
|
import kr.co.vividnext.sodalive.live.room.kick_out.LiveRoomKickOutRequest
|
||||||
import kr.co.vividnext.sodalive.live.room.menu.MenuApi
|
import kr.co.vividnext.sodalive.live.room.menu.MenuApi
|
||||||
import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest
|
import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest
|
||||||
|
@ -163,7 +164,7 @@ class LiveRepository(
|
||||||
can: Int,
|
can: Int,
|
||||||
message: String,
|
message: String,
|
||||||
token: String
|
token: String
|
||||||
): Single<ApiResponse<String>> {
|
): Single<ApiResponse<LiveRoomDonationResponse>> {
|
||||||
return api.donation(
|
return api.donation(
|
||||||
request = LiveRoomDonationRequest(
|
request = LiveRoomDonationRequest(
|
||||||
roomId = roomId,
|
roomId = roomId,
|
||||||
|
|
|
@ -68,6 +68,7 @@ import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationDialog
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessageDialog
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessageDialog
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessageViewModel
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationMessageViewModel
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRankingDialog
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationRankingDialog
|
||||||
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse
|
import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.profile.LiveRoomProfileDialog
|
import kr.co.vividnext.sodalive.live.room.profile.LiveRoomProfileDialog
|
||||||
import kr.co.vividnext.sodalive.live.room.profile.LiveRoomProfileListAdapter
|
import kr.co.vividnext.sodalive.live.room.profile.LiveRoomProfileListAdapter
|
||||||
|
@ -124,6 +125,16 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val signatureList = mutableListOf<LiveRoomDonationResponse>()
|
||||||
|
private var signature: LiveRoomDonationResponse? = null
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
|
||||||
|
if (field != null) {
|
||||||
|
showSignatureImage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var isShowSignatureImage = false
|
private var isShowSignatureImage = false
|
||||||
|
|
||||||
private val countDownTimer = object : CountDownTimer(remainingNoChattingTime * 1000, 1000) {
|
private val countDownTimer = object : CountDownTimer(remainingNoChattingTime * 1000, 1000) {
|
||||||
|
@ -1270,13 +1281,14 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
private fun donation(can: Int, message: String) {
|
private fun donation(can: Int, message: String) {
|
||||||
val rawMessage = "${can}캔을 후원하셨습니다.\uD83D\uDCB0\uD83E\uDE99"
|
val rawMessage = "${can}캔을 후원하셨습니다.\uD83D\uDCB0\uD83E\uDE99"
|
||||||
|
|
||||||
viewModel.donation(roomId, can, message) { signatureImage ->
|
viewModel.donation(roomId, can, message) { signature ->
|
||||||
val donationRawMessage = Gson().toJson(
|
val donationRawMessage = Gson().toJson(
|
||||||
LiveRoomChatRawMessage(
|
LiveRoomChatRawMessage(
|
||||||
type = LiveRoomChatRawMessageType.DONATION,
|
type = LiveRoomChatRawMessageType.DONATION,
|
||||||
message = rawMessage,
|
message = rawMessage,
|
||||||
can = can,
|
can = can,
|
||||||
signatureImageUrl = signatureImage,
|
signature = signature,
|
||||||
|
signatureImageUrl = signature?.imageUrl,
|
||||||
donationMessage = message
|
donationMessage = message
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -1300,7 +1312,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
)
|
)
|
||||||
invalidateChat()
|
invalidateChat()
|
||||||
viewModel.addDonationCan(can)
|
viewModel.addDonationCan(can)
|
||||||
addSignatureImage(signatureImage)
|
addSignature(signature)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onFailure = {
|
onFailure = {
|
||||||
|
@ -1407,9 +1419,12 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
)
|
)
|
||||||
invalidateChat()
|
invalidateChat()
|
||||||
viewModel.addDonationCan(rawMessage.can)
|
viewModel.addDonationCan(rawMessage.can)
|
||||||
addSignatureImage(
|
|
||||||
imageUrl = rawMessage.signatureImageUrl ?: ""
|
if (rawMessage.signature != null) {
|
||||||
)
|
addSignature(rawMessage.signature)
|
||||||
|
} else if (rawMessage.signatureImageUrl != null) {
|
||||||
|
addSignatureImage(rawMessage.signatureImageUrl)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1762,8 +1777,37 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun addSignature(signature: LiveRoomDonationResponse?) {
|
||||||
|
if (signature != null) {
|
||||||
|
if (!isShowSignatureImage) {
|
||||||
|
this.signature = signature
|
||||||
|
isShowSignatureImage = true
|
||||||
|
} else {
|
||||||
|
signatureList.add(signature)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun showSignatureImage() {
|
private fun showSignatureImage() {
|
||||||
if (signatureImageUrl.isNotBlank()) {
|
if (signature != null) {
|
||||||
|
Glide
|
||||||
|
.with(this)
|
||||||
|
.load(signature!!.imageUrl)
|
||||||
|
.into(binding.ivSignature)
|
||||||
|
|
||||||
|
binding.ivSignature.visibility = View.VISIBLE
|
||||||
|
|
||||||
|
handler.postDelayed({
|
||||||
|
if (signatureList.isNotEmpty()) {
|
||||||
|
signature = signatureList.removeAt(0)
|
||||||
|
} else {
|
||||||
|
signature = null
|
||||||
|
isShowSignatureImage = false
|
||||||
|
binding.ivSignature.setImageDrawable(null)
|
||||||
|
binding.ivSignature.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}, signature!!.time * 1000L)
|
||||||
|
} else if (signatureImageUrl.isNotBlank()) {
|
||||||
Glide
|
Glide
|
||||||
.with(this)
|
.with(this)
|
||||||
.load(signatureImageUrl)
|
.load(signatureImageUrl)
|
||||||
|
|
|
@ -17,6 +17,7 @@ import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||||
import kr.co.vividnext.sodalive.live.LiveRepository
|
import kr.co.vividnext.sodalive.live.LiveRepository
|
||||||
import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResponse
|
import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResponse
|
||||||
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse
|
import kr.co.vividnext.sodalive.live.room.info.GetRoomInfoResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.menu.GetMenuPresetResponse
|
import kr.co.vividnext.sodalive.live.room.menu.GetMenuPresetResponse
|
||||||
import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse
|
import kr.co.vividnext.sodalive.live.room.profile.GetLiveRoomUserProfileResponse
|
||||||
|
@ -508,7 +509,7 @@ class LiveRoomViewModel(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun donation(roomId: Long, can: Int, message: String, onSuccess: (String) -> Unit) {
|
fun donation(roomId: Long, can: Int, message: String, onSuccess: (LiveRoomDonationResponse?) -> Unit) {
|
||||||
_isLoading.postValue(true)
|
_isLoading.postValue(true)
|
||||||
compositeDisposable.add(
|
compositeDisposable.add(
|
||||||
repository.donation(roomId, can, message, "Bearer ${SharedPreferenceManager.token}")
|
repository.donation(roomId, can, message, "Bearer ${SharedPreferenceManager.token}")
|
||||||
|
@ -519,7 +520,7 @@ class LiveRoomViewModel(
|
||||||
_isLoading.value = false
|
_isLoading.value = false
|
||||||
if (it.success) {
|
if (it.success) {
|
||||||
SharedPreferenceManager.can -= can
|
SharedPreferenceManager.can -= can
|
||||||
onSuccess(it.data ?: "")
|
onSuccess(it.data)
|
||||||
} else {
|
} else {
|
||||||
if (it.message != null) {
|
if (it.message != null) {
|
||||||
_toastLiveData.postValue(it.message)
|
_toastLiveData.postValue(it.message)
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package kr.co.vividnext.sodalive.live.room.chat
|
package kr.co.vividnext.sodalive.live.room.chat
|
||||||
|
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
|
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse
|
||||||
|
|
||||||
data class LiveRoomChatRawMessage(
|
data class LiveRoomChatRawMessage(
|
||||||
@SerializedName("type") val type: LiveRoomChatRawMessageType,
|
@SerializedName("type") val type: LiveRoomChatRawMessageType,
|
||||||
@SerializedName("message") val message: String,
|
@SerializedName("message") val message: String,
|
||||||
@SerializedName("can") val can: Int,
|
@SerializedName("can") val can: Int,
|
||||||
|
@SerializedName("signature") val signature: LiveRoomDonationResponse? = null,
|
||||||
@SerializedName("signatureImageUrl") val signatureImageUrl: String? = null,
|
@SerializedName("signatureImageUrl") val signatureImageUrl: String? = null,
|
||||||
@SerializedName("donationMessage") val donationMessage: String?,
|
@SerializedName("donationMessage") val donationMessage: String?,
|
||||||
@SerializedName("isActiveRoulette") val isActiveRoulette: Boolean? = null
|
@SerializedName("isActiveRoulette") val isActiveRoulette: Boolean? = null
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package kr.co.vividnext.sodalive.live.room.donation
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName
|
||||||
|
|
||||||
|
data class LiveRoomDonationResponse(
|
||||||
|
@SerializedName("imageUrl") val imageUrl: String,
|
||||||
|
@SerializedName("time") val time: Int
|
||||||
|
)
|
Loading…
Reference in New Issue