Improve external repo extension handling

This commit is contained in:
Jobobby04 2022-10-11 14:50:38 -04:00
parent 7fd4f5ee97
commit 2d2f5cdc66
5 changed files with 38 additions and 30 deletions

View File

@ -148,6 +148,21 @@ private fun ExtensionDetails(
item { item {
WarningBanner(R.string.redundant_extension_message) 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 <-- // SY <--
extension.isUnofficial -> extension.isUnofficial ->
item { item {
@ -199,9 +214,14 @@ private fun ExtensionDetails(
} }
@Composable @Composable
private fun WarningBanner(@StringRes textRes: Int) { private fun WarningBanner(
@StringRes textRes: Int,
// SY -->
modifier: Modifier = Modifier,
) {
Box( Box(
modifier = Modifier modifier = modifier
// SY <--
.fillMaxWidth() .fillMaxWidth()
.background(MaterialTheme.colorScheme.error) .background(MaterialTheme.colorScheme.error)
.padding(16.dp), .padding(16.dp),

View File

@ -302,6 +302,10 @@ private fun ExtensionItemContent(
val warning = when { val warning = when {
extension is Extension.Untrusted -> R.string.ext_untrusted 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.isUnofficial -> R.string.ext_unofficial
extension is Extension.Installed && extension.isObsolete -> R.string.ext_obsolete extension is Extension.Installed && extension.isObsolete -> R.string.ext_obsolete
extension is Extension.Installed && extension.isRedundant -> R.string.ext_redundant extension is Extension.Installed && extension.isRedundant -> R.string.ext_redundant
@ -310,14 +314,7 @@ private fun ExtensionItemContent(
} }
if (warning != null) { if (warning != null) {
Text( Text(
text = stringResource(warning).uppercase() /* SY --> */ plusRepo extension, /* SY <-- */ text = stringResource(warning).uppercase(),
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(),
color = MaterialTheme.colorScheme.error, color = MaterialTheme.colorScheme.error,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis, 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
} }
} }
} }

View File

@ -271,13 +271,18 @@ class ExtensionManager(
changed = true changed = true
// SY <-- // SY <--
} else if (availableExt != null) { } else if (availableExt != null) {
val hasUpdate = !installedExt.isUnofficial && // SY -->
val hasUpdate = (!installedExt.isUnofficial || availableExt.isRepoSource) &&
availableExt.versionCode > installedExt.versionCode availableExt.versionCode > installedExt.versionCode
if (installedExt.hasUpdate != hasUpdate) { 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 changed = true
} }
// SY <--
} }
} }
if (changed) { if (changed) {
@ -453,7 +458,7 @@ class ExtensionManager(
*/ */
private fun Extension.Installed.withUpdateCheck(): Extension.Installed { private fun Extension.Installed.withUpdateCheck(): Extension.Installed {
val availableExt = availableExtensions.find { it.pkgName == pkgName } 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 copy(hasUpdate = true)
} }
return this return this

View File

@ -32,6 +32,8 @@ sealed class Extension {
val isUnofficial: Boolean = false, val isUnofficial: Boolean = false,
// SY --> // SY -->
val isRedundant: Boolean = false, val isRedundant: Boolean = false,
val repoUrl: String? = null,
val isRepoSource: Boolean = false,
// SY <-- // SY <--
) : Extension() ) : Extension()

View File

@ -397,6 +397,7 @@
<!-- Extension section --> <!-- Extension section -->
<string name="ext_redundant">Redundant</string> <string name="ext_redundant">Redundant</string>
<string name="redundant_extension_message">This extension is redundant and will not be used inside this version of Tachiyomi.</string> <string name="redundant_extension_message">This extension is redundant and will not be used inside this version of Tachiyomi.</string>
<string name="repo_extension_message">This extension is from an external repo. Tap to view the repo.</string>
<!-- Extension Repos --> <!-- Extension Repos -->
<string name="information_empty_repos">You have no additional repos. Tap the plus button to create one for adding external extensions.</string> <string name="information_empty_repos">You have no additional repos. Tap the plus button to create one for adding external extensions.</string>