From df07276e2082b7d2b32ef342d74ba1bc7fedc0df Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 28 Nov 2021 18:29:22 -0500 Subject: [PATCH] Avoid loading available extensions list if it seems too small (cherry picked from commit 6a39c8fc13821a3b6d8f0efd738254154f4b7148) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt --- .../tachiyomi/extension/ExtensionManager.kt | 5 +++- .../extension/api/ExtensionGithubApi.kt | 30 ++++++++++++------- app/src/main/res/values/strings.xml | 1 + 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt index ce6095b3d..ea33a9cd1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.extension.util.ExtensionLoader import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.util.lang.launchNow +import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.util.system.toast import exh.log.xLogD import exh.source.BlacklistedSources @@ -24,6 +25,7 @@ import exh.source.EH_SOURCE_ID import exh.source.EXH_SOURCE_ID import exh.source.MERGED_SOURCE_ID import kotlinx.coroutines.async +import logcat.LogPriority import rx.Observable import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -198,7 +200,8 @@ class ExtensionManager( val extensions: List = try { api.findExtensions() } catch (e: Exception) { - context.toast(e.message) + logcat(LogPriority.ERROR, e) + context.toast(R.string.extension_api_error) emptyList() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt index fa31b615f..433d95969 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt @@ -23,20 +23,30 @@ internal class ExtensionGithubApi { suspend fun findExtensions(): List { return withIOContext { - networkService.client + val extensions = networkService.client .newCall(GET("${REPO_URL_PREFIX}index.min.json")) .await() .parseAs>() - .toExtensions() - } /* SY --> */ + preferences.extensionRepos().get().flatMap { repoPath -> - val url = "$BASE_URL$repoPath/repo/" - networkService.client - .newCall(GET("${url}index.min.json")) - .await() - .parseAs>() - .toExtensions(url) + .toExtensions() /* SY --> */ + preferences.extensionRepos() + .get() + .flatMap { repoPath -> + val url = "$BASE_URL$repoPath/repo/" + networkService.client + .newCall(GET("${url}index.min.json")) + .await() + .parseAs>() + .toExtensions(url) + } + // SY <-- + + // Sanity check - a small number of extensions probably means something broke + // with the repo generator + if (extensions.size < 100) { + throw Exception() + } + + extensions } - // SY <-- } suspend fun checkForUpdates(context: Context): List { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 614252822..0589567ac 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -261,6 +261,7 @@ This extension was signed with an untrusted certificate and wasn\'t activated.\n\nA malicious extension could read any login credentials stored in Tachiyomi or execute arbitrary code.\n\nBy trusting this certificate you accept these risks. This extension is no longer available. This extension is not from the official Tachiyomi extensions list. + Failed to get extensions list Version: %1$s Language: %1$s 18+