Add in-app app update check

This commit is contained in:
arkon
2021-08-13 18:18:53 -04:00
parent 96a64c7bd2
commit f23f22ab01
8 changed files with 97 additions and 68 deletions

View File

@@ -269,6 +269,7 @@ class PreferencesHelper(val context: Context) {
fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0)
fun lastAppCheck() = flowPrefs.getLong("last_app_check", 0)
fun lastExtCheck() = flowPrefs.getLong("last_ext_check", 0)
fun searchPinnedSourcesOnly() = prefs.getBoolean(Keys.searchPinnedSourcesOnly, false)

View File

@@ -1,16 +1,19 @@
package eu.kanade.tachiyomi.data.updater
import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.NetworkHelper
import eu.kanade.tachiyomi.network.await
import eu.kanade.tachiyomi.network.parseAs
import eu.kanade.tachiyomi.util.lang.withIOContext
import uy.kohesive.injekt.injectLazy
import java.util.Date
class GithubUpdateChecker {
class AppUpdateChecker {
private val networkService: NetworkHelper by injectLazy()
private val preferences: PreferencesHelper by injectLazy()
private val repo: String by lazy {
if (BuildConfig.DEBUG) {
@@ -20,18 +23,20 @@ class GithubUpdateChecker {
}
}
suspend fun checkForUpdate(): GithubUpdateResult {
suspend fun checkForUpdate(): AppUpdateResult {
return withIOContext {
networkService.client
.newCall(GET("https://api.github.com/repos/$repo/releases/latest"))
.await()
.parseAs<GithubRelease>()
.let {
preferences.lastAppCheck().set(Date().time)
// Check if latest version is different from current version
if (isNewVersion(it.version)) {
GithubUpdateResult.NewUpdate(it)
AppUpdateResult.NewUpdate(it)
} else {
GithubUpdateResult.NoNewUpdate
AppUpdateResult.NoNewUpdate
}
}
}

View File

@@ -0,0 +1,6 @@
package eu.kanade.tachiyomi.data.updater
sealed class AppUpdateResult {
class NewUpdate(val release: GithubRelease) : AppUpdateResult()
object NoNewUpdate : AppUpdateResult()
}

View File

@@ -1,6 +0,0 @@
package eu.kanade.tachiyomi.data.updater
sealed class GithubUpdateResult {
class NewUpdate(val release: GithubRelease) : GithubUpdateResult()
object NoNewUpdate : GithubUpdateResult()
}

View File

@@ -16,9 +16,9 @@ class UpdaterJob(private val context: Context, workerParams: WorkerParameters) :
override fun doWork() = runBlocking {
try {
val result = GithubUpdateChecker().checkForUpdate()
val result = AppUpdateChecker().checkForUpdate()
if (result is GithubUpdateResult.NewUpdate) {
if (result is AppUpdateResult.NewUpdate) {
UpdaterNotifier(context).promptUpdate(result.release.getDownloadLink())
}
Result.success()