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:
parent
2306038c74
commit
51dd8c2285
@ -232,8 +232,7 @@ class ExtensionManager(
|
|||||||
// SY <--
|
// SY <--
|
||||||
} else if (availableExt != null) {
|
} else if (availableExt != null) {
|
||||||
// SY -->
|
// SY -->
|
||||||
val hasUpdate = (!installedExt.isUnofficial || availableExt.isRepoSource) &&
|
val hasUpdate = installedExt.updateExists(availableExt)
|
||||||
availableExt.versionCode > installedExt.versionCode
|
|
||||||
|
|
||||||
if (installedExt.hasUpdate != hasUpdate) {
|
if (installedExt.hasUpdate != hasUpdate) {
|
||||||
mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate, isRepoSource = availableExt.isRepoSource, repoUrl = availableExt.repoUrl)
|
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.
|
* Extension method to set the update field of an installed extension.
|
||||||
*/
|
*/
|
||||||
private fun Extension.Installed.withUpdateCheck(): Extension.Installed {
|
private fun Extension.Installed.withUpdateCheck(): Extension.Installed {
|
||||||
val availableExt = _availableExtensionsFlow.value.find { it.pkgName == pkgName }
|
return if (updateExists()) {
|
||||||
if ((!isUnofficial || availableExt?.isRepoSource == true) && availableExt != null && availableExt.versionCode > versionCode) {
|
copy(hasUpdate = true)
|
||||||
return 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() {
|
private fun updatePendingUpdatesCount() {
|
||||||
|
@ -134,7 +134,7 @@ internal class ExtensionGithubApi {
|
|||||||
): List<Extension.Available> {
|
): List<Extension.Available> {
|
||||||
return this
|
return this
|
||||||
.filter {
|
.filter {
|
||||||
val libVersion = it.version.substringBeforeLast('.').toDouble()
|
val libVersion = it.extractLibVersion()
|
||||||
libVersion >= ExtensionLoader.LIB_VERSION_MIN && libVersion <= ExtensionLoader.LIB_VERSION_MAX
|
libVersion >= ExtensionLoader.LIB_VERSION_MIN && libVersion <= ExtensionLoader.LIB_VERSION_MAX
|
||||||
}
|
}
|
||||||
.map {
|
.map {
|
||||||
@ -143,6 +143,7 @@ internal class ExtensionGithubApi {
|
|||||||
pkgName = it.pkg,
|
pkgName = it.pkg,
|
||||||
versionName = it.version,
|
versionName = it.version,
|
||||||
versionCode = it.code,
|
versionCode = it.code,
|
||||||
|
libVersion = it.extractLibVersion(),
|
||||||
lang = it.lang,
|
lang = it.lang,
|
||||||
isNsfw = it.nsfw == 1,
|
isNsfw = it.nsfw == 1,
|
||||||
hasReadme = it.hasReadme == 1,
|
hasReadme = it.hasReadme == 1,
|
||||||
@ -181,6 +182,10 @@ internal class ExtensionGithubApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun ExtensionJsonObject.extractLibVersion(): Double {
|
||||||
|
return version.substringBeforeLast('.').toDouble()
|
||||||
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
private fun Extension.isBlacklisted(
|
private fun Extension.isBlacklisted(
|
||||||
blacklistEnabled: Boolean = sourcePreferences.enableSourceBlacklist().get(),
|
blacklistEnabled: Boolean = sourcePreferences.enableSourceBlacklist().get(),
|
||||||
|
@ -10,6 +10,7 @@ sealed class Extension {
|
|||||||
abstract val pkgName: String
|
abstract val pkgName: String
|
||||||
abstract val versionName: String
|
abstract val versionName: String
|
||||||
abstract val versionCode: Long
|
abstract val versionCode: Long
|
||||||
|
abstract val libVersion: Double
|
||||||
abstract val lang: String?
|
abstract val lang: String?
|
||||||
abstract val isNsfw: Boolean
|
abstract val isNsfw: Boolean
|
||||||
abstract val hasReadme: Boolean
|
abstract val hasReadme: Boolean
|
||||||
@ -20,6 +21,7 @@ sealed class Extension {
|
|||||||
override val pkgName: String,
|
override val pkgName: String,
|
||||||
override val versionName: String,
|
override val versionName: String,
|
||||||
override val versionCode: Long,
|
override val versionCode: Long,
|
||||||
|
override val libVersion: Double,
|
||||||
override val lang: String,
|
override val lang: String,
|
||||||
override val isNsfw: Boolean,
|
override val isNsfw: Boolean,
|
||||||
override val hasReadme: Boolean,
|
override val hasReadme: Boolean,
|
||||||
@ -42,6 +44,7 @@ sealed class Extension {
|
|||||||
override val pkgName: String,
|
override val pkgName: String,
|
||||||
override val versionName: String,
|
override val versionName: String,
|
||||||
override val versionCode: Long,
|
override val versionCode: Long,
|
||||||
|
override val libVersion: Double,
|
||||||
override val lang: String,
|
override val lang: String,
|
||||||
override val isNsfw: Boolean,
|
override val isNsfw: Boolean,
|
||||||
override val hasReadme: Boolean,
|
override val hasReadme: Boolean,
|
||||||
@ -60,6 +63,7 @@ sealed class Extension {
|
|||||||
override val pkgName: String,
|
override val pkgName: String,
|
||||||
override val versionName: String,
|
override val versionName: String,
|
||||||
override val versionCode: Long,
|
override val versionCode: Long,
|
||||||
|
override val libVersion: Double,
|
||||||
val signatureHash: String,
|
val signatureHash: String,
|
||||||
override val lang: String? = null,
|
override val lang: String? = null,
|
||||||
override val isNsfw: Boolean = false,
|
override val isNsfw: Boolean = false,
|
||||||
|
@ -135,7 +135,7 @@ internal object ExtensionLoader {
|
|||||||
logcat(LogPriority.WARN) { "Package $pkgName isn't signed" }
|
logcat(LogPriority.WARN) { "Package $pkgName isn't signed" }
|
||||||
return LoadResult.Error
|
return LoadResult.Error
|
||||||
} else if (signatureHash !in trustedSignatures) {
|
} 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" }
|
logcat(LogPriority.WARN) { "Extension $pkgName isn't trusted" }
|
||||||
return LoadResult.Untrusted(extension)
|
return LoadResult.Untrusted(extension)
|
||||||
}
|
}
|
||||||
@ -184,14 +184,15 @@ internal object ExtensionLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val extension = Extension.Installed(
|
val extension = Extension.Installed(
|
||||||
extName,
|
name = extName,
|
||||||
pkgName,
|
pkgName = pkgName,
|
||||||
versionName,
|
versionName = versionName,
|
||||||
versionCode,
|
versionCode = versionCode,
|
||||||
lang,
|
libVersion = libVersion,
|
||||||
isNsfw,
|
lang = lang,
|
||||||
hasReadme,
|
isNsfw = isNsfw,
|
||||||
hasChangelog,
|
hasReadme = hasReadme,
|
||||||
|
hasChangelog = hasChangelog,
|
||||||
sources = sources,
|
sources = sources,
|
||||||
pkgFactory = appInfo.metaData.getString(METADATA_SOURCE_FACTORY),
|
pkgFactory = appInfo.metaData.getString(METADATA_SOURCE_FACTORY),
|
||||||
isUnofficial = signatureHash != officialSignature,
|
isUnofficial = signatureHash != officialSignature,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user