feat: 라이브 30분 연속 청취시 트래킹 API 호출 기능 추가
This commit is contained in:
@@ -58,6 +58,9 @@ import io.agora.rtm.RtmChannelMember
|
||||
import io.agora.rtm.RtmClientListener
|
||||
import io.agora.rtm.RtmMessage
|
||||
import io.agora.rtm.RtmMessageType
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kotlinx.coroutines.launch
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.agora.Agora
|
||||
@@ -100,6 +103,7 @@ import kr.co.vividnext.sodalive.report.ReportType
|
||||
import kr.co.vividnext.sodalive.report.UserReportDialog
|
||||
import kr.co.vividnext.sodalive.settings.notification.MemberRole
|
||||
import org.koin.android.ext.android.inject
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.regex.Pattern
|
||||
import kotlin.random.Random
|
||||
|
||||
@@ -1888,6 +1892,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
startNoChatting()
|
||||
}
|
||||
setHeartButtonPosition()
|
||||
startPeriodicPlaybackValidation()
|
||||
},
|
||||
rtmChannelJoinFail = {
|
||||
agoraConnectFail()
|
||||
@@ -2303,6 +2308,24 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
}
|
||||
}
|
||||
|
||||
private fun startPeriodicPlaybackValidation() {
|
||||
compositeDisposable.add(
|
||||
Observable.interval(0, 30, TimeUnit.MINUTES)
|
||||
.flatMapSingle {
|
||||
viewModel.trackLiveContinuousListen30()
|
||||
.subscribeOn(Schedulers.io())
|
||||
}
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{ response ->
|
||||
Logger.e("성공: $response")
|
||||
}, { error ->
|
||||
Logger.e("실패: ${error.message}")
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val NO_CHATTING_TIME = 180L
|
||||
}
|
||||
|
||||
@@ -6,10 +6,12 @@ import androidx.lifecycle.MutableLiveData
|
||||
import com.google.gson.Gson
|
||||
import com.orhanobut.logger.Logger
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.Utils
|
||||
import kr.co.vividnext.sodalive.live.LiveRepository
|
||||
@@ -28,6 +30,8 @@ import kr.co.vividnext.sodalive.live.roulette.SpinRouletteRequest
|
||||
import kr.co.vividnext.sodalive.report.ReportRepository
|
||||
import kr.co.vividnext.sodalive.report.ReportRequest
|
||||
import kr.co.vividnext.sodalive.report.ReportType
|
||||
import kr.co.vividnext.sodalive.tracking.UserEventRepository
|
||||
import kr.co.vividnext.sodalive.tracking.UserEventType
|
||||
import kr.co.vividnext.sodalive.user.UserRepository
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.MultipartBody
|
||||
@@ -40,7 +44,8 @@ class LiveRoomViewModel(
|
||||
private val repository: LiveRepository,
|
||||
private val userRepository: UserRepository,
|
||||
private val reportRepository: ReportRepository,
|
||||
private val rouletteRepository: RouletteRepository
|
||||
private val rouletteRepository: RouletteRepository,
|
||||
private val userEventRepository: UserEventRepository
|
||||
) : BaseViewModel() {
|
||||
private val _roomInfoLiveData = MutableLiveData<GetRoomInfoResponse>()
|
||||
val roomInfoLiveData: LiveData<GetRoomInfoResponse>
|
||||
@@ -1124,6 +1129,13 @@ class LiveRoomViewModel(
|
||||
)
|
||||
}
|
||||
|
||||
fun trackLiveContinuousListen30(): Single<ApiResponse<Any>> {
|
||||
return userEventRepository.trackEvent(
|
||||
eventType = UserEventType.LIVE_CONTINUOUS_LISTEN_30,
|
||||
token = "Bearer ${SharedPreferenceManager.token}"
|
||||
)
|
||||
}
|
||||
|
||||
private fun calculatePercentages(options: List<RouletteItem>): List<RoulettePreviewItem> {
|
||||
val updatedOptions = options.map { option ->
|
||||
RoulettePreviewItem(
|
||||
|
||||
Reference in New Issue
Block a user