From 2d2f5cdc66c8ce1d9e6857519c41381e6f66eab5 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Tue, 11 Oct 2022 14:50:38 -0400 Subject: [PATCH] Improve external repo extension handling --- .../browse/ExtensionDetailsScreen.kt | 24 +++++++++++++-- .../presentation/browse/ExtensionsScreen.kt | 30 ++++--------------- .../tachiyomi/extension/ExtensionManager.kt | 11 +++++-- .../tachiyomi/extension/model/Extension.kt | 2 ++ i18n/src/main/res/values/strings_sy.xml | 1 + 5 files changed, 38 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt index a9b98827e..498832355 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt @@ -148,6 +148,21 @@ private fun ExtensionDetails( item { WarningBanner(R.string.redundant_extension_message) } + extension.isRepoSource -> + item { + val uriHandler = LocalUriHandler.current + WarningBanner( + R.string.repo_extension_message, + modifier = Modifier.clickable { + extension.repoUrl ?: return@clickable + uriHandler.openUri( + extension.repoUrl + .replace("https://raw.githubusercontent.com", "https://github.com") + .removeSuffix("/repo/"), + ) + }, + ) + } // SY <-- extension.isUnofficial -> item { @@ -199,9 +214,14 @@ private fun ExtensionDetails( } @Composable -private fun WarningBanner(@StringRes textRes: Int) { +private fun WarningBanner( + @StringRes textRes: Int, + // SY --> + modifier: Modifier = Modifier, +) { Box( - modifier = Modifier + modifier = modifier + // SY <-- .fillMaxWidth() .background(MaterialTheme.colorScheme.error) .padding(16.dp), diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt index 32dd1a775..970a7628c 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt @@ -302,6 +302,10 @@ private fun ExtensionItemContent( val warning = when { extension is Extension.Untrusted -> R.string.ext_untrusted + // SY --> + extension is Extension.Installed && extension.isRepoSource -> R.string.repo_source + extension is Extension.Available && extension.isRepoSource -> R.string.repo_source + // SY <-- extension is Extension.Installed && extension.isUnofficial -> R.string.ext_unofficial extension is Extension.Installed && extension.isObsolete -> R.string.ext_obsolete extension is Extension.Installed && extension.isRedundant -> R.string.ext_redundant @@ -310,14 +314,7 @@ private fun ExtensionItemContent( } if (warning != null) { Text( - text = stringResource(warning).uppercase() /* SY --> */ plusRepo extension, /* SY <-- */ - color = MaterialTheme.colorScheme.error, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - } /* SY --> */ else if (extension is Extension.Available && extension.isRepoSource) { - Text( - text = stringResource(R.string.repo_source).uppercase(), + text = stringResource(warning).uppercase(), color = MaterialTheme.colorScheme.error, maxLines = 1, overflow = TextOverflow.Ellipsis, @@ -336,23 +333,6 @@ private fun ExtensionItemContent( ) } } - // SY <-- - } - } -} - -@Composable -private infix fun String.plusRepo(extension: Extension): String { - val context = LocalContext.current - return remember(this, extension, context) { - if (extension is Extension.Available && extension.isRepoSource) { - if (isNullOrEmpty()) { - "" - } else { - "$this • " - } + context.getString(R.string.repo_source) - } else { - this } } } 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 596710a80..c3fc16de7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -271,13 +271,18 @@ class ExtensionManager( changed = true // SY <-- } else if (availableExt != null) { - val hasUpdate = !installedExt.isUnofficial && + // SY --> + val hasUpdate = (!installedExt.isUnofficial || availableExt.isRepoSource) && availableExt.versionCode > installedExt.versionCode if (installedExt.hasUpdate != hasUpdate) { - mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate) + mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate, isRepoSource = availableExt.isRepoSource, repoUrl = availableExt.repoUrl) + changed = true + } else if (availableExt.isRepoSource) { + mutInstalledExtensions[index] = installedExt.copy(isRepoSource = true, repoUrl = availableExt.repoUrl) changed = true } + // SY <-- } } if (changed) { @@ -453,7 +458,7 @@ class ExtensionManager( */ private fun Extension.Installed.withUpdateCheck(): Extension.Installed { val availableExt = availableExtensions.find { it.pkgName == pkgName } - if (isUnofficial.not() && availableExt != null && availableExt.versionCode > versionCode) { + if ((isUnofficial.not() || availableExt?.isRepoSource == true) && availableExt != null && availableExt.versionCode > versionCode) { return copy(hasUpdate = true) } return this diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt index c3c28fe6a..ca9bae9fd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt @@ -32,6 +32,8 @@ sealed class Extension { val isUnofficial: Boolean = false, // SY --> val isRedundant: Boolean = false, + val repoUrl: String? = null, + val isRepoSource: Boolean = false, // SY <-- ) : Extension() diff --git a/i18n/src/main/res/values/strings_sy.xml b/i18n/src/main/res/values/strings_sy.xml index b0b4f415c..a981a3282 100644 --- a/i18n/src/main/res/values/strings_sy.xml +++ b/i18n/src/main/res/values/strings_sy.xml @@ -397,6 +397,7 @@ Redundant This extension is redundant and will not be used inside this version of Tachiyomi. + This extension is from an external repo. Tap to view the repo. You have no additional repos. Tap the plus button to create one for adding external extensions.