request optimize

This commit is contained in:
Li ZongYing 2024-03-15 21:51:27 +08:00
parent 7bed18ee6d
commit 06b8df5f82
3 changed files with 107 additions and 79 deletions

View File

@ -56,6 +56,9 @@ object Request {
private var listener: RequestListener? = null
private var initRetryTimes = 0
private var initRetryMaxTimes = 1
fun onCreate() {
Log.i(TAG, "onCreate")
fetchInfoV2()
@ -66,11 +69,22 @@ object Request {
handler.removeCallbacks(tokenRunnable)
}
var call: Call<LiveInfo>? = null
private var call: Call<LiveInfo>? = null
private var callAuth: Call<Auth>? = null
private var callInfo: Call<Info>? = null
private var fAuth: Call<FAuth>? = null
private var callPage: Call<pageModel.Response>? = null
private fun cancelCall() {
call?.cancel()
callAuth?.cancel()
callInfo?.cancel()
fAuth?.cancel()
callPage?.cancel()
}
private fun fetchAuth(tvModel: TVViewModel, cookie: String) {
callAuth?.cancel()
cancelCall()
val title = tvModel.title.value
@ -146,8 +160,9 @@ object Request {
})
}
fun fetchVideo(tvModel: TVViewModel, cookie: String) {
call?.cancel()
private fun fetchVideo(tvModel: TVViewModel, cookie: String) {
cancelCall()
if (::btraceRunnable.isInitialized) {
handler.removeCallbacks(btraceRunnable)
}
@ -283,10 +298,11 @@ object Request {
})
}
fun fetchAuth(tvModel: TVViewModel) {
private fun fetchAuth(tvModel: TVViewModel) {
cancelCall()
if (token == "") {
yspTokenService.getInfo("")
.enqueue(object : Callback<Info> {
callInfo = yspTokenService.getInfo("")
callInfo?.enqueue(object : Callback<Info> {
override fun onResponse(call: Call<Info>, response: Response<Info>) {
if (response.isSuccessful) {
token = response.body()?.data?.token!!
@ -330,11 +346,12 @@ object Request {
}
}
fun fetchVideo(tvModel: TVViewModel) {
private fun fetchVideo(tvModel: TVViewModel) {
cancelCall()
Log.d(TAG, "fetchVideo")
if (token == "") {
yspTokenService.getInfo("")
.enqueue(object : Callback<Info> {
callInfo = yspTokenService.getInfo("")
callInfo?.enqueue(object : Callback<Info> {
override fun onResponse(call: Call<Info>, response: Response<Info>) {
if (response.isSuccessful && response.body()?.data?.token != null) {
token = response.body()?.data?.token!!
@ -378,11 +395,8 @@ object Request {
}
}
private var fAuth: Call<FAuth>? = null
fun fetchFAuth(tvModel: TVViewModel) {
call?.cancel()
callAuth?.cancel()
fAuth?.cancel()
private fun fetchFAuth(tvModel: TVViewModel) {
cancelCall()
val title = tvModel.title.value
@ -399,11 +413,11 @@ object Request {
// Log.d(TAG, "$title url $url")
tvModel.addVideoUrl(url)
tvModel.allReady()
tvModel.tokenRetryTimes = 0
tvModel.tokenFHRetryTimes = 0
} else {
Log.e(TAG, "auth status error ${response.code()}")
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) {
tvModel.tokenRetryTimes++
if (tvModel.tokenFHRetryTimes < tvModel.tokenFHRetryMaxTimes) {
tvModel.tokenFHRetryTimes++
fetchFAuth(tvModel)
}
}
@ -411,8 +425,8 @@ object Request {
override fun onFailure(call: Call<FAuth>, t: Throwable) {
Log.e(TAG, "auth request error $t")
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) {
tvModel.tokenRetryTimes++
if (tvModel.tokenFHRetryTimes < tvModel.tokenFHRetryMaxTimes) {
tvModel.tokenFHRetryTimes++
fetchFAuth(tvModel)
}
}
@ -444,7 +458,7 @@ object Request {
class TokenRunnable : Runnable {
override fun run() {
fetchToken()
// fetchToken()
}
}
@ -487,15 +501,21 @@ object Request {
Utils.setBetween(c * 1000L)
Log.i(TAG, "current time $c")
}
listener?.onRequestFinished()
} else {
Log.e(TAG, "token status error")
handler.postDelayed(
tokenRunnable,
30 * 60 * 1000
)
}
if (initRetryTimes < initRetryMaxTimes) {
initRetryTimes++
fetchInfoV2()
} else {
listener?.onRequestFinished()
}
}
}
override fun onFailure(call: Call<InfoV2>, t: Throwable) {
Log.e(TAG, "token request error $t")
@ -503,8 +523,14 @@ object Request {
tokenRunnable,
30 * 60 * 1000
)
if (initRetryTimes < initRetryMaxTimes) {
initRetryTimes++
fetchInfoV2()
} else {
listener?.onRequestFinished()
}
}
})
}
@ -599,7 +625,8 @@ object Request {
}
fun fetchPage() {
yspProtoService.getPage().enqueue(object : Callback<pageModel.Response> {
callPage = yspProtoService.getPage()
callPage?.enqueue(object : Callback<pageModel.Response> {
override fun onResponse(
call: Call<pageModel.Response>,
response: Response<pageModel.Response>

View File

@ -22,10 +22,11 @@ class TVViewModel(private var tv: TV) : ViewModel() {
private var itemPosition: Int = 0
var retryTimes = 0
var tokenRetryTimes = 0
var retryMaxTimes = 8
var tokenRetryMaxTimes = 2
var programUpdateTime: Long = 0
var tokenRetryTimes = 0
var tokenRetryMaxTimes = 0
var tokenFHRetryTimes = 0
var tokenFHRetryMaxTimes = 2
private val _errInfo = MutableLiveData<String>()
val errInfo: LiveData<String>

View File

@ -130,7 +130,7 @@
"programId": "600004078",
"needToken": true,
"mustToken": false,
"title": "CCTV9 录",
"title": "CCTV9 录",
"videoUrl": [
"http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226197/index.m3u8"
]