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