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.