semantic versioning
This commit is contained in:
parent
d2b059fd6b
commit
9ccda7cfee
1 changed files with 41 additions and 16 deletions
|
@ -15,21 +15,14 @@ import java.io.IOException
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
|
||||||
// check network connection
|
// check network connection
|
||||||
fun isConnected(): Boolean {
|
fun isConnected(): Boolean {
|
||||||
val connMgr = MainApp.instance().applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
val connMgr = MainApp.instance().applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
return connMgr.activeNetworkInfo?.isConnected ?: false
|
return connMgr.activeNetworkInfo?.isConnected ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun findVersion(file :String?): String? {
|
|
||||||
val regex = "(.*)version(.*)\"(((\\d+)\\.)+(\\d+))\"(.*)".toRegex()
|
|
||||||
return file?.lines()?.filter { regex.matches(it) }?.mapNotNull { regex.matchEntire(it)?.groupValues?.getOrNull(3) }?.firstOrNull()
|
|
||||||
}
|
|
||||||
|
|
||||||
private val log = LoggerFactory.getLogger(L.CORE)
|
private val log = LoggerFactory.getLogger(L.CORE)
|
||||||
|
|
||||||
|
|
||||||
fun triggerCheckVersion() {
|
fun triggerCheckVersion() {
|
||||||
|
|
||||||
if (!SP.contains(R.string.key_last_time_this_version_detected)) {
|
if (!SP.contains(R.string.key_last_time_this_version_detected)) {
|
||||||
|
@ -56,13 +49,34 @@ private fun checkVersion() = if (isConnected()) {
|
||||||
log.debug("Github master version no checked. No connectivity")
|
log.debug("Github master version no checked. No connectivity")
|
||||||
|
|
||||||
fun compareWithCurrentVersion(newVersion: String?, currentVersion: String) {
|
fun compareWithCurrentVersion(newVersion: String?, currentVersion: String) {
|
||||||
val comparison: Int? = newVersion?.versionStrip()?.compareTo(currentVersion.versionStrip())
|
|
||||||
when {
|
val newVersionElements = newVersion.toNumberList()
|
||||||
comparison == null -> onVersionNotDetectable()
|
val currentVersionElements = currentVersion.toNumberList()
|
||||||
comparison == 0 -> onSameVersionDetected()
|
|
||||||
comparison > 0 -> onNewVersionDetected(currentVersion = currentVersion, newVersion = newVersion)
|
if (newVersionElements == null || newVersionElements.isEmpty()) {
|
||||||
else -> onOlderVersionDetected()
|
onVersionNotDetectable()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (currentVersionElements == null || currentVersionElements.isEmpty()) {
|
||||||
|
// current version scrambled?!
|
||||||
|
onNewVersionDetected(currentVersion, newVersion)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
newVersionElements.take(3).forEachIndexed { i, newElem ->
|
||||||
|
val currElem: Int = currentVersionElements.getOrNull(i)
|
||||||
|
?: return onNewVersionDetected(currentVersion, newVersion)
|
||||||
|
|
||||||
|
(newElem - currElem).let {
|
||||||
|
when {
|
||||||
|
it > 0 -> return onNewVersionDetected(currentVersion, newVersion)
|
||||||
|
it < 0 -> return onOlderVersionDetected()
|
||||||
|
it == 0 -> Unit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onSameVersionDetected()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onOlderVersionDetected() {
|
private fun onOlderVersionDetected() {
|
||||||
|
@ -75,7 +89,7 @@ fun onSameVersionDetected() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onVersionNotDetectable() {
|
fun onVersionNotDetectable() {
|
||||||
log.debug("fetch failed, ignore and smartcast to non-null")
|
log.debug("fetch failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onNewVersionDetected(currentVersion: String, newVersion: String?) {
|
fun onNewVersionDetected(currentVersion: String, newVersion: String?) {
|
||||||
|
@ -88,14 +102,25 @@ fun onNewVersionDetected(currentVersion: String, newVersion: String?) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated(replaceWith = ReplaceWith("numericVersionPart()"), message = "Will not work if RCs have another index number in it.")
|
||||||
fun String.versionStrip() = this.mapNotNull {
|
fun String.versionStrip() = this.mapNotNull {
|
||||||
when (it) {
|
when (it) {
|
||||||
in '0'..'9' -> it
|
in '0'..'9' -> it
|
||||||
'.' -> it
|
'.' -> it
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}.joinToString(separator = "")
|
}.joinToString(separator = "")
|
||||||
|
|
||||||
|
fun String.numericVersionPart(): String =
|
||||||
|
"(((\\d+)\\.)+(\\d+))(\\D(.*))?".toRegex().matchEntire(this)?.groupValues?.getOrNull(1) ?: ""
|
||||||
|
|
||||||
|
fun String?.toNumberList() =
|
||||||
|
this?.numericVersionPart().takeIf { !it.isNullOrBlank() }?.split(".")?.map { it.toInt() }
|
||||||
|
|
||||||
|
fun findVersion(file: String?): String? {
|
||||||
|
val regex = "(.*)version(.*)\"(((\\d+)\\.)+(\\d+))\"(.*)".toRegex()
|
||||||
|
return file?.lines()?.filter { regex.matches(it) }?.mapNotNull { regex.matchEntire(it)?.groupValues?.getOrNull(3) }?.firstOrNull()
|
||||||
|
}
|
||||||
|
|
||||||
val CHECK_EVERY = TimeUnit.DAYS.toMillis(1)
|
val CHECK_EVERY = TimeUnit.DAYS.toMillis(1)
|
||||||
val WARN_EVERY = TimeUnit.DAYS.toMillis(1)
|
val WARN_EVERY = TimeUnit.DAYS.toMillis(1)
|
||||||
|
|
Loading…
Reference in a new issue