forked from CIT/Vmeda.Online
		
	MOBILE-3565 course: Change course type in prefetch functions
This commit is contained in:
		
							parent
							
								
									69bc2c7480
								
							
						
					
					
						commit
						f58a3a9f4b
					
				@ -18,7 +18,7 @@ import { CoreFilterHelper } from '@features/filter/services/filter-helper';
 | 
			
		||||
import { CoreApp } from '@services/app';
 | 
			
		||||
import { CoreFilepool } from '@services/filepool';
 | 
			
		||||
import { CoreSites } from '@services/sites';
 | 
			
		||||
import { CoreCourse, CoreCourseWSModule } from '../services/course';
 | 
			
		||||
import { CoreCourse, CoreCourseAnyModuleData } from '../services/course';
 | 
			
		||||
import { CoreCourseModulePrefetchHandlerBase } from './module-prefetch-handler';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -41,7 +41,7 @@ export class CoreCourseActivityPrefetchHandlerBase extends CoreCourseModulePrefe
 | 
			
		||||
     * @param dirPath Path of the directory where to store all the content files.
 | 
			
		||||
     * @return Promise resolved when all content is downloaded.
 | 
			
		||||
     */
 | 
			
		||||
    download(module: CoreCourseWSModule, courseId: number, dirPath?: string): Promise<void> {
 | 
			
		||||
    download(module: CoreCourseAnyModuleData, courseId: number, dirPath?: string): Promise<void> {
 | 
			
		||||
        // Same implementation for download and prefetch.
 | 
			
		||||
        return this.prefetch(module, courseId, false, dirPath);
 | 
			
		||||
    }
 | 
			
		||||
@ -56,7 +56,7 @@ export class CoreCourseActivityPrefetchHandlerBase extends CoreCourseModulePrefe
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async prefetch(module: CoreCourseWSModule, courseId?: number, single?: boolean, dirPath?: string): Promise<void> {
 | 
			
		||||
    async prefetch(module: CoreCourseAnyModuleData, courseId?: number, single?: boolean, dirPath?: string): Promise<void> {
 | 
			
		||||
        // To be overridden. It should call prefetchPackage
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@ -77,8 +77,8 @@ export class CoreCourseActivityPrefetchHandlerBase extends CoreCourseModulePrefe
 | 
			
		||||
     * @return Promise resolved when the module has been downloaded. Data returned is not reliable.
 | 
			
		||||
     */
 | 
			
		||||
    async prefetchPackage(
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number | undefined,
 | 
			
		||||
        downloadFunction: () => Promise<string>,
 | 
			
		||||
        siteId?: string,
 | 
			
		||||
    ): Promise<void> {
 | 
			
		||||
@ -99,9 +99,18 @@ export class CoreCourseActivityPrefetchHandlerBase extends CoreCourseModulePrefe
 | 
			
		||||
        return this.addOngoingDownload(module.id, prefetchPromise, siteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Change module status and call the prefetch function.
 | 
			
		||||
     *
 | 
			
		||||
     * @param module Module.
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @param downloadFn Function to perform the prefetch. Please check the documentation of prefetchFunction.
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved when the module has been downloaded. Data returned is not reliable.
 | 
			
		||||
     */
 | 
			
		||||
    protected async changeStatusAndPrefetch(
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number | undefined,
 | 
			
		||||
        downloadFunction: () => Promise<string>,
 | 
			
		||||
        siteId?: string,
 | 
			
		||||
    ): Promise<void> {
 | 
			
		||||
 | 
			
		||||
@ -13,14 +13,14 @@
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
import { CoreSyncBaseProvider } from '@classes/base-sync';
 | 
			
		||||
import { CoreCourseWSModule } from '../services/course';
 | 
			
		||||
import { CoreCourseAnyModuleData } from '../services/course';
 | 
			
		||||
import { CoreCourseModulePrefetchDelegate } from '../services/module-prefetch-delegate';
 | 
			
		||||
import { CoreCourseModulePrefetchHandlerBase } from './module-prefetch-handler';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Base class to create activity sync providers. It provides some common functions.
 | 
			
		||||
 */
 | 
			
		||||
export class CoreCourseActivitySyncBaseProvider extends CoreSyncBaseProvider {
 | 
			
		||||
export class CoreCourseActivitySyncBaseProvider<T> extends CoreSyncBaseProvider<T> {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Conveniece function to prefetch data after an update.
 | 
			
		||||
@ -33,7 +33,7 @@ export class CoreCourseActivitySyncBaseProvider extends CoreSyncBaseProvider {
 | 
			
		||||
     */
 | 
			
		||||
    async prefetchAfterUpdate(
 | 
			
		||||
        prefetchHandler: CoreCourseModulePrefetchHandlerBase,
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
        preventDownloadRegex?: RegExp,
 | 
			
		||||
        siteId?: string,
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ import { CoreFilepool } from '@services/filepool';
 | 
			
		||||
import { CoreFileSizeSum, CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
			
		||||
import { CoreSites } from '@services/sites';
 | 
			
		||||
import { CoreWSExternalFile } from '@services/ws';
 | 
			
		||||
import { CoreCourse, CoreCourseModuleContentFile, CoreCourseWSModule } from '../services/course';
 | 
			
		||||
import { CoreCourse, CoreCourseAnyModuleData, CoreCourseModuleContentFile } from '../services/course';
 | 
			
		||||
import { CoreCourseModulePrefetchHandler } from '../services/module-prefetch-delegate';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -93,7 +93,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved when all content is downloaded.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async download(module: CoreCourseWSModule, courseId: number, dirPath?: string): Promise<void> {
 | 
			
		||||
    async download(module: CoreCourseAnyModuleData, courseId: number, dirPath?: string): Promise<void> {
 | 
			
		||||
        // To be overridden.
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@ -104,7 +104,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @param module The module object returned by WS.
 | 
			
		||||
     * @return List of files.
 | 
			
		||||
     */
 | 
			
		||||
    getContentDownloadableFiles(module: CoreCourseWSModule): CoreCourseModuleContentFile[] {
 | 
			
		||||
    getContentDownloadableFiles(module: CoreCourseAnyModuleData): CoreCourseModuleContentFile[] {
 | 
			
		||||
        if (!module.contents?.length) {
 | 
			
		||||
            return [];
 | 
			
		||||
        }
 | 
			
		||||
@ -121,7 +121,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved with the size.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async getDownloadSize(module: CoreCourseWSModule, courseId: number, single?: boolean): Promise<CoreFileSizeSum> {
 | 
			
		||||
    async getDownloadSize(module: CoreCourseAnyModuleData, courseId: number, single?: boolean): Promise<CoreFileSizeSum> {
 | 
			
		||||
        try {
 | 
			
		||||
            const files = await this.getFiles(module, courseId);
 | 
			
		||||
 | 
			
		||||
@ -139,7 +139,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Size, or promise resolved with the size.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async getDownloadedSize(module: CoreCourseWSModule, courseId: number): Promise<number> {
 | 
			
		||||
    async getDownloadedSize(module: CoreCourseAnyModuleData, courseId: number): Promise<number> {
 | 
			
		||||
        const siteId = CoreSites.instance.getCurrentSiteId();
 | 
			
		||||
 | 
			
		||||
        return CoreFilepool.instance.getFilesSizeByComponent(siteId, this.component, module.id);
 | 
			
		||||
@ -154,7 +154,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved with the list of files.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async getFiles(module: CoreCourseWSModule, courseId: number, single?: boolean): Promise<CoreWSExternalFile[]> {
 | 
			
		||||
    async getFiles(module: CoreCourseAnyModuleData, courseId: number, single?: boolean): Promise<CoreWSExternalFile[]> {
 | 
			
		||||
        // To be overridden.
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
@ -168,7 +168,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved with list of intro files.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async getIntroFiles(module: CoreCourseWSModule, courseId: number, ignoreCache?: boolean): Promise<CoreWSExternalFile[]> {
 | 
			
		||||
    async getIntroFiles(module: CoreCourseAnyModuleData, courseId: number, ignoreCache?: boolean): Promise<CoreWSExternalFile[]> {
 | 
			
		||||
        return this.getIntroFilesFromInstance(module);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -179,7 +179,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @param instance The instance to get the intro files (book, assign, ...). If not defined, module will be used.
 | 
			
		||||
     * @return List of intro files.
 | 
			
		||||
     */
 | 
			
		||||
    getIntroFilesFromInstance(module: CoreCourseWSModule, instance?: ModuleInstance): CoreWSExternalFile[] {
 | 
			
		||||
    getIntroFilesFromInstance(module: CoreCourseAnyModuleData, instance?: ModuleInstance): CoreWSExternalFile[] {
 | 
			
		||||
        if (instance) {
 | 
			
		||||
            if (typeof instance.introfiles != 'undefined') {
 | 
			
		||||
                return instance.introfiles;
 | 
			
		||||
@ -188,7 +188,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (module.description) {
 | 
			
		||||
        if ('description' in module && module.description) {
 | 
			
		||||
            return CoreFilepool.instance.extractDownloadableFilesFromHtmlAsFakeFileObjects(module.description);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -243,7 +243,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved when invalidated.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    invalidateModule(module: CoreCourseWSModule, courseId: number): Promise<void> {
 | 
			
		||||
    invalidateModule(module: CoreCourseAnyModuleData, courseId: number): Promise<void> {
 | 
			
		||||
        return CoreCourse.instance.invalidateModule(module.id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -255,7 +255,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Whether the module can be downloaded. The promise should never be rejected.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async isDownloadable(module: CoreCourseWSModule, courseId: number): Promise<boolean> {
 | 
			
		||||
    async isDownloadable(module: CoreCourseAnyModuleData, courseId: number): Promise<boolean> {
 | 
			
		||||
        // By default, mark all instances as downloadable.
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
@ -301,7 +301,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved when loaded.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async loadContents(module: CoreCourseWSModule, courseId: number, ignoreCache?: boolean): Promise<void> {
 | 
			
		||||
    async loadContents(module: CoreCourseAnyModuleData, courseId: number, ignoreCache?: boolean): Promise<void> {
 | 
			
		||||
        // To be overridden.
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@ -316,7 +316,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    async prefetch(module: CoreCourseWSModule, courseId?: number, single?: boolean, dirPath?: string): Promise<void> {
 | 
			
		||||
    async prefetch(module: CoreCourseAnyModuleData, courseId?: number, single?: boolean, dirPath?: string): Promise<void> {
 | 
			
		||||
        // To be overridden.
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@ -329,7 +329,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
			
		||||
    removeFiles(module: CoreCourseWSModule, courseId: number): Promise<void> {
 | 
			
		||||
    removeFiles(module: CoreCourseAnyModuleData, courseId: number): Promise<void> {
 | 
			
		||||
        return CoreFilepool.instance.removeFilesByComponent(CoreSites.instance.getCurrentSiteId(), this.component, module.id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -851,7 +851,7 @@ export class CoreCourseProvider {
 | 
			
		||||
     * @return Promise resolved when loaded.
 | 
			
		||||
     */
 | 
			
		||||
    async loadModuleContents(
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId?: number,
 | 
			
		||||
        sectionId?: number,
 | 
			
		||||
        preferCache?: boolean,
 | 
			
		||||
@ -1199,6 +1199,8 @@ export class CoreCourseProvider {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class CoreCourse extends makeSingleton(CoreCourseProvider) {}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Common options used by modules when calling a WS through CoreSite.
 | 
			
		||||
 */
 | 
			
		||||
@ -1522,4 +1524,9 @@ type CoreCompletionUpdateActivityCompletionStatusManuallyWSParams = {
 | 
			
		||||
    completed: boolean; // Activity completed or not.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export class CoreCourse extends makeSingleton(CoreCourseProvider) {}
 | 
			
		||||
/**
 | 
			
		||||
 * Any of the possible module WS data.
 | 
			
		||||
 */
 | 
			
		||||
export type CoreCourseAnyModuleData = CoreCourseWSModule | CoreCourseModuleBasicInfo & {
 | 
			
		||||
    contents?: CoreCourseModuleContentFile[]; // Calculated in the app in loadModuleContents.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -304,6 +304,19 @@ export class CoreCourseLogHelperProvider {
 | 
			
		||||
        return this.syncLogs(unique, siteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sync the offline saved activity logs.
 | 
			
		||||
     *
 | 
			
		||||
     * @param component Component name.
 | 
			
		||||
     * @param componentId Component ID.
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     * @deprecated since 3.9.5. Please use syncActivity instead.
 | 
			
		||||
     */
 | 
			
		||||
    syncIfNeeded(component: string, componentId: number, siteId?: string): Promise<void> {
 | 
			
		||||
        return this.syncActivity(component, componentId, siteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sync the offline saved activity logs.
 | 
			
		||||
     *
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ import { CoreFilepool, CoreFilepoolComponentFileEventData } from '@services/file
 | 
			
		||||
import { CoreSites } from '@services/sites';
 | 
			
		||||
import { CoreTimeUtils } from '@services/utils/time';
 | 
			
		||||
import { CoreUtils } from '@services/utils/utils';
 | 
			
		||||
import { CoreCourse, CoreCourseModuleContentFile, CoreCourseWSModule } from './course';
 | 
			
		||||
import { CoreCourse, CoreCourseAnyModuleData, CoreCourseModuleContentFile, CoreCourseWSModule } from './course';
 | 
			
		||||
import { CoreCache } from '@classes/cache';
 | 
			
		||||
import { CoreSiteWSPreSets } from '@classes/site';
 | 
			
		||||
import { CoreConstants } from '@/core/constants';
 | 
			
		||||
@ -92,7 +92,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved with boolean: whether the module can use check updates WS.
 | 
			
		||||
     */
 | 
			
		||||
    async canModuleUseCheckUpdates(module: CoreCourseWSModule, courseId: number): Promise<boolean> {
 | 
			
		||||
    async canModuleUseCheckUpdates(module: CoreCourseAnyModuleData, courseId: number): Promise<boolean> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
 | 
			
		||||
        if (!handler) {
 | 
			
		||||
@ -169,7 +169,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param canCheck True if updates can be checked using core_course_check_updates.
 | 
			
		||||
     * @return Module status.
 | 
			
		||||
     */
 | 
			
		||||
    determineModuleStatus(module: CoreCourseWSModule, status: string, canCheck?: boolean): string {
 | 
			
		||||
    determineModuleStatus(module: CoreCourseAnyModuleData, status: string, canCheck?: boolean): string {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
        const siteId = CoreSites.instance.getCurrentSiteId();
 | 
			
		||||
 | 
			
		||||
@ -202,7 +202,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param dirPath Path of the directory where to store all the content files.
 | 
			
		||||
     * @return Promise resolved when finished.
 | 
			
		||||
     */
 | 
			
		||||
    async downloadModule(module: CoreCourseWSModule, courseId: number, dirPath?: string): Promise<void> {
 | 
			
		||||
    async downloadModule(module: CoreCourseAnyModuleData, courseId: number, dirPath?: string): Promise<void> {
 | 
			
		||||
        // Check if the module has a prefetch handler.
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
 | 
			
		||||
@ -389,7 +389,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param single True if we're downloading a single module, false if we're downloading a whole section.
 | 
			
		||||
     * @return Promise resolved with the size.
 | 
			
		||||
     */
 | 
			
		||||
    async getModuleDownloadSize(module: CoreCourseWSModule, courseId: number, single?: boolean): Promise<CoreFileSizeSum> {
 | 
			
		||||
    async getModuleDownloadSize(module: CoreCourseAnyModuleData, courseId: number, single?: boolean): Promise<CoreFileSizeSum> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
 | 
			
		||||
        if (!handler) {
 | 
			
		||||
@ -427,7 +427,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved with the size.
 | 
			
		||||
     */
 | 
			
		||||
    async getModuleDownloadedSize(module: CoreCourseWSModule, courseId: number): Promise<number> {
 | 
			
		||||
    async getModuleDownloadedSize(module: CoreCourseAnyModuleData, courseId: number): Promise<number> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
        if (!handler) {
 | 
			
		||||
            return 0;
 | 
			
		||||
@ -493,7 +493,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved with the total size (0 if unknown)
 | 
			
		||||
     */
 | 
			
		||||
    async getModuleStoredSize(module: CoreCourseWSModule, courseId: number): Promise<number> {
 | 
			
		||||
    async getModuleStoredSize(module: CoreCourseAnyModuleData, courseId: number): Promise<number> {
 | 
			
		||||
        let downloadedSize = await this.getModuleDownloadedSize(module, courseId);
 | 
			
		||||
 | 
			
		||||
        if (isNaN(downloadedSize)) {
 | 
			
		||||
@ -522,7 +522,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @return Promise resolved with the list of files.
 | 
			
		||||
     */
 | 
			
		||||
    async getModuleFiles(
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
    ): Promise<(CoreWSExternalFile | CoreCourseModuleContentFile)[]> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
@ -534,7 +534,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
            // The handler defines a function to load contents, use it before returning module contents.
 | 
			
		||||
            await handler.loadContents(module, courseId);
 | 
			
		||||
 | 
			
		||||
            return module.contents;
 | 
			
		||||
            return module.contents || [];
 | 
			
		||||
        } else {
 | 
			
		||||
            return module.contents || [];
 | 
			
		||||
        }
 | 
			
		||||
@ -552,7 +552,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @return Promise resolved with the status.
 | 
			
		||||
     */
 | 
			
		||||
    async getModuleStatus(
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
        updates?: CourseUpdates | false,
 | 
			
		||||
        refresh?: boolean,
 | 
			
		||||
@ -597,7 +597,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     */
 | 
			
		||||
    protected async calculateModuleStatus(
 | 
			
		||||
        handler: CoreCourseModulePrefetchHandler,
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
        updates?: CourseUpdates | false,
 | 
			
		||||
        sectionId?: number,
 | 
			
		||||
@ -767,7 +767,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @return Promise resolved with the data.
 | 
			
		||||
     */
 | 
			
		||||
    protected async getModuleStatusAndDownloadTime(
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
    ): Promise<{ status: string; downloadTime?: number }> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
@ -813,7 +813,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @return Promise resolved with the updates.
 | 
			
		||||
     */
 | 
			
		||||
    async getModuleUpdates(
 | 
			
		||||
        module: CoreCourseWSModule,
 | 
			
		||||
        module: CoreCourseAnyModuleData,
 | 
			
		||||
        courseId: number,
 | 
			
		||||
        ignoreCache?: boolean,
 | 
			
		||||
        siteId?: string,
 | 
			
		||||
@ -878,7 +878,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param module The module to work on.
 | 
			
		||||
     * @return Prefetch handler.
 | 
			
		||||
     */
 | 
			
		||||
    getPrefetchHandlerFor(module: CoreCourseWSModule): CoreCourseModulePrefetchHandler | undefined {
 | 
			
		||||
    getPrefetchHandlerFor(module: CoreCourseAnyModuleData): CoreCourseModulePrefetchHandler | undefined {
 | 
			
		||||
        return this.getHandler(module.modname, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -930,7 +930,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     *
 | 
			
		||||
     * @param module Module to be invalidated.
 | 
			
		||||
     */
 | 
			
		||||
    invalidateModuleStatusCache(module: CoreCourseWSModule): void {
 | 
			
		||||
    invalidateModuleStatusCache(module: CoreCourseAnyModuleData): void {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
        if (handler) {
 | 
			
		||||
            this.statusCache.invalidate(CoreFilepool.instance.getPackageId(handler.component, module.id));
 | 
			
		||||
@ -970,8 +970,8 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved with true if downloadable, false otherwise.
 | 
			
		||||
     */
 | 
			
		||||
    async isModuleDownloadable(module: CoreCourseWSModule, courseId: number): Promise<boolean> {
 | 
			
		||||
        if (module.uservisible === false) {
 | 
			
		||||
    async isModuleDownloadable(module: CoreCourseAnyModuleData, courseId: number): Promise<boolean> {
 | 
			
		||||
        if ('uservisible' in module && module.uservisible === false) {
 | 
			
		||||
            // Module isn't visible by the user, cannot be downloaded.
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
@ -1011,7 +1011,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param updates Result of getCourseUpdates.
 | 
			
		||||
     * @return Promise resolved with boolean: whether the module has updates.
 | 
			
		||||
     */
 | 
			
		||||
    async moduleHasUpdates(module: CoreCourseWSModule, courseId: number, updates: CourseUpdates): Promise<boolean> {
 | 
			
		||||
    async moduleHasUpdates(module: CoreCourseAnyModuleData, courseId: number, updates: CourseUpdates): Promise<boolean> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
        const moduleUpdates = updates[module.id];
 | 
			
		||||
 | 
			
		||||
@ -1044,7 +1044,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param single True if we're downloading a single module, false if we're downloading a whole section.
 | 
			
		||||
     * @return Promise resolved when finished.
 | 
			
		||||
     */
 | 
			
		||||
    async prefetchModule(module: CoreCourseWSModule, courseId: number, single?: boolean): Promise<void> {
 | 
			
		||||
    async prefetchModule(module: CoreCourseAnyModuleData, courseId: number, single?: boolean): Promise<void> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
        if (!handler) {
 | 
			
		||||
            return;
 | 
			
		||||
@ -1078,18 +1078,18 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved when finished.
 | 
			
		||||
     */
 | 
			
		||||
    async syncModule<T = unknown>(module: CoreCourseWSModule, courseId: number): Promise<T | undefined> {
 | 
			
		||||
    async syncModule<T = unknown>(module: CoreCourseAnyModuleData, courseId: number): Promise<T | undefined> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
        if (!handler?.sync) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const result = await CoreUtils.instance.ignoreErrors(handler.sync<T>(module, courseId));
 | 
			
		||||
        const result = await CoreUtils.instance.ignoreErrors(handler.sync(module, courseId));
 | 
			
		||||
 | 
			
		||||
        // Always invalidate status cache for this module. We cannot know if data was sent to server or not.
 | 
			
		||||
        this.invalidateModuleStatusCache(module);
 | 
			
		||||
 | 
			
		||||
        return result;
 | 
			
		||||
        return <T> result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -1181,7 +1181,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    async removeModuleFiles(module: CoreCourseWSModule, courseId: number): Promise<void> {
 | 
			
		||||
    async removeModuleFiles(module: CoreCourseAnyModuleData, courseId: number): Promise<void> {
 | 
			
		||||
        const handler = this.getPrefetchHandlerFor(module);
 | 
			
		||||
        const siteId = CoreSites.instance.getCurrentSiteId();
 | 
			
		||||
 | 
			
		||||
@ -1393,7 +1393,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param single True if we're downloading a single module, false if we're downloading a whole section.
 | 
			
		||||
     * @return Promise resolved with the size.
 | 
			
		||||
     */
 | 
			
		||||
    getDownloadSize(module: CoreCourseWSModule, courseId: number, single?: boolean): Promise<CoreFileSizeSum>;
 | 
			
		||||
    getDownloadSize(module: CoreCourseAnyModuleData, courseId: number, single?: boolean): Promise<CoreFileSizeSum>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Prefetch a module.
 | 
			
		||||
@ -1404,7 +1404,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param dirPath Path of the directory where to store all the content files.
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    prefetch(module: CoreCourseWSModule, courseId?: number, single?: boolean, dirPath?: string): Promise<void>;
 | 
			
		||||
    prefetch(module: CoreCourseAnyModuleData, courseId?: number, single?: boolean, dirPath?: string): Promise<void>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Download the module.
 | 
			
		||||
@ -1414,7 +1414,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param dirPath Path of the directory where to store all the content files.
 | 
			
		||||
     * @return Promise resolved when all content is downloaded.
 | 
			
		||||
     */
 | 
			
		||||
    download(module: CoreCourseWSModule, courseId: number, dirPath?: string): Promise<void>;
 | 
			
		||||
    download(module: CoreCourseAnyModuleData, courseId: number, dirPath?: string): Promise<void>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Invalidate the prefetched content.
 | 
			
		||||
@ -1434,7 +1434,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Whether the module can use check_updates. The promise should never be rejected.
 | 
			
		||||
     */
 | 
			
		||||
    canUseCheckUpdates?(module: CoreCourseWSModule, courseId: number): Promise<boolean>;
 | 
			
		||||
    canUseCheckUpdates?(module: CoreCourseAnyModuleData, courseId: number): Promise<boolean>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return the status to show based on current status. E.g. a module might want to show outdated instead of downloaded.
 | 
			
		||||
@ -1445,7 +1445,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param canCheck Whether the site allows checking for updates.
 | 
			
		||||
     * @return Status to display.
 | 
			
		||||
     */
 | 
			
		||||
    determineStatus?(module: CoreCourseWSModule, status: string, canCheck: boolean): string;
 | 
			
		||||
    determineStatus?(module: CoreCourseAnyModuleData, status: string, canCheck: boolean): string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the downloaded size of a module. If not defined, we'll use getFiles to calculate it (it can be slow).
 | 
			
		||||
@ -1454,7 +1454,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Size, or promise resolved with the size.
 | 
			
		||||
     */
 | 
			
		||||
    getDownloadedSize?(module: CoreCourseWSModule, courseId: number): Promise<number>;
 | 
			
		||||
    getDownloadedSize?(module: CoreCourseAnyModuleData, courseId: number): Promise<number>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the list of files of the module. If not defined, we'll assume they are in module.contents.
 | 
			
		||||
@ -1463,7 +1463,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return List of files, or promise resolved with the files.
 | 
			
		||||
     */
 | 
			
		||||
    getFiles?(module: CoreCourseWSModule, courseId: number): Promise<(CoreWSExternalFile | CoreCourseModuleContentFile)[]>;
 | 
			
		||||
    getFiles?(module: CoreCourseAnyModuleData, courseId: number): Promise<(CoreWSExternalFile | CoreCourseModuleContentFile)[]>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if a certain module has updates based on the result of check updates.
 | 
			
		||||
@ -1473,7 +1473,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param moduleUpdates List of updates for the module.
 | 
			
		||||
     * @return Whether the module has updates. The promise should never be rejected.
 | 
			
		||||
     */
 | 
			
		||||
    hasUpdates?(module: CoreCourseWSModule, courseId: number, moduleUpdates: false | CheckUpdatesWSInstance): Promise<boolean>;
 | 
			
		||||
    hasUpdates?(module: CoreCourseAnyModuleData, courseId: number, moduleUpdates: false | CheckUpdatesWSInstance): Promise<boolean>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Invalidate WS calls needed to determine module status (usually, to check if module is downloadable).
 | 
			
		||||
@ -1483,7 +1483,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved when invalidated.
 | 
			
		||||
     */
 | 
			
		||||
    invalidateModule?(module: CoreCourseWSModule, courseId: number): Promise<void>;
 | 
			
		||||
    invalidateModule?(module: CoreCourseAnyModuleData, courseId: number): Promise<void>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if a module can be downloaded. If the function is not defined, we assume that all modules are downloadable.
 | 
			
		||||
@ -1492,7 +1492,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Whether the module can be downloaded. The promise should never be rejected.
 | 
			
		||||
     */
 | 
			
		||||
    isDownloadable?(module: CoreCourseWSModule, courseId: number): Promise<boolean>;
 | 
			
		||||
    isDownloadable?(module: CoreCourseAnyModuleData, courseId: number): Promise<boolean>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Load module contents in module.contents if they aren't loaded already. This is meant for resources.
 | 
			
		||||
@ -1501,7 +1501,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    loadContents?(module: CoreCourseWSModule, courseId: number): Promise<void>;
 | 
			
		||||
    loadContents?(module: CoreCourseAnyModuleData, courseId: number): Promise<void>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Remove module downloaded files. If not defined, we'll use getFiles to remove them (slow).
 | 
			
		||||
@ -1510,7 +1510,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param courseId Course ID the module belongs to.
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    removeFiles?(module: CoreCourseWSModule, courseId: number): Promise<void>;
 | 
			
		||||
    removeFiles?(module: CoreCourseAnyModuleData, courseId: number): Promise<void>;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sync a module.
 | 
			
		||||
@ -1520,7 +1520,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
 | 
			
		||||
     * @param siteId Site ID. If not defined, current site.
 | 
			
		||||
     * @return Promise resolved when done.
 | 
			
		||||
     */
 | 
			
		||||
    sync?<T = unknown>(module: CoreCourseWSModule, courseId: number, siteId?: string): Promise<T>;
 | 
			
		||||
    sync?(module: CoreCourseAnyModuleData, courseId: number, siteId?: string): Promise<unknown>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ToCheckList = {
 | 
			
		||||
 | 
			
		||||
@ -1726,7 +1726,7 @@ export class CoreDomUtilsProvider {
 | 
			
		||||
     * @param form Form element.
 | 
			
		||||
     * @param siteId The site affected. If not provided, no site affected.
 | 
			
		||||
     */
 | 
			
		||||
    triggerFormCancelledEvent(formRef: ElementRef, siteId?: string): void {
 | 
			
		||||
    triggerFormCancelledEvent(formRef: ElementRef | HTMLFormElement | undefined, siteId?: string): void {
 | 
			
		||||
        if (!formRef) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user