Improve external repo extension handling
This commit is contained in:
parent
7fd4f5ee97
commit
2d2f5cdc66
@ -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),
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user