forked from github/wulkanowy-mirror
Remove admin message offline first cache (#1735)
This commit is contained in:
parent
5e96917508
commit
684c258e2d
@ -4,7 +4,6 @@ import io.github.wulkanowy.data.api.AdminMessageService
|
|||||||
import io.github.wulkanowy.data.db.dao.AdminMessageDao
|
import io.github.wulkanowy.data.db.dao.AdminMessageDao
|
||||||
import io.github.wulkanowy.data.db.entities.Student
|
import io.github.wulkanowy.data.db.entities.Student
|
||||||
import io.github.wulkanowy.utils.AppInfo
|
import io.github.wulkanowy.utils.AppInfo
|
||||||
import io.github.wulkanowy.utils.AutoRefreshHelper
|
|
||||||
import io.github.wulkanowy.utils.networkBoundResource
|
import io.github.wulkanowy.utils.networkBoundResource
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -14,23 +13,17 @@ import javax.inject.Singleton
|
|||||||
class AdminMessageRepository @Inject constructor(
|
class AdminMessageRepository @Inject constructor(
|
||||||
private val adminMessageService: AdminMessageService,
|
private val adminMessageService: AdminMessageService,
|
||||||
private val adminMessageDao: AdminMessageDao,
|
private val adminMessageDao: AdminMessageDao,
|
||||||
private val appInfo: AppInfo,
|
private val appInfo: AppInfo
|
||||||
private val refreshHelper: AutoRefreshHelper,
|
|
||||||
) {
|
) {
|
||||||
private val saveFetchResultMutex = Mutex()
|
private val saveFetchResultMutex = Mutex()
|
||||||
|
|
||||||
private val cacheKey = "admin_messages"
|
suspend fun getAdminMessages(student: Student) = networkBoundResource(
|
||||||
|
|
||||||
suspend fun getAdminMessages(student: Student, forceRefresh: Boolean) = networkBoundResource(
|
|
||||||
mutex = saveFetchResultMutex,
|
mutex = saveFetchResultMutex,
|
||||||
query = { adminMessageDao.loadAll() },
|
query = { adminMessageDao.loadAll() },
|
||||||
fetch = { adminMessageService.getAdminMessages() },
|
fetch = { adminMessageService.getAdminMessages() },
|
||||||
shouldFetch = {
|
shouldFetch = { true },
|
||||||
refreshHelper.shouldBeRefreshed(cacheKey) || forceRefresh
|
|
||||||
},
|
|
||||||
saveFetchResult = { oldItems, newItems ->
|
saveFetchResult = { oldItems, newItems ->
|
||||||
adminMessageDao.removeOldAndSaveNew(oldItems, newItems)
|
adminMessageDao.removeOldAndSaveNew(oldItems, newItems)
|
||||||
refreshHelper.updateLastRefreshTimestamp(cacheKey)
|
|
||||||
},
|
},
|
||||||
showSavedOnLoading = false,
|
showSavedOnLoading = false,
|
||||||
mapResult = { adminMessages ->
|
mapResult = { adminMessages ->
|
||||||
|
@ -6,33 +6,13 @@ import io.github.wulkanowy.data.db.entities.AdminMessage
|
|||||||
import io.github.wulkanowy.data.db.entities.LuckyNumber
|
import io.github.wulkanowy.data.db.entities.LuckyNumber
|
||||||
import io.github.wulkanowy.data.db.entities.Student
|
import io.github.wulkanowy.data.db.entities.Student
|
||||||
import io.github.wulkanowy.data.enums.MessageFolder
|
import io.github.wulkanowy.data.enums.MessageFolder
|
||||||
import io.github.wulkanowy.data.repositories.AdminMessageRepository
|
import io.github.wulkanowy.data.repositories.*
|
||||||
import io.github.wulkanowy.data.repositories.AttendanceSummaryRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.ConferenceRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.ExamRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.GradeRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.HomeworkRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.LuckyNumberRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.MessageRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.SchoolAnnouncementRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.SemesterRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.StudentRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.TimetableRepository
|
|
||||||
import io.github.wulkanowy.ui.base.BasePresenter
|
import io.github.wulkanowy.ui.base.BasePresenter
|
||||||
import io.github.wulkanowy.ui.base.ErrorHandler
|
import io.github.wulkanowy.ui.base.ErrorHandler
|
||||||
import io.github.wulkanowy.utils.calculatePercentage
|
import io.github.wulkanowy.utils.calculatePercentage
|
||||||
import io.github.wulkanowy.utils.flowWithResourceIn
|
import io.github.wulkanowy.utils.flowWithResourceIn
|
||||||
import io.github.wulkanowy.utils.nextOrSameSchoolDay
|
import io.github.wulkanowy.utils.nextOrSameSchoolDay
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.*
|
||||||
import kotlinx.coroutines.flow.combine
|
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
|
||||||
import kotlinx.coroutines.flow.emitAll
|
|
||||||
import kotlinx.coroutines.flow.filterNot
|
|
||||||
import kotlinx.coroutines.flow.flow
|
|
||||||
import kotlinx.coroutines.flow.flowOf
|
|
||||||
import kotlinx.coroutines.flow.map
|
|
||||||
import kotlinx.coroutines.flow.onEach
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
@ -582,7 +562,7 @@ class DashboardPresenter @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun loadAdminMessage(student: Student, forceRefresh: Boolean) {
|
private fun loadAdminMessage(student: Student, forceRefresh: Boolean) {
|
||||||
flowWithResourceIn { adminMessageRepository.getAdminMessages(student, forceRefresh) }
|
flowWithResourceIn { adminMessageRepository.getAdminMessages(student) }
|
||||||
.map {
|
.map {
|
||||||
val isDismissed = it.data?.id in preferencesRepository.dismissedAdminMessageIds
|
val isDismissed = it.data?.id in preferencesRepository.dismissedAdminMessageIds
|
||||||
it.copy(data = it.data.takeUnless { isDismissed })
|
it.copy(data = it.data.takeUnless { isDismissed })
|
||||||
|
Loading…
x
Reference in New Issue
Block a user