From 06b8df5f82d6bc9e406e337cd530df3f1a195c1a Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Fri, 15 Mar 2024 21:51:27 +0800 Subject: [PATCH] request optimize --- .../main/java/com/lizongying/mytv/Request.kt | 177 ++++++++++-------- .../com/lizongying/mytv/models/TVViewModel.kt | 7 +- app/src/main/res/raw/channels.json | 2 +- 3 files changed, 107 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index f6c181c9..89198eb1 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -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? = null + private var call: Call? = null private var callAuth: Call? = null + private var callInfo: Call? = null + private var fAuth: Call? = null + private var callPage: Call? = null - private fun fetchAuth(tvModel: TVViewModel, cookie: String) { + private fun cancelCall() { + call?.cancel() callAuth?.cancel() + callInfo?.cancel() + fAuth?.cancel() + callPage?.cancel() + } + + private fun fetchAuth(tvModel: TVViewModel, cookie: String) { + 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,37 +298,23 @@ object Request { }) } - fun fetchAuth(tvModel: TVViewModel) { + private fun fetchAuth(tvModel: TVViewModel) { + cancelCall() if (token == "") { - yspTokenService.getInfo("") - .enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful) { - token = response.body()?.data?.token!! - Log.i(TAG, "info success $token") - val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109;yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" - fetchAuth(tvModel, cookie) - } else { - Log.e(TAG, "info status error") - if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { - tvModel.tokenRetryTimes++ - fetchAuth(tvModel) - } else { - if (!tvModel.getTV().mustToken) { - val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" - fetchAuth(tvModel, cookie) - } - } - } - } - - override fun onFailure(call: Call, t: Throwable) { - Log.e(TAG, "info request error $t") + callInfo = yspTokenService.getInfo("") + callInfo?.enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + token = response.body()?.data?.token!! + Log.i(TAG, "info success $token") + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109;yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + fetchAuth(tvModel, cookie) + } else { + Log.e(TAG, "info status error") if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { tvModel.tokenRetryTimes++ - fetchVideo(tvModel) + fetchAuth(tvModel) } else { if (!tvModel.getTV().mustToken) { val cookie = @@ -322,7 +323,22 @@ object Request { } } } - }) + } + + override fun onFailure(call: Call, t: Throwable) { + Log.e(TAG, "info request error $t") + if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { + tvModel.tokenRetryTimes++ + fetchVideo(tvModel) + } else { + if (!tvModel.getTV().mustToken) { + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" + fetchAuth(tvModel, cookie) + } + } + } + }) } else { val cookie = "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109;yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" @@ -330,35 +346,21 @@ object Request { } } - fun fetchVideo(tvModel: TVViewModel) { + private fun fetchVideo(tvModel: TVViewModel) { + cancelCall() Log.d(TAG, "fetchVideo") if (token == "") { - yspTokenService.getInfo("") - .enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful && response.body()?.data?.token != null) { - token = response.body()?.data?.token!! - Log.i(TAG, "info success $token") - val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" - fetchVideo(tvModel, cookie) - } else { - Log.e(TAG, "info status error") - if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { - tvModel.tokenRetryTimes++ - fetchVideo(tvModel) - } else { - if (!tvModel.getTV().mustToken) { - val cookie = - "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" - fetchVideo(tvModel, cookie) - } - } - } - } - - override fun onFailure(call: Call, t: Throwable) { - Log.e(TAG, "info request error $t") + callInfo = yspTokenService.getInfo("") + callInfo?.enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful && response.body()?.data?.token != null) { + token = response.body()?.data?.token!! + Log.i(TAG, "info success $token") + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + fetchVideo(tvModel, cookie) + } else { + Log.e(TAG, "info status error") if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { tvModel.tokenRetryTimes++ fetchVideo(tvModel) @@ -370,7 +372,22 @@ object Request { } } } - }) + } + + override fun onFailure(call: Call, t: Throwable) { + Log.e(TAG, "info request error $t") + if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { + tvModel.tokenRetryTimes++ + fetchVideo(tvModel) + } else { + if (!tvModel.getTV().mustToken) { + val cookie = + "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109" + fetchVideo(tvModel, cookie) + } + } + } + }) } else { val cookie = "versionName=99.99.99; versionCode=999999; vplatform=109; platformVersion=Chrome; deviceModel=120; appid=1400421205; yspappid=519748109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" @@ -378,11 +395,8 @@ object Request { } } - private var fAuth: Call? = 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, 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,14 +501,20 @@ 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() + } } - listener?.onRequestFinished() } override fun onFailure(call: Call, t: Throwable) { @@ -503,7 +523,13 @@ object Request { tokenRunnable, 30 * 60 * 1000 ) - listener?.onRequestFinished() + + if (initRetryTimes < initRetryMaxTimes) { + initRetryTimes++ + fetchInfoV2() + } else { + listener?.onRequestFinished() + } } }) } @@ -599,7 +625,8 @@ object Request { } fun fetchPage() { - yspProtoService.getPage().enqueue(object : Callback { + callPage = yspProtoService.getPage() + callPage?.enqueue(object : Callback { override fun onResponse( call: Call, response: Response diff --git a/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt b/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt index 00c86486..cb8eb204 100644 --- a/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt +++ b/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt @@ -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() val errInfo: LiveData diff --git a/app/src/main/res/raw/channels.json b/app/src/main/res/raw/channels.json index a19fc49a..7b9f469a 100644 --- a/app/src/main/res/raw/channels.json +++ b/app/src/main/res/raw/channels.json @@ -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" ]