|
@@ -10,11 +10,7 @@ import eu.kanade.tachiyomi.network.NetworkHelper
|
|
|
import eu.kanade.tachiyomi.network.await
|
|
|
import eu.kanade.tachiyomi.network.parseAs
|
|
|
import eu.kanade.tachiyomi.util.lang.withIOContext
|
|
|
-import kotlinx.serialization.json.JsonArray
|
|
|
-import kotlinx.serialization.json.int
|
|
|
-import kotlinx.serialization.json.jsonObject
|
|
|
-import kotlinx.serialization.json.jsonPrimitive
|
|
|
-import kotlinx.serialization.json.long
|
|
|
+import kotlinx.serialization.Serializable
|
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
import java.util.Date
|
|
|
|
|
@@ -28,8 +24,8 @@ internal class ExtensionGithubApi {
|
|
|
networkService.client
|
|
|
.newCall(GET("${REPO_URL_PREFIX}index.min.json"))
|
|
|
.await()
|
|
|
- .parseAs<JsonArray>()
|
|
|
- .let { parseResponse(it) }
|
|
|
+ .parseAs<List<ExtensionJsonObject>>()
|
|
|
+ .toExtensions()
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -56,24 +52,23 @@ internal class ExtensionGithubApi {
|
|
|
return extensionsWithUpdate
|
|
|
}
|
|
|
|
|
|
- private fun parseResponse(json: JsonArray): List<Extension.Available> {
|
|
|
- return json
|
|
|
- .filter { element ->
|
|
|
- val versionName = element.jsonObject["version"]!!.jsonPrimitive.content
|
|
|
- val libVersion = versionName.substringBeforeLast('.').toDouble()
|
|
|
+ private fun List<ExtensionJsonObject>.toExtensions(): List<Extension.Available> {
|
|
|
+ return this
|
|
|
+ .filter {
|
|
|
+ val libVersion = it.version.substringBeforeLast('.').toDouble()
|
|
|
libVersion >= ExtensionLoader.LIB_VERSION_MIN && libVersion <= ExtensionLoader.LIB_VERSION_MAX
|
|
|
}
|
|
|
- .map { element ->
|
|
|
- val name = element.jsonObject["name"]!!.jsonPrimitive.content.substringAfter("Tachiyomi: ")
|
|
|
- val pkgName = element.jsonObject["pkg"]!!.jsonPrimitive.content
|
|
|
- val apkName = element.jsonObject["apk"]!!.jsonPrimitive.content
|
|
|
- val versionName = element.jsonObject["version"]!!.jsonPrimitive.content
|
|
|
- val versionCode = element.jsonObject["code"]!!.jsonPrimitive.long
|
|
|
- val lang = element.jsonObject["lang"]!!.jsonPrimitive.content
|
|
|
- val nsfw = element.jsonObject["nsfw"]!!.jsonPrimitive.int == 1
|
|
|
- val icon = "${REPO_URL_PREFIX}icon/${apkName.replace(".apk", ".png")}"
|
|
|
-
|
|
|
- Extension.Available(name, pkgName, versionName, versionCode, lang, nsfw, apkName, icon)
|
|
|
+ .map {
|
|
|
+ Extension.Available(
|
|
|
+ name = it.name.substringAfter("Tachiyomi: "),
|
|
|
+ pkgName = it.pkg,
|
|
|
+ versionName = it.version,
|
|
|
+ versionCode = it.code,
|
|
|
+ lang = it.lang,
|
|
|
+ isNsfw = it.nsfw == 1,
|
|
|
+ apkName = it.apk,
|
|
|
+ iconUrl = "${REPO_URL_PREFIX}icon/${it.apk.replace(".apk", ".png")}"
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -83,3 +78,14 @@ internal class ExtensionGithubApi {
|
|
|
}
|
|
|
|
|
|
private const val REPO_URL_PREFIX = "https://raw.githubusercontent.com/tachiyomiorg/tachiyomi-extensions/repo/"
|
|
|
+
|
|
|
+@Serializable
|
|
|
+private data class ExtensionJsonObject(
|
|
|
+ val name: String,
|
|
|
+ val pkg: String,
|
|
|
+ val apk: String,
|
|
|
+ val version: String,
|
|
|
+ val code: Long,
|
|
|
+ val lang: String,
|
|
|
+ val nsfw: Int,
|
|
|
+)
|