From f0f43e0fda5b9eb4fe4ba91ebee90df14332b719 Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Wed, 10 Jan 2024 22:11:13 +0800 Subject: [PATCH] dns cache --- .../main/java/com/lizongying/mytv/Request.kt | 11 +++----- .../java/com/lizongying/mytv/api/ApiClient.kt | 27 ++++++++++++++++++- .../com/lizongying/mytv/api/BtraceClient.kt | 17 ------------ .../java/com/lizongying/mytv/api/DnsCache.kt | 23 ++++++++++++++++ .../com/lizongying/mytv/api/ProtoClient.kt | 16 ----------- .../main/java/com/lizongying/mytv/api/YSP.kt | 11 ++++++++ .../com/lizongying/mytv/models/TVViewModel.kt | 4 +-- 7 files changed, 66 insertions(+), 43 deletions(-) delete mode 100644 app/src/main/java/com/lizongying/mytv/api/BtraceClient.kt create mode 100644 app/src/main/java/com/lizongying/mytv/api/DnsCache.kt delete mode 100644 app/src/main/java/com/lizongying/mytv/api/ProtoClient.kt diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index 5f4616b..836a0d5 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -7,11 +7,9 @@ import android.util.Base64 import android.util.Log import com.lizongying.mytv.Utils.getDateFormat import com.lizongying.mytv.api.ApiClient -import com.lizongying.mytv.api.BtraceClient import com.lizongying.mytv.api.Info import com.lizongying.mytv.api.LiveInfo import com.lizongying.mytv.api.LiveInfoRequest -import com.lizongying.mytv.api.ProtoClient import com.lizongying.mytv.api.YSP import com.lizongying.mytv.api.YSPApiService import com.lizongying.mytv.api.YSPBtraceService @@ -31,8 +29,8 @@ import javax.crypto.spec.SecretKeySpec class Request { private var yspTokenService: YSPTokenService = ApiClient().yspTokenService private var yspApiService: YSPApiService = ApiClient().yspApiService - private var yspBtraceService: YSPBtraceService = BtraceClient().yspBtraceService - private var yspProtoService: YSPProtoService = ProtoClient().yspProtoService + private var yspBtraceService: YSPBtraceService = ApiClient().yspBtraceService + private var yspProtoService: YSPProtoService = ApiClient().yspProtoService private var ysp: YSP? = null // TODO onDestroy @@ -62,7 +60,6 @@ class Request { "CGTN阿拉伯语频道" to "CGTN 阿拉伯语频道", "CGTN西班牙语频道" to "CGTN 西班牙语频道", "CGTN外语纪录频道" to "CGTN 纪录频道", - "东方卫视" to "东方卫视", "湖南卫视" to "湖南卫视", "湖北卫视" to "湖北卫视", @@ -137,8 +134,8 @@ class Request { } } } else { - if (liveInfo?.data?.errinfo != null && liveInfo.data.errinfo != "success!") { - Log.e(TAG, "$title url error ${liveInfo.data.errinfo}") + if (liveInfo?.data?.errinfo != null && liveInfo.data.errinfo == "应版权方要求,暂停提供直播信号,请点击观看其他精彩节目") { + Log.e(TAG, "$title error ${liveInfo.data.errinfo}") tvModel.setErrInfo(liveInfo.data.errinfo) } else { Log.e(TAG, "$title url error $request $liveInfo") diff --git a/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt b/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt index e9b47a3..9b01754 100644 --- a/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt +++ b/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt @@ -1,18 +1,26 @@ package com.lizongying.mytv.api +import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory +import retrofit2.converter.protobuf.ProtoConverterFactory class ApiClient { private val yspUrl = "https://player-api.yangshipin.cn/" private val myUrl = "https://lyrics.run/" -// private val myUrl = "http://10.0.2.2:8081/" + private val protoUrl = "https://capi.yangshipin.cn/" + private val traceUrl = "https://btrace.yangshipin.cn/" + + private var okHttpClient = OkHttpClient.Builder() + .dns(DnsCache()) + .build() val yspApiService: YSPApiService by lazy { Retrofit.Builder() .baseUrl(yspUrl) + .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .build().create(YSPApiService::class.java) } @@ -20,7 +28,24 @@ class ApiClient { val yspTokenService: YSPTokenService by lazy { Retrofit.Builder() .baseUrl(myUrl) + .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .build().create(YSPTokenService::class.java) } + + val yspProtoService: YSPProtoService by lazy { + Retrofit.Builder() + .baseUrl(protoUrl) + .client(okHttpClient) + .addConverterFactory(ProtoConverterFactory.create()) + .build().create(YSPProtoService::class.java) + } + + val yspBtraceService: YSPBtraceService by lazy { + Retrofit.Builder() + .baseUrl(traceUrl) + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create()) + .build().create(YSPBtraceService::class.java) + } } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/BtraceClient.kt b/app/src/main/java/com/lizongying/mytv/api/BtraceClient.kt deleted file mode 100644 index ba91d6b..0000000 --- a/app/src/main/java/com/lizongying/mytv/api/BtraceClient.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.lizongying.mytv.api - - -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory - - -class BtraceClient { - private val yspUrl = "https://btrace.yangshipin.cn/" - - val yspBtraceService: YSPBtraceService by lazy { - Retrofit.Builder() - .baseUrl(yspUrl) - .addConverterFactory(GsonConverterFactory.create()) - .build().create(YSPBtraceService::class.java) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/DnsCache.kt b/app/src/main/java/com/lizongying/mytv/api/DnsCache.kt new file mode 100644 index 0000000..74972bc --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/api/DnsCache.kt @@ -0,0 +1,23 @@ +package com.lizongying.mytv.api + +import okhttp3.Dns +import java.net.InetAddress +import java.util.concurrent.ConcurrentHashMap + +class DnsCache : Dns { + private val dnsCache: MutableMap> = ConcurrentHashMap() + + override fun lookup(hostname: String): List { + dnsCache[hostname]?.let { + return it + } + + val addresses = InetAddress.getAllByName(hostname).toList() + + if (addresses.isNotEmpty()) { + dnsCache[hostname] = addresses + } + + return addresses + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/ProtoClient.kt b/app/src/main/java/com/lizongying/mytv/api/ProtoClient.kt deleted file mode 100644 index df8ac03..0000000 --- a/app/src/main/java/com/lizongying/mytv/api/ProtoClient.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.lizongying.mytv.api - -import retrofit2.Retrofit -import retrofit2.converter.protobuf.ProtoConverterFactory - - -class ProtoClient { - private val protoUrl = "https://capi.yangshipin.cn/" - - val yspProtoService: YSPProtoService by lazy { - Retrofit.Builder() - .baseUrl(protoUrl) - .addConverterFactory(ProtoConverterFactory.create()) - .build().create(YSPProtoService::class.java) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/YSP.kt b/app/src/main/java/com/lizongying/mytv/api/YSP.kt index ac95552..c6bece9 100644 --- a/app/src/main/java/com/lizongying/mytv/api/YSP.kt +++ b/app/src/main/java/com/lizongying/mytv/api/YSP.kt @@ -70,6 +70,8 @@ class YSP(var context: Context) { defn = "fhd" randStr = getRand() + + guid = newGuid() timeStr = getTimeStr() // guid = "lq3oqitm_1e15dnzgjnb" @@ -105,6 +107,15 @@ class YSP(var context: Context) { return guid } + fun newGuid(): String { + guid = generateGuid() + with(sharedPref!!.edit()) { + putString("guid", guid) + apply() + } + return guid + } + fun getRand(): String { var n = "" val e = "ABCDEFGHIJKlMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 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 dfe9acc..b896bf6 100644 --- a/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt +++ b/app/src/main/java/com/lizongying/mytv/models/TVViewModel.kt @@ -20,7 +20,7 @@ class TVViewModel(private var tv: TV) : ViewModel() { private var itemPosition: Int = 0 var retryTimes: Int = 0 - var retryMaxTimes: Int = 3 + var retryMaxTimes: Int = 5 var programUpdateTime: Long = 0 private val _errInfo = MutableLiveData() @@ -71,7 +71,7 @@ class TVViewModel(private var tv: TV) : ViewModel() { val ready: LiveData get() = _ready - private var mMinimumLoadableRetryCount = 3 + private var mMinimumLoadableRetryCount = 5 var seq = 0