Prompt Extension update if ext-lib is updated

Co-Authored-By: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
This commit is contained in:
Jays2Kings 2022-12-13 16:40:10 -05:00
parent 92513e11d1
commit 1f935070bb
4 changed files with 34 additions and 17 deletions

View file

@ -248,7 +248,7 @@ class ExtensionManager(
changed = true
}
if (availableExt != null) {
val hasUpdate = availableExt.versionCode > installedExt.versionCode
val hasUpdate = installedExt.updateExists(availableExt)
if (installedExt.hasUpdate != hasUpdate) {
mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate)
hasUpdateCount++
@ -460,11 +460,14 @@ class ExtensionManager(
* Extension method to set the update field of an installed extension.
*/
private fun Extension.Installed.withUpdateCheck(): Extension.Installed {
val availableExt = availableExtensions.find { it.pkgName == pkgName }
if (availableExt != null && availableExt.versionCode > versionCode) {
return copy(hasUpdate = true)
}
return this
return if (updateExists()) copy(hasUpdate = true) else this
}
private fun Extension.Installed.updateExists(availableExtension: Extension.Available? = null): Boolean {
val availableExt = availableExtension ?: availableExtensionsRelay.value.find { it.pkgName == pkgName }
if (isUnofficial || availableExt == null) return false
return (availableExt.versionCode > versionCode || availableExt.libVersion > libVersion)
}
@Parcelize

View file

@ -69,7 +69,11 @@ internal class ExtensionGithubApi {
val pkgName = installedExt.pkgName
val availableExt = extensions.find { it.pkgName == pkgName } ?: continue
val hasUpdate = availableExt.versionCode > installedExt.versionCode
val hasUpdate = installedExt.isUnofficial.not() &&
(
availableExt.versionCode > installedExt.versionCode ||
availableExt.libVersion > installedExt.libVersion
)
if (hasUpdate) {
extensionsWithUpdate.add(availableExt)
}
@ -82,7 +86,7 @@ internal class ExtensionGithubApi {
private fun List<ExtensionJsonObject>.toExtensions(): 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 {
@ -91,6 +95,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,
@ -113,6 +118,10 @@ internal class ExtensionGithubApi {
REPO_URL_PREFIX
}
}
private fun ExtensionJsonObject.extractLibVersion(): Double {
return version.substringBeforeLast('.').toDouble()
}
}
private const val REPO_URL_PREFIX = "https://raw.githubusercontent.com/tachiyomiorg/tachiyomi-extensions/repo/"

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,
@ -37,6 +39,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,
@ -59,6 +62,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

@ -144,7 +144,7 @@ internal object ExtensionLoader {
if (signatureHash == null) {
return LoadResult.Error("Package $pkgName isn't signed")
} else if (signatureHash !in trustedSignatures) {
val extension = Extension.Untrusted(extName, pkgName, versionName, versionCode, signatureHash)
val extension = Extension.Untrusted(extName, pkgName, versionName, versionCode, libVersion, signatureHash)
Timber.w("Extension $pkgName isn't trusted")
return LoadResult.Untrusted(extension)
}
@ -192,14 +192,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,