request optimize

pull/731/head v1.7.0
Li ZongYing 2 years ago
parent 7057e4a8b4
commit d03de91c1e
  1. 75
      app/src/main/java/com/lizongying/mytv/Request.kt
  2. 14
      app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt

@ -72,14 +72,14 @@ object Request {
private var call: Call<LiveInfo>? = null private var call: Call<LiveInfo>? = null
private var callAuth: Call<Auth>? = null private var callAuth: Call<Auth>? = null
private var callInfo: Call<Info>? = null private var callInfo: Call<Info>? = null
private var fAuth: Call<FAuth>? = null private var callFAuth: Call<FAuth>? = null
private var callPage: Call<pageModel.Response>? = null private var callPage: Call<pageModel.Response>? = null
private fun cancelCall() { private fun cancelCall() {
call?.cancel() call?.cancel()
callAuth?.cancel() callAuth?.cancel()
callInfo?.cancel() callInfo?.cancel()
fAuth?.cancel() callFAuth?.cancel()
callPage?.cancel() callPage?.cancel()
} }
@ -91,7 +91,6 @@ object Request {
val data = YSP.getAuthData(tvModel) val data = YSP.getAuthData(tvModel)
val request = AuthRequest(data) val request = AuthRequest(data)
callAuth = request.let { yspApiService.getAuth("guid=${YSP.getGuid()}; $cookie", it) } callAuth = request.let { yspApiService.getAuth("guid=${YSP.getGuid()}; $cookie", it) }
callAuth?.enqueue(object : Callback<Auth> { callAuth?.enqueue(object : Callback<Auth> {
override fun onResponse(call: Call<Auth>, response: Response<Auth>) { override fun onResponse(call: Call<Auth>, response: Response<Auth>) {
if (response.isSuccessful) { if (response.isSuccessful) {
@ -106,12 +105,12 @@ object Request {
if (tvModel.retryTimes < tvModel.retryMaxTimes) { if (tvModel.retryTimes < tvModel.retryMaxTimes) {
tvModel.retryTimes++ tvModel.retryTimes++
if (tvModel.getTV().needToken) { if (tvModel.getTV().needToken) {
if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes == tvModel.tokenYSPRetryMaxTimes) {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
fetchAuth(tvModel, cookie) fetchAuth(tvModel, cookie)
} }
} else { } else {
token = "" tvModel.needGetToken = true
fetchAuth(tvModel) fetchAuth(tvModel)
} }
} else { } else {
@ -124,12 +123,12 @@ object Request {
if (tvModel.retryTimes < tvModel.retryMaxTimes) { if (tvModel.retryTimes < tvModel.retryMaxTimes) {
tvModel.retryTimes++ tvModel.retryTimes++
if (tvModel.getTV().needToken) { if (tvModel.getTV().needToken) {
if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes == tvModel.tokenYSPRetryMaxTimes) {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
fetchAuth(tvModel, cookie) fetchAuth(tvModel, cookie)
} }
} else { } else {
token = "" tvModel.needGetToken = true
fetchAuth(tvModel) fetchAuth(tvModel)
} }
} else { } else {
@ -144,12 +143,12 @@ object Request {
if (tvModel.retryTimes < tvModel.retryMaxTimes) { if (tvModel.retryTimes < tvModel.retryMaxTimes) {
tvModel.retryTimes++ tvModel.retryTimes++
if (tvModel.getTV().needToken) { if (tvModel.getTV().needToken) {
if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes == tvModel.tokenYSPRetryMaxTimes) {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
fetchAuth(tvModel, cookie) fetchAuth(tvModel, cookie)
} }
} else { } else {
token = "" tvModel.needGetToken = true
fetchAuth(tvModel) fetchAuth(tvModel)
} }
} else { } else {
@ -212,13 +211,13 @@ object Request {
if (tvModel.retryTimes < tvModel.retryMaxTimes) { if (tvModel.retryTimes < tvModel.retryMaxTimes) {
tvModel.retryTimes++ tvModel.retryTimes++
if (tvModel.getTV().needToken) { if (tvModel.getTV().needToken) {
if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes == tvModel.tokenYSPRetryMaxTimes) {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
fetchVideo(tvModel, cookie) fetchVideo(tvModel, cookie)
// fetchAuth(tvModel, cookie) // fetchAuth(tvModel, cookie)
} }
} else { } else {
token = "" tvModel.needGetToken = true
fetchVideo(tvModel) fetchVideo(tvModel)
// fetchAuth(tvModel) // fetchAuth(tvModel)
} }
@ -237,13 +236,13 @@ object Request {
if (tvModel.retryTimes < tvModel.retryMaxTimes) { if (tvModel.retryTimes < tvModel.retryMaxTimes) {
tvModel.retryTimes++ tvModel.retryTimes++
if (tvModel.getTV().needToken) { if (tvModel.getTV().needToken) {
if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes == tvModel.tokenYSPRetryMaxTimes) {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
fetchVideo(tvModel, cookie) fetchVideo(tvModel, cookie)
// fetchAuth(tvModel, cookie) // fetchAuth(tvModel, cookie)
} }
} else { } else {
token = "" tvModel.needGetToken = true
fetchVideo(tvModel) fetchVideo(tvModel)
// fetchAuth(tvModel) // fetchAuth(tvModel)
} }
@ -259,13 +258,13 @@ object Request {
if (tvModel.retryTimes < tvModel.retryMaxTimes) { if (tvModel.retryTimes < tvModel.retryMaxTimes) {
tvModel.retryTimes++ tvModel.retryTimes++
if (tvModel.getTV().needToken) { if (tvModel.getTV().needToken) {
if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes == tvModel.tokenYSPRetryMaxTimes) {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
fetchVideo(tvModel, cookie) fetchVideo(tvModel, cookie)
// fetchAuth(tvModel, cookie) // fetchAuth(tvModel, cookie)
} }
} else { } else {
token = "" tvModel.needGetToken = true
fetchVideo(tvModel) fetchVideo(tvModel)
// fetchAuth(tvModel) // fetchAuth(tvModel)
} }
@ -282,12 +281,12 @@ object Request {
if (tvModel.retryTimes < tvModel.retryMaxTimes) { if (tvModel.retryTimes < tvModel.retryMaxTimes) {
tvModel.retryTimes++ tvModel.retryTimes++
if (tvModel.getTV().needToken) { if (tvModel.getTV().needToken) {
if (tvModel.tokenRetryTimes == tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes == tvModel.tokenYSPRetryMaxTimes) {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
fetchVideo(tvModel, cookie) fetchVideo(tvModel, cookie)
} }
} else { } else {
token = "" tvModel.needGetToken = true
fetchVideo(tvModel) fetchVideo(tvModel)
} }
} else { } else {
@ -300,20 +299,28 @@ object Request {
private fun fetchAuth(tvModel: TVViewModel) { private fun fetchAuth(tvModel: TVViewModel) {
cancelCall() cancelCall()
if (token == "") { if (tvModel.needGetToken) {
callInfo = yspTokenService.getInfo("") callInfo = yspTokenService.getInfo("")
callInfo?.enqueue(object : Callback<Info> { callInfo?.enqueue(object : Callback<Info> {
override fun onResponse(call: Call<Info>, response: Response<Info>) { override fun onResponse(call: Call<Info>, response: Response<Info>) {
if (response.isSuccessful) { if (response.isSuccessful && response.body()?.data?.token != null) {
token = response.body()?.data?.token!! token = response.body()?.data?.token!!
Log.i(TAG, "info success $token") Log.i(TAG, "info success $token")
tvModel.needGetToken = false
tvModel.tokenYSPRetryTimes = 0
val cookie = 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" "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) fetchAuth(tvModel, cookie)
} else if (response.code() == 304) {
tvModel.needGetToken = false
tvModel.tokenYSPRetryTimes = 0
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 { } else {
Log.e(TAG, "info status error") Log.e(TAG, "info status error")
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes < tvModel.tokenYSPRetryMaxTimes) {
tvModel.tokenRetryTimes++ tvModel.tokenYSPRetryTimes++
fetchAuth(tvModel) fetchAuth(tvModel)
} else { } else {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
@ -327,8 +334,8 @@ object Request {
override fun onFailure(call: Call<Info>, t: Throwable) { override fun onFailure(call: Call<Info>, t: Throwable) {
Log.e(TAG, "info request error $t") Log.e(TAG, "info request error $t")
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes < tvModel.tokenYSPRetryMaxTimes) {
tvModel.tokenRetryTimes++ tvModel.tokenYSPRetryTimes++
fetchVideo(tvModel) fetchVideo(tvModel)
} else { } else {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
@ -349,20 +356,28 @@ object Request {
private fun fetchVideo(tvModel: TVViewModel) { private fun fetchVideo(tvModel: TVViewModel) {
cancelCall() cancelCall()
Log.d(TAG, "fetchVideo") Log.d(TAG, "fetchVideo")
if (token == "") { if (tvModel.needGetToken) {
callInfo = yspTokenService.getInfo("") callInfo = yspTokenService.getInfo("")
callInfo?.enqueue(object : Callback<Info> { callInfo?.enqueue(object : Callback<Info> {
override fun onResponse(call: Call<Info>, response: Response<Info>) { override fun onResponse(call: Call<Info>, response: Response<Info>) {
if (response.isSuccessful && response.body()?.data?.token != null) { if (response.isSuccessful && response.body()?.data?.token != null) {
token = response.body()?.data?.token!! token = response.body()?.data?.token!!
Log.i(TAG, "info success $token") Log.i(TAG, "info success $token")
tvModel.needGetToken = false
tvModel.tokenYSPRetryTimes = 0
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 if (response.code() == 304) {
tvModel.needGetToken = false
tvModel.tokenYSPRetryTimes = 0
val cookie = 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" "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) fetchVideo(tvModel, cookie)
} else { } else {
Log.e(TAG, "info status error") Log.e(TAG, "info status error")
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes < tvModel.tokenYSPRetryMaxTimes) {
tvModel.tokenRetryTimes++ tvModel.tokenYSPRetryTimes++
fetchVideo(tvModel) fetchVideo(tvModel)
} else { } else {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
@ -376,8 +391,8 @@ object Request {
override fun onFailure(call: Call<Info>, t: Throwable) { override fun onFailure(call: Call<Info>, t: Throwable) {
Log.e(TAG, "info request error $t") Log.e(TAG, "info request error $t")
if (tvModel.tokenRetryTimes < tvModel.tokenRetryMaxTimes) { if (tvModel.tokenYSPRetryTimes < tvModel.tokenYSPRetryMaxTimes) {
tvModel.tokenRetryTimes++ tvModel.tokenYSPRetryTimes++
fetchVideo(tvModel) fetchVideo(tvModel)
} else { } else {
if (!tvModel.getTV().mustToken) { if (!tvModel.getTV().mustToken) {
@ -405,8 +420,8 @@ object Request {
qa = "FHD" qa = "FHD"
} }
fAuth = fAuthService.getAuth(tokenFH, tvModel.getTV().pid, qa) callFAuth = fAuthService.getAuth(tokenFH, tvModel.getTV().pid, qa)
fAuth?.enqueue(object : Callback<FAuth> { callFAuth?.enqueue(object : Callback<FAuth> {
override fun onResponse(call: Call<FAuth>, response: Response<FAuth>) { override fun onResponse(call: Call<FAuth>, response: Response<FAuth>) {
if (response.isSuccessful && response.body()?.data?.live_url != null) { if (response.isSuccessful && response.body()?.data?.live_url != null) {
val url = response.body()?.data?.live_url!! val url = response.body()?.data?.live_url!!

@ -23,11 +23,13 @@ class TVViewModel(private var tv: TV) : ViewModel() {
var retryTimes = 0 var retryTimes = 0
var retryMaxTimes = 8 var retryMaxTimes = 8
var tokenRetryTimes = 0 var tokenYSPRetryTimes = 0
var tokenRetryMaxTimes = 0 var tokenYSPRetryMaxTimes = 0
var tokenFHRetryTimes = 0 var tokenFHRetryTimes = 0
var tokenFHRetryMaxTimes = 2 var tokenFHRetryMaxTimes = 2
var needGetToken = false
private val _errInfo = MutableLiveData<String>() private val _errInfo = MutableLiveData<String>()
val errInfo: LiveData<String> val errInfo: LiveData<String>
get() = _errInfo get() = _errInfo
@ -171,19 +173,13 @@ class TVViewModel(private var tv: TV) : ViewModel() {
_epg.value = p.map { EPG(it.title, formatFTime(it.event_time)) }.toMutableList() _epg.value = p.map { EPG(it.title, formatFTime(it.event_time)) }.toMutableList()
} }
private var mHeaders: Map<String, String>? = mapOf()
fun setHeaders(headers: Map<String, String>) {
mHeaders = headers
}
/** /**
* (playerView?.player as ExoPlayer).setMediaSource(tvViewModel.buildSource()) * (playerView?.player as ExoPlayer).setMediaSource(tvViewModel.buildSource())
*/ */
@OptIn(UnstableApi::class) @OptIn(UnstableApi::class)
fun buildSource(): HlsMediaSource { fun buildSource(): HlsMediaSource {
val httpDataSource = DefaultHttpDataSource.Factory() val httpDataSource = DefaultHttpDataSource.Factory()
mHeaders?.let { httpDataSource.setDefaultRequestProperties(it) } // mHeaders?.let { httpDataSource.setDefaultRequestProperties(it) }
return HlsMediaSource.Factory(httpDataSource).createMediaSource( return HlsMediaSource.Factory(httpDataSource).createMediaSource(
MediaItem.fromUri( MediaItem.fromUri(

Loading…
Cancel
Save