Prompt Extension update if ext-lib is updated

Co-authored-by: arkon <arkon@users.noreply.github.com>
(cherry picked from commit e1ab1fdb656bea90bdf6990523c857e0434fbc0c)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt
#	app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt
This commit is contained in:
AntsyLich 2022-10-28 16:37:59 +06:00 committed by Jobobby04
parent 2306038c74
commit 51dd8c2285
4 changed files with 32 additions and 16 deletions

View File

@ -232,8 +232,7 @@ class ExtensionManager(
// SY <--
} else if (availableExt != null) {
// SY -->
val hasUpdate = (!installedExt.isUnofficial || availableExt.isRepoSource) &&
availableExt.versionCode > installedExt.versionCode
val hasUpdate = installedExt.updateExists(availableExt)
if (installedExt.hasUpdate != hasUpdate) {
mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate, isRepoSource = availableExt.isRepoSource, repoUrl = availableExt.repoUrl)
@ -417,11 +416,18 @@ class ExtensionManager(
* Extension method to set the update field of an installed extension.
*/
private fun Extension.Installed.withUpdateCheck(): Extension.Installed {
val availableExt = _availableExtensionsFlow.value.find { it.pkgName == pkgName }
if ((!isUnofficial || availableExt?.isRepoSource == true) && availableExt != null && availableExt.versionCode > versionCode) {
return copy(hasUpdate = true)
return if (updateExists()) {
copy(hasUpdate = true)
} else {
this
}
return this
}
private fun Extension.Installed.updateExists(availableExtension: Extension.Available? = null): Boolean {
val availableExt = availableExtension ?: _availableExtensionsFlow.value.find { it.pkgName == pkgName }
if ((isUnofficial && availableExt?.isRepoSource != true) || availableExt == null) return false
return (availableExt.versionCode > versionCode || availableExt.libVersion > libVersion)
}
private fun updatePendingUpdatesCount() {

View File

@ -134,7 +134,7 @@ internal class ExtensionGithubApi {
): List<Extension.Available> {
return this
.filter {
val libVersion = it.version.substringBeforeLast('.').toDouble()
val libVersion = it.extractLibVersion()
libVersion >= ExtensionLoader.LIB_VERSION_MIN && libVersion <= ExtensionLoader.LIB_VERSION_MAX
}
.map {
@ -143,6 +143,7 @@ internal class ExtensionGithubApi {
pkgName = it.pkg,
versionName = it.version,
versionCode = it.code,
libVersion = it.extractLibVersion(),
lang = it.lang,
isNsfw = it.nsfw == 1,
hasReadme = it.hasReadme == 1,
@ -181,6 +182,10 @@ internal class ExtensionGithubApi {
}
}
private fun ExtensionJsonObject.extractLibVersion(): Double {
return version.substringBeforeLast('.').toDouble()
}
// SY -->
private fun Extension.isBlacklisted(
blacklistEnabled: Boolean = sourcePreferences.enableSourceBlacklist().get(),

View File

@ -10,6 +10,7 @@ sealed class Extension {
abstract val pkgName: String
abstract val versionName: String
abstract val versionCode: Long
abstract val libVersion: Double
abstract val lang: String?
abstract val isNsfw: Boolean
abstract val hasReadme: Boolean
@ -20,6 +21,7 @@ sealed class Extension {
override val pkgName: String,
override val versionName: String,
override val versionCode: Long,
override val libVersion: Double,
override val lang: String,
override val isNsfw: Boolean,
override val hasReadme: Boolean,
@ -42,6 +44,7 @@ sealed class Extension {
override val pkgName: String,
override val versionName: String,
override val versionCode: Long,
override val libVersion: Double,
override val lang: String,
override val isNsfw: Boolean,
override val hasReadme: Boolean,
@ -60,6 +63,7 @@ sealed class Extension {
override val pkgName: String,
override val versionName: String,
override val versionCode: Long,
override val libVersion: Double,
val signatureHash: String,
override val lang: String? = null,
override val isNsfw: Boolean = false,

View File

@ -135,7 +135,7 @@ internal object ExtensionLoader {
logcat(LogPriority.WARN) { "Package $pkgName isn't signed" }
return LoadResult.Error
} else if (signatureHash !in trustedSignatures) {
val extension = Extension.Untrusted(extName, pkgName, versionName, versionCode, signatureHash)
val extension = Extension.Untrusted(extName, pkgName, versionName, versionCode, libVersion, signatureHash)
logcat(LogPriority.WARN) { "Extension $pkgName isn't trusted" }
return LoadResult.Untrusted(extension)
}
@ -184,14 +184,15 @@ internal object ExtensionLoader {
}
val extension = Extension.Installed(
extName,
pkgName,
versionName,
versionCode,
lang,
isNsfw,
hasReadme,
hasChangelog,
name = extName,
pkgName = pkgName,
versionName = versionName,
versionCode = versionCode,
libVersion = libVersion,
lang = lang,
isNsfw = isNsfw,
hasReadme = hasReadme,
hasChangelog = hasChangelog,
sources = sources,
pkgFactory = appInfo.metaData.getString(METADATA_SOURCE_FACTORY),
isUnofficial = signatureHash != officialSignature,