kunfei 3 лет назад
Родитель
Сommit
dbd715f402

+ 51 - 0
app/src/androidTest/java/io/legado/app/UpdateTest.kt

@@ -0,0 +1,51 @@
+package io.legado.app
+
+import io.legado.app.exception.NoStackTraceException
+import io.legado.app.help.http.okHttpClient
+import io.legado.app.utils.channel
+import io.legado.app.utils.jsonPath
+import okhttp3.Request
+import org.junit.Test
+import splitties.init.appCtx
+
+class UpdateTest {
+
+    private val lastReleaseUrl = "https://api.github.com/repos/gedoor/legado/releases/latest"
+
+    @Test
+    fun updateApp() {
+        val body = okHttpClient.newCall(Request.Builder().url(lastReleaseUrl).build()).execute()
+            .body!!.string()
+        val rootDoc = jsonPath.parse(body)
+        val downloadUrl =
+            rootDoc.read<List<String>>("\$.assets[?(@.name =~ /legado_app_.*?apk\$/)].browser_download_url")
+        print(downloadUrl)
+    }
+
+    @Test
+    fun updateLollipop() {
+        val body = okHttpClient.newCall(Request.Builder().url(lastReleaseUrl).build()).execute()
+            .body!!.string()
+        val rootDoc = jsonPath.parse(body)
+        val downloadUrl =
+            rootDoc.read<List<String>>("\$.assets[?(@.name =~ /legado_lollipop_.*?apk\$/)].browser_download_url")
+        print(downloadUrl)
+    }
+
+    @Test
+    fun updateChannel() {
+        val body = okHttpClient.newCall(Request.Builder().url(lastReleaseUrl).build()).execute()
+            .body!!.string()
+        val rootDoc = jsonPath.parse(body)
+        val path = "\$.assets[?(@.name =~ /legado_${appCtx.channel}_.*?apk\$/)]"
+        val downloadUrl = rootDoc.read<List<String>>("${path}.browser_download_url")
+            .firstOrNull()
+            ?: throw NoStackTraceException("获取新版本出错")
+        val fileName = rootDoc.read<List<String>>("${path}.name")
+            .firstOrNull()
+            ?: throw NoStackTraceException("获取新版本出错")
+        print(downloadUrl)
+        print(fileName)
+    }
+
+}

+ 8 - 3
app/src/app/java/io/legado/app/help/AppUpdateGitHub.kt

@@ -6,13 +6,15 @@ import io.legado.app.exception.NoStackTraceException
 import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.help.http.newCallStrResponse
 import io.legado.app.help.http.okHttpClient
+import io.legado.app.utils.channel
 import io.legado.app.utils.jsonPath
 import io.legado.app.utils.readString
 import kotlinx.coroutines.CoroutineScope
+import splitties.init.appCtx
 
 @Keep
 @Suppress("unused")
-object AppUpdateGitHub: AppUpdate.AppUpdateInterface {
+object AppUpdateGitHub : AppUpdate.AppUpdateInterface {
 
     override fun check(
         scope: CoroutineScope,
@@ -31,9 +33,12 @@ object AppUpdateGitHub: AppUpdate.AppUpdateInterface {
             if (tagName > AppConst.appInfo.versionName) {
                 val updateBody = rootDoc.readString("$.body")
                     ?: throw NoStackTraceException("获取新版本出错")
-                val downloadUrl = rootDoc.readString("$.assets[0].browser_download_url")
+                val path = "\$.assets[?(@.name =~ /legado_${appCtx.channel}_.*?apk\$/)]"
+                val downloadUrl = rootDoc.read<List<String>>("${path}.browser_download_url")
+                    .firstOrNull()
                     ?: throw NoStackTraceException("获取新版本出错")
-                val fileName = rootDoc.readString("$.assets[0].name")
+                val fileName = rootDoc.read<List<String>>("${path}.name")
+                    .firstOrNull()
                     ?: throw NoStackTraceException("获取新版本出错")
                 return@async AppUpdate.UpdateInfo(tagName, updateBody, downloadUrl, fileName)
             } else {