From 4e639e5c177a1b123d4a715cc56926137929d6ff Mon Sep 17 00:00:00 2001 From: Mygod Date: Sun, 31 Oct 2021 17:00:43 -0400 Subject: [PATCH] More fixes for update checker --- .../be/mygod/vpnhotspot/util/UpdateChecker.kt | 17 ++++++--- .../be/mygod/vpnhotspot/util/UpdateChecker.kt | 36 ++++++++++--------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/mobile/src/freedom/java/be/mygod/vpnhotspot/util/UpdateChecker.kt b/mobile/src/freedom/java/be/mygod/vpnhotspot/util/UpdateChecker.kt index 0d48b35f..5e4b65ee 100644 --- a/mobile/src/freedom/java/be/mygod/vpnhotspot/util/UpdateChecker.kt +++ b/mobile/src/freedom/java/be/mygod/vpnhotspot/util/UpdateChecker.kt @@ -16,6 +16,7 @@ import java.time.Instant import java.util.concurrent.CancellationException import java.util.concurrent.TimeUnit import kotlin.math.max +import kotlin.math.min object UpdateChecker { private const val KEY_LAST_FETCHED = "update.lastFetched" @@ -49,18 +50,26 @@ object UpdateChecker { private val myVer = BuildConfig.VERSION_NAME.toSemVer() private fun findUpdate(response: JSONArray): GitHubUpdate? { + var latest: String? = null + var latestVer = myVer + var earliest = Long.MAX_VALUE for (i in 0 until response.length()) { val obj = response.getJSONObject(i) val name = obj.getString("name") - try { - if (name.toSemVer() <= myVer) continue + val semver = try { + name.toSemVer() } catch (e: IllegalArgumentException) { Timber.w(e) continue } - return GitHubUpdate(name, Instant.parse(obj.getString("published_at")).toEpochMilli()) + if (semver <= myVer) continue + if (semver > latestVer) { + latest = name + latestVer = semver + } + earliest = min(earliest, Instant.parse(obj.getString("published_at")).toEpochMilli()) } - return null + return latest?.let { GitHubUpdate(it, earliest) } } fun check() = flow { emit(app.pref.getString(KEY_VERSION, null)?.let { diff --git a/mobile/src/google/java/be/mygod/vpnhotspot/util/UpdateChecker.kt b/mobile/src/google/java/be/mygod/vpnhotspot/util/UpdateChecker.kt index 7b39860a..bf63a8ef 100644 --- a/mobile/src/google/java/be/mygod/vpnhotspot/util/UpdateChecker.kt +++ b/mobile/src/google/java/be/mygod/vpnhotspot/util/UpdateChecker.kt @@ -10,6 +10,7 @@ import com.google.android.play.core.install.model.InstallStatus import com.google.android.play.core.ktx.AppUpdateResult import com.google.android.play.core.ktx.requestUpdateFlow import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import timber.log.Timber @@ -44,23 +45,26 @@ object UpdateChecker { private val manager by lazy { AppUpdateManagerFactory.create(app) } - fun check() = try { - manager.requestUpdateFlow().map { result -> - when (result) { - is AppUpdateResult.NotAvailable -> null - is AppUpdateResult.Available -> UpdateAvailable(result) - is AppUpdateResult.InProgress -> { - if (result.installState.installStatus() == InstallStatus.CANCELED) null else UpdateDownloading(result) - } - is AppUpdateResult.Downloaded -> UpdateDownloaded(result) + fun check() = manager.requestUpdateFlow().catch { e -> + when (e) { + is InstallException -> { + app.logEvent("InstallErrorCode") { param("errorCode", e.errorCode.toLong()) } + throw AppUpdate.IgnoredException(e) + } + is RuntimeException -> if (e.message == "Failed to bind to the service.") { + app.logEvent("UpdateBindFailure") + throw AppUpdate.IgnoredException(e) } } - } catch (e: InstallException) { - app.logEvent("InstallErrorCode") { param("errorCode", e.errorCode.toLong()) } - throw AppUpdate.IgnoredException(e) - } catch (e: RuntimeException) { - if (e.message != "Failed to bind to the service.") throw e - app.logEvent("UpdateBindFailure") - throw AppUpdate.IgnoredException(e) + throw e + }.map { result -> + when (result) { + is AppUpdateResult.NotAvailable -> null + is AppUpdateResult.Available -> UpdateAvailable(result) + is AppUpdateResult.InProgress -> { + if (result.installState.installStatus() == InstallStatus.CANCELED) null else UpdateDownloading(result) + } + is AppUpdateResult.Downloaded -> UpdateDownloaded(result) + } } }