Merge pull request #2667 from dpalou/MOBILE-3565

MOBILE-3565 course: Change course type in prefetch functions
main
Dani Palou 2021-02-01 12:41:20 +01:00 committed by GitHub
commit 2b450d7d33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 92 additions and 63 deletions

View File

@ -18,7 +18,7 @@ import { CoreFilterHelper } from '@features/filter/services/filter-helper';
import { CoreApp } from '@services/app'; import { CoreApp } from '@services/app';
import { CoreFilepool } from '@services/filepool'; import { CoreFilepool } from '@services/filepool';
import { CoreSites } from '@services/sites'; import { CoreSites } from '@services/sites';
import { CoreCourse, CoreCourseWSModule } from '../services/course'; import { CoreCourse, CoreCourseAnyModuleData } from '../services/course';
import { CoreCourseModulePrefetchHandlerBase } from './module-prefetch-handler'; 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. * @param dirPath Path of the directory where to store all the content files.
* @return Promise resolved when all content is downloaded. * @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. // Same implementation for download and prefetch.
return this.prefetch(module, courseId, false, dirPath); return this.prefetch(module, courseId, false, dirPath);
} }
@ -56,7 +56,7 @@ export class CoreCourseActivityPrefetchHandlerBase extends CoreCourseModulePrefe
* @return Promise resolved when done. * @return Promise resolved when done.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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 // To be overridden. It should call prefetchPackage
return; return;
} }
@ -77,8 +77,8 @@ export class CoreCourseActivityPrefetchHandlerBase extends CoreCourseModulePrefe
* @return Promise resolved when the module has been downloaded. Data returned is not reliable. * @return Promise resolved when the module has been downloaded. Data returned is not reliable.
*/ */
async prefetchPackage( async prefetchPackage(
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number | undefined,
downloadFunction: () => Promise<string>, downloadFunction: () => Promise<string>,
siteId?: string, siteId?: string,
): Promise<void> { ): Promise<void> {
@ -99,9 +99,18 @@ export class CoreCourseActivityPrefetchHandlerBase extends CoreCourseModulePrefe
return this.addOngoingDownload(module.id, prefetchPromise, siteId); 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( protected async changeStatusAndPrefetch(
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number | undefined,
downloadFunction: () => Promise<string>, downloadFunction: () => Promise<string>,
siteId?: string, siteId?: string,
): Promise<void> { ): Promise<void> {

View File

@ -13,14 +13,14 @@
// limitations under the License. // limitations under the License.
import { CoreSyncBaseProvider } from '@classes/base-sync'; import { CoreSyncBaseProvider } from '@classes/base-sync';
import { CoreCourseWSModule } from '../services/course'; import { CoreCourseAnyModuleData } from '../services/course';
import { CoreCourseModulePrefetchDelegate } from '../services/module-prefetch-delegate'; import { CoreCourseModulePrefetchDelegate } from '../services/module-prefetch-delegate';
import { CoreCourseModulePrefetchHandlerBase } from './module-prefetch-handler'; import { CoreCourseModulePrefetchHandlerBase } from './module-prefetch-handler';
/** /**
* Base class to create activity sync providers. It provides some common functions. * 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. * Conveniece function to prefetch data after an update.
@ -33,7 +33,7 @@ export class CoreCourseActivitySyncBaseProvider extends CoreSyncBaseProvider {
*/ */
async prefetchAfterUpdate( async prefetchAfterUpdate(
prefetchHandler: CoreCourseModulePrefetchHandlerBase, prefetchHandler: CoreCourseModulePrefetchHandlerBase,
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number,
preventDownloadRegex?: RegExp, preventDownloadRegex?: RegExp,
siteId?: string, siteId?: string,

View File

@ -16,7 +16,7 @@ import { CoreFilepool } from '@services/filepool';
import { CoreFileSizeSum, CorePluginFileDelegate } from '@services/plugin-file-delegate'; import { CoreFileSizeSum, CorePluginFileDelegate } from '@services/plugin-file-delegate';
import { CoreSites } from '@services/sites'; import { CoreSites } from '@services/sites';
import { CoreWSExternalFile } from '@services/ws'; 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'; import { CoreCourseModulePrefetchHandler } from '../services/module-prefetch-delegate';
/** /**
@ -93,7 +93,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Promise resolved when all content is downloaded. * @return Promise resolved when all content is downloaded.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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. // To be overridden.
return; return;
} }
@ -104,7 +104,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @param module The module object returned by WS. * @param module The module object returned by WS.
* @return List of files. * @return List of files.
*/ */
getContentDownloadableFiles(module: CoreCourseWSModule): CoreCourseModuleContentFile[] { getContentDownloadableFiles(module: CoreCourseAnyModuleData): CoreCourseModuleContentFile[] {
if (!module.contents?.length) { if (!module.contents?.length) {
return []; return [];
} }
@ -121,7 +121,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Promise resolved with the size. * @return Promise resolved with the size.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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 { try {
const files = await this.getFiles(module, courseId); const files = await this.getFiles(module, courseId);
@ -139,7 +139,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Size, or promise resolved with the size. * @return Size, or promise resolved with the size.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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(); const siteId = CoreSites.instance.getCurrentSiteId();
return CoreFilepool.instance.getFilesSizeByComponent(siteId, this.component, module.id); 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. * @return Promise resolved with the list of files.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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. // To be overridden.
return []; return [];
} }
@ -168,7 +168,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Promise resolved with list of intro files. * @return Promise resolved with list of intro files.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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); 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. * @param instance The instance to get the intro files (book, assign, ...). If not defined, module will be used.
* @return List of intro files. * @return List of intro files.
*/ */
getIntroFilesFromInstance(module: CoreCourseWSModule, instance?: ModuleInstance): CoreWSExternalFile[] { getIntroFilesFromInstance(module: CoreCourseAnyModuleData, instance?: ModuleInstance): CoreWSExternalFile[] {
if (instance) { if (instance) {
if (typeof instance.introfiles != 'undefined') { if (typeof instance.introfiles != 'undefined') {
return instance.introfiles; 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); return CoreFilepool.instance.extractDownloadableFilesFromHtmlAsFakeFileObjects(module.description);
} }
@ -243,7 +243,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Promise resolved when invalidated. * @return Promise resolved when invalidated.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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); 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. * @return Whether the module can be downloaded. The promise should never be rejected.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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. // By default, mark all instances as downloadable.
return true; return true;
} }
@ -301,7 +301,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Promise resolved when loaded. * @return Promise resolved when loaded.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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. // To be overridden.
return; return;
} }
@ -316,7 +316,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Promise resolved when done. * @return Promise resolved when done.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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. // To be overridden.
return; return;
} }
@ -329,7 +329,7 @@ export class CoreCourseModulePrefetchHandlerBase implements CoreCourseModulePref
* @return Promise resolved when done. * @return Promise resolved when done.
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars // 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); return CoreFilepool.instance.removeFilesByComponent(CoreSites.instance.getCurrentSiteId(), this.component, module.id);
} }

View File

@ -851,7 +851,7 @@ export class CoreCourseProvider {
* @return Promise resolved when loaded. * @return Promise resolved when loaded.
*/ */
async loadModuleContents( async loadModuleContents(
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId?: number, courseId?: number,
sectionId?: number, sectionId?: number,
preferCache?: boolean, 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. * Common options used by modules when calling a WS through CoreSite.
*/ */
@ -1522,4 +1524,9 @@ type CoreCompletionUpdateActivityCompletionStatusManuallyWSParams = {
completed: boolean; // Activity completed or not. 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.
};

View File

@ -304,6 +304,19 @@ export class CoreCourseLogHelperProvider {
return this.syncLogs(unique, siteId); 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. * Sync the offline saved activity logs.
* *

View File

@ -22,7 +22,7 @@ import { CoreFilepool, CoreFilepoolComponentFileEventData } from '@services/file
import { CoreSites } from '@services/sites'; import { CoreSites } from '@services/sites';
import { CoreTimeUtils } from '@services/utils/time'; import { CoreTimeUtils } from '@services/utils/time';
import { CoreUtils } from '@services/utils/utils'; 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 { CoreCache } from '@classes/cache';
import { CoreSiteWSPreSets } from '@classes/site'; import { CoreSiteWSPreSets } from '@classes/site';
import { CoreConstants } from '@/core/constants'; import { CoreConstants } from '@/core/constants';
@ -92,7 +92,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @param courseId Course ID the module belongs to. * @param courseId Course ID the module belongs to.
* @return Promise resolved with boolean: whether the module can use check updates WS. * @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); const handler = this.getPrefetchHandlerFor(module);
if (!handler) { 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. * @param canCheck True if updates can be checked using core_course_check_updates.
* @return Module status. * @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 handler = this.getPrefetchHandlerFor(module);
const siteId = CoreSites.instance.getCurrentSiteId(); 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. * @param dirPath Path of the directory where to store all the content files.
* @return Promise resolved when finished. * @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. // Check if the module has a prefetch handler.
const handler = this.getPrefetchHandlerFor(module); 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. * @param single True if we're downloading a single module, false if we're downloading a whole section.
* @return Promise resolved with the size. * @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); const handler = this.getPrefetchHandlerFor(module);
if (!handler) { if (!handler) {
@ -427,7 +427,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @param courseId Course ID the module belongs to. * @param courseId Course ID the module belongs to.
* @return Promise resolved with the size. * @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); const handler = this.getPrefetchHandlerFor(module);
if (!handler) { if (!handler) {
return 0; return 0;
@ -493,7 +493,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @param courseId Course ID the module belongs to. * @param courseId Course ID the module belongs to.
* @return Promise resolved with the total size (0 if unknown) * @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); let downloadedSize = await this.getModuleDownloadedSize(module, courseId);
if (isNaN(downloadedSize)) { if (isNaN(downloadedSize)) {
@ -522,7 +522,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @return Promise resolved with the list of files. * @return Promise resolved with the list of files.
*/ */
async getModuleFiles( async getModuleFiles(
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number,
): Promise<(CoreWSExternalFile | CoreCourseModuleContentFile)[]> { ): Promise<(CoreWSExternalFile | CoreCourseModuleContentFile)[]> {
const handler = this.getPrefetchHandlerFor(module); 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. // The handler defines a function to load contents, use it before returning module contents.
await handler.loadContents(module, courseId); await handler.loadContents(module, courseId);
return module.contents; return module.contents || [];
} else { } else {
return module.contents || []; return module.contents || [];
} }
@ -552,7 +552,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @return Promise resolved with the status. * @return Promise resolved with the status.
*/ */
async getModuleStatus( async getModuleStatus(
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number,
updates?: CourseUpdates | false, updates?: CourseUpdates | false,
refresh?: boolean, refresh?: boolean,
@ -597,7 +597,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
*/ */
protected async calculateModuleStatus( protected async calculateModuleStatus(
handler: CoreCourseModulePrefetchHandler, handler: CoreCourseModulePrefetchHandler,
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number,
updates?: CourseUpdates | false, updates?: CourseUpdates | false,
sectionId?: number, sectionId?: number,
@ -767,7 +767,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @return Promise resolved with the data. * @return Promise resolved with the data.
*/ */
protected async getModuleStatusAndDownloadTime( protected async getModuleStatusAndDownloadTime(
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number,
): Promise<{ status: string; downloadTime?: number }> { ): Promise<{ status: string; downloadTime?: number }> {
const handler = this.getPrefetchHandlerFor(module); const handler = this.getPrefetchHandlerFor(module);
@ -813,7 +813,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @return Promise resolved with the updates. * @return Promise resolved with the updates.
*/ */
async getModuleUpdates( async getModuleUpdates(
module: CoreCourseWSModule, module: CoreCourseAnyModuleData,
courseId: number, courseId: number,
ignoreCache?: boolean, ignoreCache?: boolean,
siteId?: string, siteId?: string,
@ -878,7 +878,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @param module The module to work on. * @param module The module to work on.
* @return Prefetch handler. * @return Prefetch handler.
*/ */
getPrefetchHandlerFor(module: CoreCourseWSModule): CoreCourseModulePrefetchHandler | undefined { getPrefetchHandlerFor(module: CoreCourseAnyModuleData): CoreCourseModulePrefetchHandler | undefined {
return this.getHandler(module.modname, true); return this.getHandler(module.modname, true);
} }
@ -930,7 +930,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* *
* @param module Module to be invalidated. * @param module Module to be invalidated.
*/ */
invalidateModuleStatusCache(module: CoreCourseWSModule): void { invalidateModuleStatusCache(module: CoreCourseAnyModuleData): void {
const handler = this.getPrefetchHandlerFor(module); const handler = this.getPrefetchHandlerFor(module);
if (handler) { if (handler) {
this.statusCache.invalidate(CoreFilepool.instance.getPackageId(handler.component, module.id)); 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. * @param courseId Course ID the module belongs to.
* @return Promise resolved with true if downloadable, false otherwise. * @return Promise resolved with true if downloadable, false otherwise.
*/ */
async isModuleDownloadable(module: CoreCourseWSModule, courseId: number): Promise<boolean> { async isModuleDownloadable(module: CoreCourseAnyModuleData, courseId: number): Promise<boolean> {
if (module.uservisible === false) { if ('uservisible' in module && module.uservisible === false) {
// Module isn't visible by the user, cannot be downloaded. // Module isn't visible by the user, cannot be downloaded.
return false; return false;
} }
@ -1011,7 +1011,7 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @param updates Result of getCourseUpdates. * @param updates Result of getCourseUpdates.
* @return Promise resolved with boolean: whether the module has updates. * @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 handler = this.getPrefetchHandlerFor(module);
const moduleUpdates = updates[module.id]; 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. * @param single True if we're downloading a single module, false if we're downloading a whole section.
* @return Promise resolved when finished. * @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); const handler = this.getPrefetchHandlerFor(module);
if (!handler) { if (!handler) {
return; return;
@ -1078,18 +1078,18 @@ export class CoreCourseModulePrefetchDelegateService extends CoreDelegate<CoreCo
* @param courseId Course ID the module belongs to. * @param courseId Course ID the module belongs to.
* @return Promise resolved when finished. * @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); const handler = this.getPrefetchHandlerFor(module);
if (!handler?.sync) { if (!handler?.sync) {
return; 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. // Always invalidate status cache for this module. We cannot know if data was sent to server or not.
this.invalidateModuleStatusCache(module); 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. * @param courseId Course ID the module belongs to.
* @return Promise resolved when done. * @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 handler = this.getPrefetchHandlerFor(module);
const siteId = CoreSites.instance.getCurrentSiteId(); 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. * @param single True if we're downloading a single module, false if we're downloading a whole section.
* @return Promise resolved with the size. * @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. * 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. * @param dirPath Path of the directory where to store all the content files.
* @return Promise resolved when done. * @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. * 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. * @param dirPath Path of the directory where to store all the content files.
* @return Promise resolved when all content is downloaded. * @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. * Invalidate the prefetched content.
@ -1434,7 +1434,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
* @param courseId Course ID the module belongs to. * @param courseId Course ID the module belongs to.
* @return Whether the module can use check_updates. The promise should never be rejected. * @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. * 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. * @param canCheck Whether the site allows checking for updates.
* @return Status to display. * @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). * 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. * @param courseId Course ID the module belongs to.
* @return Size, or promise resolved with the size. * @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. * 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. * @param courseId Course ID the module belongs to.
* @return List of files, or promise resolved with the files. * @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. * 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. * @param moduleUpdates List of updates for the module.
* @return Whether the module has updates. The promise should never be rejected. * @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). * 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. * @param courseId Course ID the module belongs to.
* @return Promise resolved when invalidated. * @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. * 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. * @param courseId Course ID the module belongs to.
* @return Whether the module can be downloaded. The promise should never be rejected. * @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. * 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. * @param courseId Course ID the module belongs to.
* @return Promise resolved when done. * @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). * 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. * @param courseId Course ID the module belongs to.
* @return Promise resolved when done. * @return Promise resolved when done.
*/ */
removeFiles?(module: CoreCourseWSModule, courseId: number): Promise<void>; removeFiles?(module: CoreCourseAnyModuleData, courseId: number): Promise<void>;
/** /**
* Sync a module. * Sync a module.
@ -1520,7 +1520,7 @@ export interface CoreCourseModulePrefetchHandler extends CoreDelegateHandler {
* @param siteId Site ID. If not defined, current site. * @param siteId Site ID. If not defined, current site.
* @return Promise resolved when done. * @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 = { type ToCheckList = {

View File

@ -1726,7 +1726,7 @@ export class CoreDomUtilsProvider {
* @param form Form element. * @param form Form element.
* @param siteId The site affected. If not provided, no site affected. * @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) { if (!formRef) {
return; return;
} }