MOBILE-3810 module: Fix getIconSrc on course module handler

main
Pau Ferrer Ocaña 2021-11-16 14:10:43 +01:00
parent 56e51e9e60
commit 8a3ae5e081
3 changed files with 34 additions and 6 deletions

View File

@ -15,7 +15,7 @@
import { CoreConstants } from '@/core/constants'; import { CoreConstants } from '@/core/constants';
import { Injectable, Type } from '@angular/core'; import { Injectable, Type } from '@angular/core';
import { CoreModuleHandlerBase } from '@features/course/classes/module-base-handler'; import { CoreModuleHandlerBase } from '@features/course/classes/module-base-handler';
import { CoreCourse } from '@features/course/services/course'; import { CoreCourse, CoreCourseWSModule } from '@features/course/services/course';
import { CoreCourseModule } from '@features/course/services/course-helper'; import { CoreCourseModule } from '@features/course/services/course-helper';
import { CoreCourseModuleHandler, CoreCourseModuleHandlerData } from '@features/course/services/module-delegate'; import { CoreCourseModuleHandler, CoreCourseModuleHandlerData } from '@features/course/services/module-delegate';
import { CoreCourseModulePrefetchDelegate } from '@features/course/services/module-prefetch-delegate'; import { CoreCourseModulePrefetchDelegate } from '@features/course/services/module-prefetch-delegate';
@ -226,6 +226,32 @@ export class AddonModResourceModuleHandlerService extends CoreModuleHandlerBase
}; };
} }
/**
* @inheritdoc
*/
async getIconSrc(module?: CoreCourseWSModule): Promise<string | undefined> {
if (!module) {
return;
}
let mimetypeIcon = '';
if ('contentsinfo' in module && module.contentsinfo) {
// No need to use the list of files.
const mimetype = module.contentsinfo.mimetypes[0];
if (mimetype) {
mimetypeIcon = CoreMimetypeUtils.getMimetypeIcon(mimetype);
}
} else if (module.contents && module.contents[0]) {
const files = module.contents;
const file = files[0];
mimetypeIcon = CoreMimetypeUtils.getFileIcon(file.filename || '');
}
return await CoreCourse.getModuleIconSrc(module.modname, module.modicon, mimetypeIcon);
}
/** /**
* @inheritdoc * @inheritdoc
*/ */

View File

@ -15,7 +15,7 @@
import { Component, Input, OnChanges, OnInit, SimpleChange } from '@angular/core'; import { Component, Input, OnChanges, OnInit, SimpleChange } from '@angular/core';
import { CoreCourse } from '@features/course/services/course'; import { CoreCourse } from '@features/course/services/course';
const assetsPath = 'assets/img/mod/'; const assetsPath = 'assets/img/';
const fallbackModName = 'external-tool'; const fallbackModName = 'external-tool';
/** /**
@ -51,7 +51,7 @@ export class CoreModIconComponent implements OnInit, OnChanges {
* @inheritdoc * @inheritdoc
*/ */
ngOnChanges(changes: { [name: string]: SimpleChange }): void { ngOnChanges(changes: { [name: string]: SimpleChange }): void {
if (changes && changes.modicon && changes.modicon.previousValue) { if (changes && changes.modicon && changes.modicon.previousValue !== undefined) {
this.setIcon(); this.setIcon();
} }
} }

View File

@ -80,9 +80,10 @@ export interface CoreCourseModuleHandler extends CoreDelegateHandler {
/** /**
* Get the icon src for the module. * Get the icon src for the module.
* *
* @param module: Module to get the icon from.
* @return The icon src. * @return The icon src.
*/ */
getIconSrc?(module: CoreCourseWSModule): Promise<string> | string | undefined; getIconSrc?(module?: CoreCourseWSModule): Promise<string | undefined> | string | undefined;
/** /**
* Check if this type of module supports a certain feature. * Check if this type of module supports a certain feature.
@ -343,10 +344,11 @@ export class CoreCourseModuleDelegateService extends CoreDelegate<CoreCourseModu
* *
* @param modname The name of the module type. * @param modname The name of the module type.
* @param modicon The mod icon string. * @param modicon The mod icon string.
* @param module The module to use.
* @return Promise resolved with the icon src. * @return Promise resolved with the icon src.
*/ */
async getModuleIconSrc(modname: string, modicon?: string): Promise<string> { async getModuleIconSrc(modname: string, modicon?: string, module?: CoreCourseWSModule): Promise<string> {
const icon = await this.executeFunctionOnEnabled<Promise<string>>(modname, 'getIconSrc'); const icon = await this.executeFunctionOnEnabled<Promise<string>>(modname, 'getIconSrc', [module]);
return icon || await CoreCourse.getModuleIconSrc(modname, modicon) || ''; return icon || await CoreCourse.getModuleIconSrc(modname, modicon) || '';
} }