mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Use data class to parse extensions list
This commit is contained in:
		| @@ -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, | ||||
| ) | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import rx.Observable | ||||
| import rx.Producer | ||||
| import rx.Subscription | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.fullType | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.io.IOException | ||||
| import java.util.concurrent.atomic.AtomicBoolean | ||||
| import kotlin.coroutines.resumeWithException | ||||
| @@ -116,10 +116,6 @@ fun OkHttpClient.newCallWithProgress(request: Request, listener: ProgressListene | ||||
| } | ||||
|  | ||||
| inline fun <reified T> Response.parseAs(): T { | ||||
|     // Avoiding Injekt.get<Json>() due to compiler issues | ||||
|     val json = Injekt.getInstance<Json>(fullType<Json>().type) | ||||
|     this.use { | ||||
|         val responseBody = it.body?.string().orEmpty() | ||||
|         return json.decodeFromString(responseBody) | ||||
|     } | ||||
|     val responseBody = this.body?.string().orEmpty() | ||||
|     return Injekt.get<Json>().decodeFromString(responseBody) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user