mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
Prompt Extension update if ext-lib is updated
Co-Authored-By: AntsyLich <59261191+AntsyLich@users.noreply.github.com>
This commit is contained in:
parent
92513e11d1
commit
1f935070bb
4 changed files with 34 additions and 17 deletions
|
@ -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 if (updateExists()) copy(hasUpdate = true) else this
|
||||
}
|
||||
return 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
|
||||
|
|
|
@ -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/"
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue