diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-13 18:34:30 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-14 18:51:00 +0000 |
| commit | 8acc061c0bcbb061e85bfe88813e12ab5be42c83 (patch) | |
| tree | da726b9c775b09d367c890733be466f1be33e76b | |
| parent | 2625faf829df6fc768d0edcdfdca237af56dc081 (diff) | |
| download | mullvadvpn-8acc061c0bcbb061e85bfe88813e12ab5be42c83.tar.xz mullvadvpn-8acc061c0bcbb061e85bfe88813e12ab5be42c83.zip | |
Retry fetching expiry if it fails
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt index 86e1b0c95a..24c62bc2c2 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt @@ -1,5 +1,7 @@ package net.mullvad.mullvadvpn.service +import kotlin.math.min +import kotlinx.coroutines.delay import net.mullvad.mullvadvpn.model.GetAccountDataResult import net.mullvad.mullvadvpn.util.JobTracker import org.joda.time.DateTime @@ -29,10 +31,20 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList fun fetchAccountExpiry() { accountNumber?.let { account -> jobTracker.newBackgroundJob("fetch") { - val result = daemon.getAccountData(account) + var retryAttempt = 0 - if (result is GetAccountDataResult.Ok) { - handleNewExpiry(account, result.accountData.expiry) + while (true) { + val result = daemon.getAccountData(account) + + if (result is GetAccountDataResult.Ok) { + handleNewExpiry(account, result.accountData.expiry) + break + } else if (result is GetAccountDataResult.InvalidAccount) { + break + } + + retryAttempt += 1 + delay(calculateRetryFetchDelay(retryAttempt)) } } } @@ -65,4 +77,11 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList private fun notifyChange() { onAccountDataChange?.invoke(accountNumber, accountExpiry) } + + private fun calculateRetryFetchDelay(retryAttempt: Int): Long { + // delay in seconds = 2 ^ retryAttempt capped at 2^13 (8192) + val exponent = min(retryAttempt, 13) + + return (1L shl exponent) * 1000L + } } |
