diff --git a/src/core/course/providers/course.ts b/src/core/course/providers/course.ts index f35b76067..e16318b09 100644 --- a/src/core/course/providers/course.ts +++ b/src/core/course/providers/course.ts @@ -43,6 +43,8 @@ export class CoreCourseProvider { static COMPLETION_COMPLETE_PASS = 2; static COMPLETION_COMPLETE_FAIL = 3; + static COMPONENT = 'CoreCourse'; + protected ROOT_CACHE_KEY = 'mmCourse:'; // Variables for database. diff --git a/src/core/course/providers/helper.ts b/src/core/course/providers/helper.ts index 9cf20c3c1..3a6b746ac 100644 --- a/src/core/course/providers/helper.ts +++ b/src/core/course/providers/helper.ts @@ -401,11 +401,15 @@ export class CoreCourseHelperProvider { * @return {Promise} Promise resolved if the user confirms or there's no need to confirm. */ confirmDownloadSizeSection(courseId: number, section?: any, sections?: any[], alwaysConfirm?: boolean): Promise { - let sizePromise; + let sizePromise, + haveEmbeddedFiles = false; // Calculate the size of the download. if (section && section.id != CoreCourseProvider.ALL_SECTIONS_ID) { sizePromise = this.prefetchDelegate.getDownloadSize(section.modules, courseId); + + // Check if the section has embedded files in the description. + haveEmbeddedFiles = this.domUtils.extractDownloadableFilesFromHtml(section.summary).length > 0; } else { const promises = [], results = { @@ -419,6 +423,11 @@ export class CoreCourseHelperProvider { results.total = results.total && sectionSize.total; results.size += sectionSize.size; })); + + // Check if the section has embedded files in the description. + if (!haveEmbeddedFiles && this.domUtils.extractDownloadableFilesFromHtml(s.summary).length > 0) { + haveEmbeddedFiles = true; + } } }); @@ -428,6 +437,10 @@ export class CoreCourseHelperProvider { } return sizePromise.then((size) => { + if (haveEmbeddedFiles) { + size.total = false; + } + // Show confirm modal if needed. return this.domUtils.confirmDownloadSize(size, undefined, undefined, undefined, undefined, alwaysConfirm); }); @@ -1272,10 +1285,12 @@ export class CoreCourseHelperProvider { return Promise.resolve(); } + const promises = []; + section.isDownloading = true; // Validate the section needs to be downloaded and calculate amount of modules that need to be downloaded. - return this.prefetchDelegate.getModulesStatus(section.modules, courseId, section.id).then((result) => { + promises.push(this.prefetchDelegate.getModulesStatus(section.modules, courseId, section.id).then((result) => { if (result.status == CoreConstants.DOWNLOADED || result.status == CoreConstants.NOT_DOWNLOADABLE) { // Section is downloaded or not downloadable, nothing to do. return; @@ -1286,7 +1301,18 @@ export class CoreCourseHelperProvider { section.isDownloading = false; return Promise.reject(error); - }); + })); + + // Download the files in the section description. + const introFiles = this.domUtils.extractDownloadableFilesFromHtmlAsFakeFileObjects(section.summary), + siteId = this.sitesProvider.getCurrentSiteId(); + + promises.push(this.filepoolProvider.addFilesToQueue(siteId, introFiles, CoreCourseProvider.COMPONENT, courseId) + .catch(() => { + // Ignore errors. + })); + + return Promise.all(promises); } /**