Skip to content

Commit fd145ec

Browse files
committed
Imporved compatibility
1 parent 6813a53 commit fd145ec

File tree

5 files changed

+41
-34
lines changed

5 files changed

+41
-34
lines changed

app/src/main/java/com/lizongying/mytv0/MainViewModel.kt

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
package com.lizongying.mytv0.models
2-
31
import android.content.Context
42
import android.net.Uri
53
import android.util.Log
@@ -24,12 +22,10 @@ import com.lizongying.mytv0.showToast
2422
import io.github.lizongying.Gua
2523
import kotlinx.coroutines.CoroutineScope
2624
import kotlinx.coroutines.Dispatchers
27-
import kotlinx.coroutines.delay
2825
import kotlinx.coroutines.launch
2926
import kotlinx.coroutines.withContext
3027
import java.io.File
3128

32-
3329
class MainViewModel : ViewModel() {
3430
val FILE_NAME = "channels.txt"
3531
private var timeFormat = if (SP.displaySeconds) "HH:mm:ss" else "HH:mm"
@@ -97,11 +93,10 @@ class MainViewModel : ViewModel() {
9793
R.string.channel_read_error.showToast()
9894
}
9995
} else {
100-
list = Gson().fromJson(
101-
SP.channelListJson,
102-
object : com.google.gson.reflect.TypeToken<List<TV>>() {}.type
103-
)
104-
list2Channel()
96+
Gson().fromJson<List<TV>?>(
97+
/* json = */ SP.channelListJson,
98+
/* typeOfT = */ object : com.google.gson.reflect.TypeToken<List<TV>>() {}.type
99+
).apply { list2Channel(this) }
105100
}
106101
_channelsOk.value = true
107102
}
@@ -113,15 +108,15 @@ class MainViewModel : ViewModel() {
113108
val response = HttpClient.okHttpClient.newCall(request).execute()
114109

115110
if (response.isSuccessful) {
116-
val res = EPGXmlParser().parse(response.body!!.byteStream())
111+
val res = EPGXmlParser().parse(response.body()!!.byteStream())
117112

118113
withContext(Dispatchers.Main) {
119114
for (m in listModel) {
120115
res[m.tv.name]?.let { m.setEpg(it) }
121116
}
122117
}
123118
} else {
124-
Log.e(TAG, "EPG ${response.code}")
119+
Log.e(TAG, "EPG ${response.code()}")
125120
R.string.epg_status_err.showToast()
126121
}
127122
}
@@ -231,7 +226,7 @@ class MainViewModel : ViewModel() {
231226
'[' -> {
232227
try {
233228
val type = object : com.google.gson.reflect.TypeToken<List<TV>>() {}.type
234-
list = com.google.gson.Gson().fromJson(string, type)
229+
list = Gson().fromJson(string, type)
235230
SP.channelListJson = string
236231
Log.i(TAG, "导入频道 ${list.size}")
237232
} catch (e: Exception) {
@@ -362,12 +357,12 @@ class MainViewModel : ViewModel() {
362357
}
363358
}
364359

365-
list2Channel()
360+
list2Channel(list)
366361

367362
return true
368363
}
369364

370-
private fun list2Channel() {
365+
private fun list2Channel(list: List<TV>) {
371366
groupModel.initTVGroup()
372367

373368
val map: MutableMap<String, MutableList<TVModel>> = mutableMapOf()

app/src/main/java/com/lizongying/mytv0/MyTVExceptionHandler.kt

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,34 @@ package com.lizongying.mytv0
33
import android.content.Context
44
import android.os.Build
55
import android.util.Log
6-
import kotlinx.coroutines.CoroutineScope
6+
import com.lizongying.mytv0.requests.HttpClient
77
import kotlinx.coroutines.Dispatchers
88
import kotlinx.coroutines.launch
9+
import kotlinx.coroutines.runBlocking
910
import kotlinx.coroutines.withContext
10-
import okhttp3.MediaType.Companion.toMediaType
11-
import okhttp3.RequestBody.Companion.toRequestBody
11+
import okhttp3.MediaType
12+
import okhttp3.Request
13+
import okhttp3.RequestBody
14+
import java.io.IOException
1215
import kotlin.system.exitProcess
1316

14-
class MyTVExceptionHandler(val context: Context) : Thread.UncaughtExceptionHandler {
17+
class MyTVExceptionHandler(private val context: Context) : Thread.UncaughtExceptionHandler {
1518
override fun uncaughtException(t: Thread, e: Throwable) {
1619
val crashInfo =
17-
"APP: ${context.appVersionName}, PRODUCT: ${Build.PRODUCT}, DEVICE: ${Build.DEVICE}, SUPPORTED_ABIS: ${Build.SUPPORTED_ABIS.joinToString()}, BOARD: ${Build.BOARD}, MANUFACTURER: ${Build.MANUFACTURER}, MODEL: ${Build.MODEL}, VERSION: ${Build.VERSION.SDK_INT}\nThread: ${t.name}\nException: ${e.message}\nStackTrace: ${
20+
"APP: ${context.appVersionName}, PRODUCT: ${Build.PRODUCT}, DEVICE: ${Build.DEVICE}, SUPPORTED_ABIS: ${Build.CPU_ABI},${Build.CPU_ABI2}, BOARD: ${Build.BOARD}, MANUFACTURER: ${Build.MANUFACTURER}, MODEL: ${Build.MODEL}, VERSION: ${Build.VERSION.SDK_INT}\nThread: ${t.name}\nException: ${e.message}\nStackTrace: ${
1821
Log.getStackTraceString(
1922
e
2023
)
2124
}\n"
2225

23-
CoroutineScope(Dispatchers.IO).launch {
24-
saveCrashInfoToFile(crashInfo)
26+
runBlocking {
27+
launch(Dispatchers.IO) {
28+
saveCrashInfoToFile(crashInfo)
2529

26-
withContext(Dispatchers.Main) {
27-
android.os.Process.killProcess(android.os.Process.myPid())
28-
exitProcess(1)
30+
withContext(Dispatchers.Main) {
31+
android.os.Process.killProcess(android.os.Process.myPid())
32+
exitProcess(1)
33+
}
2934
}
3035
}
3136
}
@@ -55,15 +60,21 @@ class MyTVExceptionHandler(val context: Context) : Thread.UncaughtExceptionHandl
5560

5661
private suspend fun saveLog(crashInfo: String) {
5762
withContext(Dispatchers.IO) {
58-
val client = okhttp3.OkHttpClient.Builder().build()
59-
val request = okhttp3.Request.Builder()
63+
64+
val requestBody = RequestBody.create(MediaType.parse("text/plain"), crashInfo)
65+
val request = Request.Builder()
6066
.url("https://lyrics.run/my-tv-0/v1/log")
61-
.method("POST", crashInfo.toRequestBody("text/plain".toMediaType()))
67+
.post(requestBody)
6268
.build()
6369
try {
64-
client.newCall(request).execute()
65-
Log.i(TAG, "log success")
66-
} catch (e: Exception) {
70+
HttpClient.okHttpClient.newCall(request).execute().use { response ->
71+
if (response.isSuccessful) {
72+
Log.i(TAG, "log success")
73+
} else {
74+
Log.e(TAG, "log failed: ${response.code()}")
75+
}
76+
}
77+
} catch (e: IOException) {
6778
e.printStackTrace()
6879
}
6980
}

app/src/main/java/com/lizongying/mytv0/Utils.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.lizongying.mytv0.ISP.CHINA_MOBILE
88
import com.lizongying.mytv0.ISP.CHINA_TELECOM
99
import com.lizongying.mytv0.ISP.CHINA_UNICOM
1010
import com.lizongying.mytv0.ISP.UNKNOWN
11+
import com.lizongying.mytv0.requests.HttpClient
1112
import com.lizongying.mytv0.requests.TimeResponse
1213
import kotlinx.coroutines.CoroutineScope
1314
import kotlinx.coroutines.Dispatchers
@@ -94,7 +95,7 @@ object Utils {
9495
*/
9596
private suspend fun getTimestampFromServer(): Long {
9697
return withContext(Dispatchers.IO) {
97-
val client = okhttp3.OkHttpClient.Builder().build()
98+
val client = HttpClient.okHttpClient
9899
val request = okhttp3.Request.Builder()
99100
.url("https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp")
100101
.build()
@@ -113,7 +114,7 @@ object Utils {
113114

114115
suspend fun getISP(): ISP {
115116
return withContext(Dispatchers.IO) {
116-
val client = okhttp3.OkHttpClient.Builder().build()
117+
val client = HttpClient.okHttpClient
117118
val request = okhttp3.Request.Builder()
118119
.url("https://api.myip.la/json")
119120
.build()

app/src/main/java/com/lizongying/mytv0/models/TVModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class TVModel(var tv: TV) : ViewModel() {
146146
httpDataSource = DefaultHttpDataSource.Factory()
147147
httpDataSource.setKeepPostFor302Redirects(true)
148148
httpDataSource.setAllowCrossProtocolRedirects(true)
149-
httpDataSource.setConnectTimeoutMs(5000)
149+
httpDataSource.setConnectTimeoutMs(5000).setReadTimeoutMs(5000)
150150
tv.headers?.let {
151151
httpDataSource.setDefaultRequestProperties(it)
152152
it.forEach { (key, value) ->

app/src/main/res/raw/channels.txt

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)