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 {
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),

View File

@ -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
}
}
}

View File

@ -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

View File

@ -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()

View File

@ -397,6 +397,7 @@
<!-- Extension section -->
<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="repo_extension_message">This extension is from an external repo. Tap to view the repo.</string>
<!-- Extension Repos -->
<string name="information_empty_repos">You have no additional repos. Tap the plus button to create one for adding external extensions.</string>