Keep reacting to live changes in dashboard after a force refresh (#1594)

Co-authored-by: Rafał Borcz <RafalBO99@outlook.com>
This commit is contained in:
Michael 2022-02-02 03:44:14 +01:00 committed by GitHub
parent 923af85d18
commit 96ee4bd9e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -104,7 +104,7 @@ class DashboardPresenter @Inject constructor(
forceRefresh: Boolean forceRefresh: Boolean
) = dashboardTilesToLoad.filter { newItemToLoad -> ) = dashboardTilesToLoad.filter { newItemToLoad ->
dashboardLoadedTiles.none { it == newItemToLoad } || forceRefresh dashboardLoadedTiles.none { it == newItemToLoad } || forceRefresh
|| newItemToLoad == DashboardItem.Tile.ADMIN_MESSAGE || newItemToLoad == DashboardItem.Tile.ADMIN_MESSAGE
} }
private fun removeUnselectedTiles(tilesToLoad: List<DashboardItem.Tile>) { private fun removeUnselectedTiles(tilesToLoad: List<DashboardItem.Tile>) {
@ -254,7 +254,8 @@ class DashboardPresenter @Inject constructor(
attendanceFlow attendanceFlow
) { luckyNumberResource, messageResource, attendanceResource -> ) { luckyNumberResource, messageResource, attendanceResource ->
val error = val error =
luckyNumberResource?.error ?: messageResource?.error ?: attendanceResource?.error luckyNumberResource?.error ?: messageResource?.error
?: attendanceResource?.error
error?.let { throw it } error?.let { throw it }
val luckyNumber = luckyNumberResource?.data?.luckyNumber val luckyNumber = luckyNumberResource?.data?.luckyNumber
@ -295,7 +296,7 @@ class DashboardPresenter @Inject constructor(
) )
errorHandler.dispatch(it) errorHandler.dispatch(it)
} }
.launch("horizontal_group") .launch("horizontal_group ${if (forceRefresh) "-forceRefresh" else ""}")
} }
private fun loadGrades(student: Student, forceRefresh: Boolean) { private fun loadGrades(student: Student, forceRefresh: Boolean) {
@ -356,7 +357,7 @@ class DashboardPresenter @Inject constructor(
updateData(DashboardItem.Grades(error = it.error), forceRefresh) updateData(DashboardItem.Grades(error = it.error), forceRefresh)
} }
} }
}.launch("dashboard_grades") }.launchWithUniqueRefreshJob("dashboard_grades", forceRefresh)
} }
private fun loadLessons(student: Student, forceRefresh: Boolean) { private fun loadLessons(student: Student, forceRefresh: Boolean) {
@ -400,7 +401,7 @@ class DashboardPresenter @Inject constructor(
) )
} }
} }
}.launch("dashboard_lessons") }.launchWithUniqueRefreshJob("dashboard_lessons", forceRefresh)
} }
private fun loadHomework(student: Student, forceRefresh: Boolean) { private fun loadHomework(student: Student, forceRefresh: Boolean) {
@ -447,7 +448,7 @@ class DashboardPresenter @Inject constructor(
updateData(DashboardItem.Homework(error = it.error), forceRefresh) updateData(DashboardItem.Homework(error = it.error), forceRefresh)
} }
} }
}.launch("dashboard_homework") }.launchWithUniqueRefreshJob("dashboard_homework", forceRefresh)
} }
private fun loadSchoolAnnouncements(student: Student, forceRefresh: Boolean) { private fun loadSchoolAnnouncements(student: Student, forceRefresh: Boolean) {
@ -477,7 +478,7 @@ class DashboardPresenter @Inject constructor(
updateData(DashboardItem.Announcements(error = it.error), forceRefresh) updateData(DashboardItem.Announcements(error = it.error), forceRefresh)
} }
} }
}.launch("dashboard_announcements") }.launchWithUniqueRefreshJob("dashboard_announcements", forceRefresh)
} }
private fun loadExams(student: Student, forceRefresh: Boolean) { private fun loadExams(student: Student, forceRefresh: Boolean) {
@ -521,7 +522,7 @@ class DashboardPresenter @Inject constructor(
updateData(DashboardItem.Exams(error = it.error), forceRefresh) updateData(DashboardItem.Exams(error = it.error), forceRefresh)
} }
} }
}.launch("dashboard_exams") }.launchWithUniqueRefreshJob("dashboard_exams", forceRefresh)
} }
private fun loadConferences(student: Student, forceRefresh: Boolean) { private fun loadConferences(student: Student, forceRefresh: Boolean) {
@ -558,7 +559,7 @@ class DashboardPresenter @Inject constructor(
updateData(DashboardItem.Conferences(error = it.error), forceRefresh) updateData(DashboardItem.Conferences(error = it.error), forceRefresh)
} }
} }
}.launch("dashboard_conferences") }.launchWithUniqueRefreshJob("dashboard_conferences", forceRefresh)
} }
private fun loadAdminMessage(student: Student, forceRefresh: Boolean) { private fun loadAdminMessage(student: Student, forceRefresh: Boolean) {
@ -594,7 +595,7 @@ class DashboardPresenter @Inject constructor(
} }
} }
} }
.launch("dashboard_admin_messages") .launchWithUniqueRefreshJob("dashboard_admin_messages", forceRefresh)
} }
private fun updateData(dashboardItem: DashboardItem, forceRefresh: Boolean) { private fun updateData(dashboardItem: DashboardItem, forceRefresh: Boolean) {
@ -733,4 +734,18 @@ class DashboardPresenter @Inject constructor(
dashboardItemsPosition?.getOrDefault(tile.type, defaultPosition) ?: tile.type.ordinal dashboardItemsPosition?.getOrDefault(tile.type, defaultPosition) ?: tile.type.ordinal
} }
} }
}
private fun Flow<Resource<*>>.launchWithUniqueRefreshJob(name: String, forceRefresh: Boolean) {
val jobName = if (forceRefresh) "$name-forceRefresh" else name
if (forceRefresh) {
onEach {
if (it.status == Status.SUCCESS) {
cancelJobs(jobName)
}
}.launch(jobName)
} else {
launch(jobName)
}
}
}