Check for app and extension update on every cold start (#3658)
This commit is contained in:
@@ -1,34 +1,14 @@
|
||||
package tachiyomi.domain.release.interactor
|
||||
|
||||
import tachiyomi.core.common.preference.Preference
|
||||
import tachiyomi.core.common.preference.PreferenceStore
|
||||
import tachiyomi.domain.release.model.Release
|
||||
import tachiyomi.domain.release.service.ReleaseService
|
||||
import java.time.Instant
|
||||
import java.time.temporal.ChronoUnit
|
||||
|
||||
class GetApplicationRelease(
|
||||
private val service: ReleaseService,
|
||||
private val preferenceStore: PreferenceStore,
|
||||
) {
|
||||
|
||||
private val lastChecked: Preference<Long> by lazy {
|
||||
preferenceStore.getLong(Preference.appStateKey("last_app_check"), 0)
|
||||
}
|
||||
|
||||
suspend fun await(arguments: Arguments): Result {
|
||||
val now = Instant.now()
|
||||
|
||||
// Limit checks to once every 3 days at most
|
||||
val nextCheckTime = Instant.ofEpochMilli(lastChecked.get()).plus(3, ChronoUnit.DAYS)
|
||||
if (!arguments.forceCheck && now.isBefore(nextCheckTime)) {
|
||||
return Result.NoNewUpdate
|
||||
}
|
||||
|
||||
val release = service.latest(arguments) ?: return Result.NoNewUpdate
|
||||
|
||||
lastChecked.set(now.toEpochMilli())
|
||||
|
||||
// Check if latest version is different from current version
|
||||
val isNewVersion = isNewVersion(
|
||||
arguments.isPreview,
|
||||
|
||||
+1
-47
@@ -2,39 +2,27 @@ package tachiyomi.domain.release.interactor
|
||||
|
||||
import io.kotest.matchers.shouldBe
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import tachiyomi.core.common.preference.Preference
|
||||
import tachiyomi.core.common.preference.PreferenceStore
|
||||
import tachiyomi.domain.release.model.Release
|
||||
import tachiyomi.domain.release.service.ReleaseService
|
||||
import java.time.Instant
|
||||
|
||||
class GetApplicationReleaseTest {
|
||||
|
||||
private lateinit var getApplicationRelease: GetApplicationRelease
|
||||
private lateinit var releaseService: ReleaseService
|
||||
private lateinit var preference: Preference<Long>
|
||||
|
||||
@BeforeEach
|
||||
fun beforeEach() {
|
||||
val preferenceStore = mockk<PreferenceStore>()
|
||||
preference = mockk()
|
||||
every { preferenceStore.getLong(any(), any()) } returns preference
|
||||
releaseService = mockk()
|
||||
|
||||
getApplicationRelease = GetApplicationRelease(releaseService, preferenceStore)
|
||||
getApplicationRelease = GetApplicationRelease(releaseService)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `When has update but is preview expect new update`() = runTest {
|
||||
every { preference.get() } returns 0
|
||||
every { preference.set(any()) }.answers { }
|
||||
|
||||
val release = Release(
|
||||
"r2000",
|
||||
"info",
|
||||
@@ -61,9 +49,6 @@ class GetApplicationReleaseTest {
|
||||
|
||||
@Test
|
||||
fun `When has update expect new update`() = runTest {
|
||||
every { preference.get() } returns 0
|
||||
every { preference.set(any()) }.answers { }
|
||||
|
||||
val release = Release(
|
||||
"v2.0.0",
|
||||
"info",
|
||||
@@ -90,9 +75,6 @@ class GetApplicationReleaseTest {
|
||||
|
||||
@Test
|
||||
fun `When has no update expect no new update`() = runTest {
|
||||
every { preference.get() } returns 0
|
||||
every { preference.set(any()) }.answers { }
|
||||
|
||||
val release = Release(
|
||||
"v1.0.0",
|
||||
"info",
|
||||
@@ -114,32 +96,4 @@ class GetApplicationReleaseTest {
|
||||
|
||||
result shouldBe GetApplicationRelease.Result.NoNewUpdate
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `When now is before three days expect no new update`() = runTest {
|
||||
every { preference.get() } returns Instant.now().toEpochMilli()
|
||||
every { preference.set(any()) }.answers { }
|
||||
|
||||
val release = Release(
|
||||
"v1.0.0",
|
||||
"info",
|
||||
"http://example.com/release_link",
|
||||
"http://example.com/release_link.apk",
|
||||
)
|
||||
|
||||
coEvery { releaseService.latest(any()) } returns release
|
||||
|
||||
val result = getApplicationRelease.await(
|
||||
GetApplicationRelease.Arguments(
|
||||
isFoss = false,
|
||||
isPreview = false,
|
||||
commitCount = 0,
|
||||
versionName = "v2.0.0",
|
||||
repository = "test",
|
||||
),
|
||||
)
|
||||
|
||||
coVerify(exactly = 0) { releaseService.latest(any()) }
|
||||
result shouldBe GetApplicationRelease.Result.NoNewUpdate
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user