@@ -18,12 +18,12 @@ import { ActivatedRoute, NavigationEnd } from '@angular/router';
1818import { CoreSitesReadingStrategy } from '@services/sites' ;
1919import { makeSingleton , Router } from '@singletons' ;
2020import {
21+ CoreCourseAnyCourseData ,
2122 CoreCourses ,
2223 CoreCourseSearchedData ,
2324} from '../../courses/services/courses' ;
2425import { CoreNavigator } from '@services/navigator' ;
2526import { filter } from 'rxjs/operators' ;
26- import { CorePromiseUtils } from '@static/promise-utils' ;
2727import { CoreLang } from '@services/lang' ;
2828import { CoreCourse } from './course' ;
2929import { CoreCourseModuleDelegate } from './module-delegate' ;
@@ -84,9 +84,30 @@ export class CoreCourseForceLanguageService {
8484 * @returns Language code if forced.
8585 */
8686 protected async getForcedLanguageFromRoute ( source : CoreCourseForceLanguageSource ) : Promise < string | undefined > {
87- let course = CoreNavigator . getRouteParam < CoreCourseSearchedData > ( 'course' ) ;
88- let courseId = course ?. id ?? CoreNavigator . getRouteNumberParam ( 'courseId' ) ;
87+ const course = CoreNavigator . getRouteParam < CoreCourseSearchedData > ( 'course' ) ;
88+ const courseId = course ?. id ?? CoreNavigator . getRouteNumberParam ( 'courseId' ) ;
8989
90+ let cmId : number | undefined ;
91+ if ( source === CoreCourseForceLanguageSource . MODULE ) {
92+ cmId = CoreNavigator . getRouteNumberParam ( 'cmId' ) ;
93+ }
94+
95+ return this . getForcedLanguageFromCourseOrModule ( course , courseId , cmId ) ;
96+ }
97+
98+ /**
99+ * Get forced language from course or module.
100+ *
101+ * @param course Course object.
102+ * @param courseId Course ID.
103+ * @param cmId Course module ID.
104+ * @returns Language code if forced.
105+ */
106+ async getForcedLanguageFromCourseOrModule (
107+ course ?: CoreCourseAnyCourseData ,
108+ courseId ?: number ,
109+ cmId ?: number ,
110+ ) : Promise < string | undefined > {
90111 if ( ! courseId ) {
91112 // Not in a course/module, empty the cache and return.
92113 this . lastNavigationCheck . courseId = 0 ;
@@ -97,8 +118,8 @@ export class CoreCourseForceLanguageService {
97118 return ;
98119 }
99120
100- if ( source === CoreCourseForceLanguageSource . MODULE ) {
101- const modLang = await this . getModuleForcedLangFromRoute ( courseId ) ;
121+ if ( cmId ) {
122+ const modLang = await this . getModuleForcedLang ( courseId , cmId ) ;
102123 if ( modLang ) {
103124 return modLang ;
104125 }
@@ -114,8 +135,8 @@ export class CoreCourseForceLanguageService {
114135 lang = course . lang ;
115136 } else {
116137 try {
117- course = await
118- CoreCourses . getCourseByField ( 'id' , courseId , { readingStrategy : CoreSitesReadingStrategy . PREFER_CACHE } ) ;
138+ course =
139+ await CoreCourses . getCourseByField ( 'id' , courseId , { readingStrategy : CoreSitesReadingStrategy . PREFER_CACHE } ) ;
119140 lang = course . lang ;
120141 } catch {
121142 lang = undefined ;
@@ -133,26 +154,24 @@ export class CoreCourseForceLanguageService {
133154 * Get module forced language from route.
134155 *
135156 * @param courseId Course ID of the module.
157+ * @param cmId Course module ID.
136158 * @returns Module forced language if found.
137159 */
138- protected async getModuleForcedLangFromRoute ( courseId : number ) : Promise < string | undefined > {
139- const cmId = CoreNavigator . getRouteNumberParam ( 'cmId' ) ;
160+ protected async getModuleForcedLang ( courseId : number , cmId : number ) : Promise < string | undefined > {
140161 let lang : string | undefined = undefined ;
141- if ( cmId ) {
142- if ( this . lastNavigationCheck . cmId === cmId ) {
143- lang = this . lastNavigationCheck . cmLang ;
144- } else {
162+
163+ if ( this . lastNavigationCheck . cmId === cmId ) {
164+ lang = this . lastNavigationCheck . cmLang ;
165+ } else {
166+ try {
145167 // TODO: In the future this should directly return the module language instead of checking the delegate.
146168 // See: MDL-87241
147- const module = await CorePromiseUtils . ignoreErrors (
148- CoreCourse . getModule ( cmId , courseId , undefined , true ) ,
149- ) ;
150-
151- if ( module ) {
152- lang = await CorePromiseUtils . ignoreErrors (
153- CoreCourseModuleDelegate . getModuleForcedLang ( module ) ,
154- ) ;
155- }
169+ const module = await CoreCourse . getModule ( cmId , courseId , undefined , true ) ;
170+
171+ lang = await CoreCourseModuleDelegate . getModuleForcedLang ( module ) ;
172+ } catch {
173+ lang = undefined ;
174+ cmId = 0 ;
156175 }
157176 }
158177
0 commit comments