@@ -22,6 +22,7 @@ import org.openedx.core.data.storage.CorePreferences
2222import org.openedx.core.domain.model.CourseAccessError
2323import org.openedx.core.domain.model.CourseDatesCalendarSync
2424import org.openedx.core.domain.model.CourseEnrollmentDetails
25+ import org.openedx.core.domain.model.CourseStructure
2526import org.openedx.core.exception.NoCachedDataException
2627import org.openedx.core.extension.isFalse
2728import org.openedx.core.extension.isTrue
@@ -39,6 +40,7 @@ import org.openedx.core.system.notifier.RefreshDates
3940import org.openedx.core.system.notifier.RefreshDiscussions
4041import org.openedx.core.ui.Result
4142import org.openedx.core.ui.asResult
43+ import org.openedx.core.ui.isLoading
4244import org.openedx.core.worker.CalendarSyncScheduler
4345import org.openedx.course.DatesShiftedSnackBar
4446import org.openedx.course.domain.interactor.CourseInteractor
@@ -175,61 +177,59 @@ class CourseContainerViewModel(
175177 courseFlow.take(1 ).combine(enrollmentFlow.take(1 )) { course, enrollment ->
176178 course to enrollment
177179 }.asResult().collect { result ->
178- when (result) {
179- is Result .Loading -> _showProgress .value = true
180- is Result .Success -> {
181- result.data.let { (_, enrollment) ->
182- processCourseData(enrollment)
183- }
180+ _showProgress .value = result.isLoading
181+ if (result is Result .Success ) {
182+ result.data.let { (structure, enrollment) ->
183+ processCourseData(structure, enrollment)
184184 }
185- is Result .Error -> {
186- _showProgress .value = false
187- result.exception?.let { e ->
188- e.printStackTrace()
189- if (isNetworkRelatedError(e)) {
190- _errorMessage .value = resourceManager.getString(CoreR .string.core_error_no_connection)
191- } else {
192- _courseAccessStatus .value = CourseAccessError .UNKNOWN
193- }
194- } ? : run {
185+ }
186+ if (result is Result .Error ) {
187+ result.exception?.let { e ->
188+ e.printStackTrace()
189+ if (isNetworkRelatedError(e)) {
190+ _errorMessage .value =
191+ resourceManager.getString(CoreR .string.core_error_no_connection)
192+ } else {
195193 _courseAccessStatus .value = CourseAccessError .UNKNOWN
196194 }
195+ } ? : run {
196+ _courseAccessStatus .value = CourseAccessError .UNKNOWN
197197 }
198198 }
199199 }
200200 }
201201 }
202202
203- private suspend fun processCourseData (enrollment : CourseEnrollmentDetails ) {
204- _courseDetails = enrollment
205- _showProgress .value = false
206- _courseDetails ?.let { courseDetails ->
207- courseName = courseDetails.courseInfoOverview.name
208- loadCourseImage(courseDetails.courseInfoOverview.media?.image?.large)
209- if (courseDetails.hasAccess.isFalse()) {
210- _dataReady .value = false
211- if (courseDetails.isAuditAccessExpired) {
212- _courseAccessStatus .value =
213- CourseAccessError .AUDIT_EXPIRED_NOT_UPGRADABLE
214- } else if (courseDetails.courseInfoOverview.isStarted.not ()) {
215- _courseAccessStatus .value = CourseAccessError .NOT_YET_STARTED
216- } else {
217- _courseAccessStatus .value = CourseAccessError .UNKNOWN
218- }
219- } else {
220- _courseAccessStatus .value = CourseAccessError .NONE
221- _isNavigationEnabled .value = true
222- _calendarSyncUIState .update { state ->
223- state.copy(isCalendarSyncEnabled = isCalendarSyncEnabled())
224- }
225- if (resumeBlockId.isNotEmpty()) {
203+ private fun processCourseData (
204+ courseStructure : CourseStructure ,
205+ courseDetails : CourseEnrollmentDetails
206+ ) {
207+ _courseDetails = courseDetails
208+ courseName = courseDetails.courseInfoOverview.name
209+ val courseImage = courseDetails.courseInfoOverview.media?.image?.large
210+ ? : courseStructure.media?.image?.large
211+ loadCourseImage(courseImage)
212+ if (courseDetails.hasAccess.isFalse()) {
213+ _dataReady .value = false
214+ _courseAccessStatus .value = when {
215+ courseDetails.isAuditAccessExpired -> CourseAccessError .AUDIT_EXPIRED_NOT_UPGRADABLE
216+ courseDetails.courseInfoOverview.isStarted.not () -> CourseAccessError .NOT_YET_STARTED
217+ else -> CourseAccessError .UNKNOWN
218+ }
219+ } else {
220+ _courseAccessStatus .value = CourseAccessError .NONE
221+ _isNavigationEnabled .value = true
222+ _calendarSyncUIState .update { state ->
223+ state.copy(isCalendarSyncEnabled = isCalendarSyncEnabled())
224+ }
225+ if (resumeBlockId.isNotEmpty()) {
226+ // Small delay before sending block open event
227+ viewModelScope.launch {
226228 delay(500L )
227229 courseNotifier.send(CourseOpenBlock (resumeBlockId))
228230 }
229- _dataReady .value = true
230231 }
231- } ? : run {
232- _courseAccessStatus .value = CourseAccessError .UNKNOWN
232+ _dataReady .value = true
233233 }
234234 }
235235
0 commit comments