From 859c6ef154382aa7eaaf542541436563cb8bb24b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Wed, 22 May 2024 20:23:57 +0200 Subject: [PATCH] Add auto refresh to wulkanowy repo --- .../data/repositories/WulkanowyRepository.kt | 16 ++++++++++++++-- .../io/github/wulkanowy/utils/RefreshUtils.kt | 4 ++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt index 5b563b35..d961a638 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt @@ -6,6 +6,8 @@ import io.github.wulkanowy.data.api.services.WulkanowyService import io.github.wulkanowy.data.db.dao.AdminMessageDao import io.github.wulkanowy.data.db.entities.AdminMessage import io.github.wulkanowy.data.networkBoundResource +import io.github.wulkanowy.utils.AutoRefreshHelper +import io.github.wulkanowy.utils.getRefreshKey import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filterNot import kotlinx.coroutines.sync.Mutex @@ -18,10 +20,13 @@ class WulkanowyRepository @Inject constructor( private val wulkanowyService: WulkanowyService, private val adminMessageDao: AdminMessageDao, private val preferencesRepository: PreferencesRepository, + private val refreshHelper: AutoRefreshHelper, ) { private val saveFetchResultMutex = Mutex() + private val cacheKey = "mapping" + fun getAdminMessages(): Flow>> = networkBoundResource( mutex = saveFetchResultMutex, @@ -38,7 +43,11 @@ class WulkanowyRepository @Inject constructor( suspend fun getMapping(): Mapping? { var savedMapping = preferencesRepository.mapping - if (savedMapping == null) { + val isExpired = refreshHelper.shouldBeRefreshed( + key = getRefreshKey(cacheKey) + ) + + if (savedMapping == null || isExpired) { fetchMapping() savedMapping = preferencesRepository.mapping } @@ -49,6 +58,9 @@ class WulkanowyRepository @Inject constructor( suspend fun fetchMapping() { runCatching { wulkanowyService.getMapping() } .onFailure { Timber.e(it) } - .onSuccess { preferencesRepository.mapping = it } + .onSuccess { + preferencesRepository.mapping = it + refreshHelper.updateLastRefreshTimestamp(cacheKey) + } } } diff --git a/app/src/main/java/io/github/wulkanowy/utils/RefreshUtils.kt b/app/src/main/java/io/github/wulkanowy/utils/RefreshUtils.kt index e43654b8..4cce4be4 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/RefreshUtils.kt +++ b/app/src/main/java/io/github/wulkanowy/utils/RefreshUtils.kt @@ -30,6 +30,10 @@ fun getRefreshKey(name: String, mailbox: Mailbox?, folder: MessageFolder): Strin return "${name}_${mailbox?.globalKey ?: "all"}_${folder.id}" } +fun getRefreshKey(name: String): String { + return name +} + class AutoRefreshHelper @Inject constructor( @ApplicationContext private val context: Context, private val sharedPref: SharedPrefProvider