mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
more updates to version checking logic
Fixed an older release counting as a new version if it was a beta. Also finding the newest version out the first 10, instead of just getting the first release that's new
This commit is contained in:
parent
49e0cc3ad0
commit
cd3e185e82
1 changed files with 16 additions and 5 deletions
|
@ -31,10 +31,17 @@ class AppUpdateChecker {
|
||||||
.newCall(GET("https://api.github.com/repos/$GITHUB_REPO/releases"))
|
.newCall(GET("https://api.github.com/repos/$GITHUB_REPO/releases"))
|
||||||
.await()
|
.await()
|
||||||
.parseAs<List<GithubRelease>>()
|
.parseAs<List<GithubRelease>>()
|
||||||
.let {
|
.let { githubReleases ->
|
||||||
val releases = it.take(10)
|
val releases = githubReleases.take(10).filter { isNewVersion(it.version) }
|
||||||
// Check if any of the latest versions are newer than the current version
|
// Check if any of the latest versions are newer than the current version
|
||||||
val release = releases.find { release -> isNewVersion(release.version) }
|
val release = releases
|
||||||
|
.maxWithOrNull { r1, r2 ->
|
||||||
|
when {
|
||||||
|
r1.version == r2.version -> 0
|
||||||
|
isNewVersion(r2.version, r1.version) -> -1
|
||||||
|
else -> 1
|
||||||
|
}
|
||||||
|
}
|
||||||
preferences.lastAppCheck().set(Date().time)
|
preferences.lastAppCheck().set(Date().time)
|
||||||
|
|
||||||
if (release != null) {
|
if (release != null) {
|
||||||
|
@ -72,10 +79,10 @@ class AppUpdateChecker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isNewVersion(versionTag: String): Boolean {
|
private fun isNewVersion(versionTag: String, currentVersion: String = BuildConfig.VERSION_NAME): Boolean {
|
||||||
// Removes prefixes like "r" or "v"
|
// Removes prefixes like "r" or "v"
|
||||||
val newVersion = versionTag.replace("[^\\d.-]".toRegex(), "")
|
val newVersion = versionTag.replace("[^\\d.-]".toRegex(), "")
|
||||||
val oldVersion = BuildConfig.VERSION_NAME.replace("[^\\d.-]".toRegex(), "")
|
val oldVersion = currentVersion.replace("[^\\d.-]".toRegex(), "")
|
||||||
val newPreReleaseVer = newVersion.split("-")
|
val newPreReleaseVer = newVersion.split("-")
|
||||||
val oldPreReleaseVer = oldVersion.split("-")
|
val oldPreReleaseVer = oldVersion.split("-")
|
||||||
val newSemVer = newPreReleaseVer.first().split(".").map { it.toInt() }
|
val newSemVer = newPreReleaseVer.first().split(".").map { it.toInt() }
|
||||||
|
@ -84,11 +91,15 @@ class AppUpdateChecker {
|
||||||
oldSemVer.mapIndexed { index, i ->
|
oldSemVer.mapIndexed { index, i ->
|
||||||
if (newSemVer.getOrElse(index) { i } > i) {
|
if (newSemVer.getOrElse(index) { i } > i) {
|
||||||
return true
|
return true
|
||||||
|
} else if (newSemVer.getOrElse(index) { i } < i) {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// For cases of extreme patch versions (new: 1.2.3.1 vs old: 1.2.3, return true)
|
// For cases of extreme patch versions (new: 1.2.3.1 vs old: 1.2.3, return true)
|
||||||
return if (newSemVer.size > oldSemVer.size) {
|
return if (newSemVer.size > oldSemVer.size) {
|
||||||
true
|
true
|
||||||
|
} else if (newSemVer.size < oldSemVer.size) {
|
||||||
|
false
|
||||||
} else {
|
} else {
|
||||||
// If the version numbers match, check the beta versions
|
// If the version numbers match, check the beta versions
|
||||||
val newPreVersion =
|
val newPreVersion =
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue