forked from CIT/Vmeda.Online
		
	MOBILE-2907 resource: Use customdata and afterlink if possible
This commit is contained in:
		
							parent
							
								
									6e69bebc02
								
							
						
					
					
						commit
						407a33b5cd
					
				| @ -113,12 +113,17 @@ export class AddonModResourceHelperProvider { | |||||||
|      * @return {boolean}         Whether the resource should be displayed embeded. |      * @return {boolean}         Whether the resource should be displayed embeded. | ||||||
|      */ |      */ | ||||||
|     isDisplayedEmbedded(module: any, display: number): boolean { |     isDisplayedEmbedded(module: any, display: number): boolean { | ||||||
|         if (!module.contents.length || !this.fileProvider.isAvailable() || |         if ((!module.contents.length && !module.contentsinfo) || !this.fileProvider.isAvailable() || | ||||||
|                 (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7') && this.isNextcloudFile(module))) { |                 (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7') && this.isNextcloudFile(module))) { | ||||||
|             return false; |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         const ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename); |         let ext; | ||||||
|  | 
 | ||||||
|  |         if (module.contentsinfo) { | ||||||
|  |             ext = this.mimetypeUtils.getExtension(module.contentsinfo.mimetypes[0]); | ||||||
|  |         } else { | ||||||
|  |             ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename); | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         return (display == this.DISPLAY_EMBED || display == this.DISPLAY_AUTO) && this.mimetypeUtils.canBeEmbedded(ext); |         return (display == this.DISPLAY_EMBED || display == this.DISPLAY_AUTO) && this.mimetypeUtils.canBeEmbedded(ext); | ||||||
|     } |     } | ||||||
| @ -130,12 +135,18 @@ export class AddonModResourceHelperProvider { | |||||||
|      * @return {boolean}   Whether the resource should be displayed in an iframe. |      * @return {boolean}   Whether the resource should be displayed in an iframe. | ||||||
|      */ |      */ | ||||||
|     isDisplayedInIframe(module: any): boolean { |     isDisplayedInIframe(module: any): boolean { | ||||||
|         if (!module.contents.length || !this.fileProvider.isAvailable()) { |         if ((!module.contents.length && !module.contentsinfo) || !this.fileProvider.isAvailable()) { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         const ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename), |         let mimetype; | ||||||
|  | 
 | ||||||
|  |         if (module.contentsinfo) { | ||||||
|  |             mimetype = module.contentsinfo.mimetypes[0]; | ||||||
|  |         } else { | ||||||
|  |             const ext = this.mimetypeUtils.getFileExtension(module.contents[0].filename); | ||||||
|             mimetype = this.mimetypeUtils.getMimeType(ext); |             mimetype = this.mimetypeUtils.getMimeType(ext); | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         return mimetype == 'text/html'; |         return mimetype == 'text/html'; | ||||||
|     } |     } | ||||||
| @ -147,6 +158,10 @@ export class AddonModResourceHelperProvider { | |||||||
|      * @return {boolean} Whether it's a Nextcloud file. |      * @return {boolean} Whether it's a Nextcloud file. | ||||||
|      */ |      */ | ||||||
|     isNextcloudFile(module: any): boolean { |     isNextcloudFile(module: any): boolean { | ||||||
|  |         if (module.contentsinfo) { | ||||||
|  |             return module.contentsinfo.repositorytype == 'nextcloud'; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         return module.contents && module.contents[0] && module.contents[0].repositorytype == 'nextcloud'; |         return module.contents && module.contents[0] && module.contents[0].repositorytype == 'nextcloud'; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -121,8 +121,16 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { | |||||||
|      * @return {Promise<boolean>} Resolved when done. |      * @return {Promise<boolean>} Resolved when done. | ||||||
|      */ |      */ | ||||||
|     protected hideOpenButton(module: any, courseId: number): Promise<boolean> { |     protected hideOpenButton(module: any, courseId: number): Promise<boolean> { | ||||||
|         return this.courseProvider.loadModuleContents(module, courseId, undefined, false, false, undefined, this.modName) |         let promise; | ||||||
|                 .then(() => { | 
 | ||||||
|  |         if (module.contentsinfo) { | ||||||
|  |             // No need to load contents.
 | ||||||
|  |             promise = Promise.resolve(); | ||||||
|  |         } else { | ||||||
|  |             promise = this.courseProvider.loadModuleContents(module, courseId, undefined, false, false, undefined, this.modName); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return promise.then(() => { | ||||||
|             return this.prefetchDelegate.getModuleStatus(module, courseId).then((status) => { |             return this.prefetchDelegate.getModuleStatus(module, courseId).then((status) => { | ||||||
|                 return status !== CoreConstants.DOWNLOADED || this.resourceHelper.isDisplayedInIframe(module); |                 return status !== CoreConstants.DOWNLOADED || this.resourceHelper.isDisplayedInIframe(module); | ||||||
|             }); |             }); | ||||||
| @ -141,7 +149,7 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { | |||||||
|         let infoFiles = [], |         let infoFiles = [], | ||||||
|             options: any = {}; |             options: any = {}; | ||||||
| 
 | 
 | ||||||
|         // Check if the button needs to be shown or not. This also loads the module contents.
 |         // Check if the button needs to be shown or not.
 | ||||||
|         promises.push(this.hideOpenButton(module, courseId).then((hideOpenButton) => { |         promises.push(this.hideOpenButton(module, courseId).then((hideOpenButton) => { | ||||||
|             handlerData.buttons[0].hidden = hideOpenButton; |             handlerData.buttons[0].hidden = hideOpenButton; | ||||||
|         })); |         })); | ||||||
| @ -164,7 +172,13 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { | |||||||
|                 }, |                 }, | ||||||
|                 extra = []; |                 extra = []; | ||||||
| 
 | 
 | ||||||
|             if (files && files.length) { |             if (module.contentsinfo) { | ||||||
|  |                 // No need to use the list of files.
 | ||||||
|  |                 const mimetype = module.contentsinfo.mimetypes[0]; | ||||||
|  |                 resourceData.icon = this.mimetypeUtils.getMimetypeIcon(mimetype); | ||||||
|  |                 resourceData.extra = this.textUtils.cleanTags(module.afterlink); | ||||||
|  | 
 | ||||||
|  |             } else if (files && files.length) { | ||||||
|                 const file = files[0]; |                 const file = files[0]; | ||||||
| 
 | 
 | ||||||
|                 resourceData.icon = this.mimetypeUtils.getFileIcon(file.filename); |                 resourceData.icon = this.mimetypeUtils.getFileIcon(file.filename); | ||||||
| @ -178,11 +192,12 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { | |||||||
|                             return result + file.filesize; |                             return result + file.filesize; | ||||||
|                         }, 0); |                         }, 0); | ||||||
|                     } |                     } | ||||||
|  | 
 | ||||||
|                     extra.push(this.textUtils.bytesToSize(size, 1)); |                     extra.push(this.textUtils.bytesToSize(size, 1)); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 if (options.showtype) { |                 if (options.showtype) { | ||||||
|                     // We should take it from options.filedetails.size if avalaible ∫but it's already translated.
 |                     // We should take it from options.filedetails.size if avalaible but it's already translated.
 | ||||||
|                     extra.push(this.mimetypeUtils.getMimetypeDescription(file)); |                     extra.push(this.mimetypeUtils.getMimetypeDescription(file)); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
| @ -203,12 +218,15 @@ export class AddonModResourceModuleHandler implements CoreCourseModuleHandler { | |||||||
|                             {$a: this.timeUtils.userDate(file.timecreated * 1000, 'core.strftimedatetimeshort') })); |                             {$a: this.timeUtils.userDate(file.timecreated * 1000, 'core.strftimedatetimeshort') })); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |  | ||||||
| 
 | 
 | ||||||
|             if (resourceData.icon == '') { |                 if (resourceData.icon == '') { | ||||||
|  |                     resourceData.icon = this.courseProvider.getModuleIconSrc(this.modName, module.modicon); | ||||||
|  |                 } | ||||||
|  |                 resourceData.extra += extra.join(' '); | ||||||
|  |             } else { | ||||||
|  |                 // No files, just set the icon.
 | ||||||
|                 resourceData.icon = this.courseProvider.getModuleIconSrc(this.modName, module.modicon); |                 resourceData.icon = this.courseProvider.getModuleIconSrc(this.modName, module.modicon); | ||||||
|             } |             } | ||||||
|             resourceData.extra += extra.join(' '); |  | ||||||
| 
 | 
 | ||||||
|             return resourceData; |             return resourceData; | ||||||
|         }); |         }); | ||||||
|  | |||||||
| @ -51,11 +51,18 @@ export class AddonModResourcePrefetchHandler extends CoreCourseResourcePrefetchH | |||||||
|      * @return {string} Status to display. |      * @return {string} Status to display. | ||||||
|      */ |      */ | ||||||
|     determineStatus(module: any, status: string, canCheck: boolean): string { |     determineStatus(module: any, status: string, canCheck: boolean): string { | ||||||
|         if (status == CoreConstants.DOWNLOADED && module && module.contents) { |         if (status == CoreConstants.DOWNLOADED && module) { | ||||||
|             // If the first file is an external file, always display the module as outdated.
 |             // If the main file is an external file, always display the module as outdated.
 | ||||||
|             const mainFile = module.contents[0]; |             if (module.contentsinfo) { | ||||||
|             if (mainFile && mainFile.isexternalfile) { |                 if (module.contentsinfo.repositorytype) { | ||||||
|                 return CoreConstants.OUTDATED; |                     // It's an external file.
 | ||||||
|  |                     return CoreConstants.OUTDATED; | ||||||
|  |                 } | ||||||
|  |             } else if (module.contents) { | ||||||
|  |                 const mainFile = module.contents[0]; | ||||||
|  |                 if (mainFile && mainFile.isexternalfile) { | ||||||
|  |                     return CoreConstants.OUTDATED; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -138,6 +138,37 @@ export class CoreMimetypeUtilsProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Get the URL of the icon of an extension. | ||||||
|  |      * | ||||||
|  |      * @param {string} extension Extension. | ||||||
|  |      * @return {string} Icon URL. | ||||||
|  |      */ | ||||||
|  |     getExtensionIcon(extension: string): string { | ||||||
|  |         const icon = this.getExtensionIconName(extension) || 'unknown'; | ||||||
|  | 
 | ||||||
|  |         return this.getFileIconForType(icon); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Get the name of the icon of an extension. | ||||||
|  |      * | ||||||
|  |      * @param {string} extension Extension. | ||||||
|  |      * @return {string} Icon. Undefined if not found. | ||||||
|  |      */ | ||||||
|  |     getExtensionIconName(extension: string): string { | ||||||
|  |         if (this.extToMime[extension]) { | ||||||
|  |             if (this.extToMime[extension].icon) { | ||||||
|  |                 return this.extToMime[extension].icon; | ||||||
|  |             } else { | ||||||
|  |                 const type = this.extToMime[extension].type.split('/')[0]; | ||||||
|  |                 if (type == 'video' || type == 'text' || type == 'image' || type == 'document' || type == 'audio') { | ||||||
|  |                     return type; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Get the "type" (string) of an extension, something like "image", "video" or "audio". |      * Get the "type" (string) of an extension, something like "image", "video" or "audio". | ||||||
|      * |      * | ||||||
| @ -172,19 +203,8 @@ export class CoreMimetypeUtilsProvider { | |||||||
|      * @return {string} The path to a file icon. |      * @return {string} The path to a file icon. | ||||||
|      */ |      */ | ||||||
|     getFileIcon(filename: string): string { |     getFileIcon(filename: string): string { | ||||||
|         const ext = this.getFileExtension(filename); |         const ext = this.getFileExtension(filename), | ||||||
|         let icon = 'unknown'; |             icon = this.getExtensionIconName(ext) || 'unknown'; | ||||||
| 
 |  | ||||||
|         if (ext && this.extToMime[ext]) { |  | ||||||
|             if (this.extToMime[ext].icon) { |  | ||||||
|                 icon = this.extToMime[ext].icon; |  | ||||||
|             } else { |  | ||||||
|                 const type = this.extToMime[ext].type.split('/')[0]; |  | ||||||
|                 if (type == 'video' || type == 'text' || type == 'image' || type == 'document' || type == 'audio') { |  | ||||||
|                     icon = type; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         return this.getFileIconForType(icon); |         return this.getFileIconForType(icon); | ||||||
|     } |     } | ||||||
| @ -407,6 +427,30 @@ export class CoreMimetypeUtilsProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Get the icon of a mimetype. | ||||||
|  |      * | ||||||
|  |      * @param {string} mimetype Mimetype. | ||||||
|  |      * @return {string} Type of the mimetype. | ||||||
|  |      */ | ||||||
|  |     getMimetypeIcon(mimetype: string): string { | ||||||
|  |         mimetype = mimetype.split(';')[0]; // Remove codecs from the mimetype if any.
 | ||||||
|  | 
 | ||||||
|  |         const extensions = this.mimeToExt[mimetype] || []; | ||||||
|  |         let icon = 'unknown'; | ||||||
|  | 
 | ||||||
|  |         for (let i = 0; i < extensions.length; i++) { | ||||||
|  |             const iconName = this.getExtensionIconName(extensions[i]); | ||||||
|  | 
 | ||||||
|  |             if (iconName) { | ||||||
|  |                 icon = iconName; | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return this.getFileIconForType(icon); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Given a group name, return the translated name. |      * Given a group name, return the translated name. | ||||||
|      * |      * | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user