1414
1515import { Component , Injector } from '@angular/core' ;
1616import { CoreAppProvider } from '@providers/app' ;
17+ import { CoreFilepoolProvider } from '@providers/filepool' ;
1718import { CoreSitesProvider } from '@providers/sites' ;
1819import { CoreUtilsProvider } from '@providers/utils/utils' ;
1920import { CoreCourseProvider } from '@core/course/providers/course' ;
@@ -38,10 +39,15 @@ export class AddonModResourceIndexComponent extends CoreCourseModuleMainResource
3839 contentText : string ;
3940 displayDescription = true ;
4041
41- constructor ( injector : Injector , private resourceProvider : AddonModResourceProvider , private courseProvider : CoreCourseProvider ,
42- private appProvider : CoreAppProvider , private prefetchHandler : AddonModResourcePrefetchHandler ,
43- private resourceHelper : AddonModResourceHelperProvider , private sitesProvider : CoreSitesProvider ,
44- private utils : CoreUtilsProvider ) {
42+ constructor ( injector : Injector ,
43+ protected resourceProvider : AddonModResourceProvider ,
44+ protected courseProvider : CoreCourseProvider ,
45+ protected appProvider : CoreAppProvider ,
46+ protected prefetchHandler : AddonModResourcePrefetchHandler ,
47+ protected resourceHelper : AddonModResourceHelperProvider ,
48+ protected sitesProvider : CoreSitesProvider ,
49+ protected utils : CoreUtilsProvider ,
50+ protected filepoolProvider : CoreFilepoolProvider ) {
4551 super ( injector ) ;
4652 }
4753
@@ -104,10 +110,12 @@ export class AddonModResourceIndexComponent extends CoreCourseModuleMainResource
104110
105111 if ( this . resourceHelper . isDisplayedInIframe ( this . module ) ) {
106112 let downloadFailed = false ;
113+ let downloadFailError ;
107114
108- return this . prefetchHandler . download ( this . module , this . courseId ) . catch ( ( ) => {
115+ return this . prefetchHandler . download ( this . module , this . courseId ) . catch ( ( error ) => {
109116 // Mark download as failed but go on since the main files could have been downloaded.
110117 downloadFailed = true ;
118+ downloadFailError = error ;
111119 } ) . then ( ( ) => {
112120 return this . resourceHelper . getIframeSrc ( this . module ) . then ( ( src ) => {
113121 this . mode = 'iframe' ;
@@ -125,7 +133,7 @@ export class AddonModResourceIndexComponent extends CoreCourseModuleMainResource
125133
126134 if ( downloadFailed && this . appProvider . isOnline ( ) ) {
127135 // We could load the main file but the download failed. Show error message.
128- this . domUtils . showErrorModal ( 'core.errordownloadingsomefiles' , true ) ;
136+ this . showErrorDownloadingSomeFiles ( downloadFailError ) ;
129137 }
130138 } ) ;
131139 } ) ;
@@ -147,15 +155,23 @@ export class AddonModResourceIndexComponent extends CoreCourseModuleMainResource
147155
148156 /**
149157 * Opens a file.
158+ *
159+ * @return Promise resolved when done.
150160 */
151- open ( ) : void {
152- this . prefetchHandler . isDownloadable ( this . module , this . courseId ) . then ( ( downloadable ) => {
161+ async open ( ) : Promise < void > {
162+ let downloadable = await this . prefetchHandler . isDownloadable ( this . module , this . courseId ) ;
163+
164+ if ( downloadable ) {
165+ // Check if the main file is downloadle.
166+ // This isn't done in "isDownloadable" to prevent extra WS calls in the course page.
167+ downloadable = await this . resourceHelper . isMainFileDownloadable ( this . module ) ;
168+
153169 if ( downloadable ) {
154- this . resourceHelper . openModuleFile ( this . module , this . courseId ) ;
155- } else {
156- // The resource cannot be downloaded, open the activity in browser.
157- return this . sitesProvider . getCurrentSite ( ) . openInBrowserWithAutoLoginIfSameSite ( this . module . url ) ;
170+ return this . resourceHelper . openModuleFile ( this . module , this . courseId ) ;
158171 }
159- } ) ;
172+ }
173+
174+ // The resource cannot be downloaded, open the activity in browser.
175+ return this . sitesProvider . getCurrentSite ( ) . openInBrowserWithAutoLoginIfSameSite ( this . module . url ) ;
160176 }
161177}
0 commit comments