MOBILE-2701 resource: Don't allow downloading Nextcloud files

main
Dani Palou 2018-12-03 17:04:39 +01:00
parent 146b0ec7d8
commit 85e57efcca
3 changed files with 35 additions and 3 deletions

View File

@ -14,6 +14,7 @@
import { Component, Injector } from '@angular/core';
import { CoreAppProvider } from '@providers/app';
import { CoreSitesProvider } from '@providers/sites';
import { CoreCourseProvider } from '@core/course/providers/course';
import { CoreCourseModuleMainResourceComponent } from '@core/course/classes/main-resource-component';
import { AddonModResourceProvider } from '../../providers/resource';
@ -37,7 +38,7 @@ export class AddonModResourceIndexComponent extends CoreCourseModuleMainResource
constructor(injector: Injector, private resourceProvider: AddonModResourceProvider, private courseProvider: CoreCourseProvider,
private appProvider: CoreAppProvider, private prefetchHandler: AddonModResourcePrefetchHandler,
private resourceHelper: AddonModResourceHelperProvider) {
private resourceHelper: AddonModResourceHelperProvider, private sitesProvider: CoreSitesProvider) {
super(injector);
}
@ -142,6 +143,13 @@ export class AddonModResourceIndexComponent extends CoreCourseModuleMainResource
* Opens a file.
*/
open(): void {
this.resourceHelper.openModuleFile(this.module, this.courseId);
this.prefetchHandler.isDownloadable(this.module, this.courseId).then((downloadable) => {
if (downloadable) {
this.resourceHelper.openModuleFile(this.module, this.courseId);
} else {
// The resource cannot be downloaded, open the activity in browser.
return this.sitesProvider.getCurrentSite().openInBrowserWithAutoLoginIfSameSite(this.module.url);
}
});
}
}

View File

@ -113,7 +113,7 @@ export class AddonModResourceHelperProvider {
* @return {boolean} Whether the resource should be displayed embeded.
*/
isDisplayedEmbedded(module: any, display: number): boolean {
if (!module.contents.length || !this.fileProvider.isAvailable()) {
if (!module.contents.length || !this.fileProvider.isAvailable() || this.isNextcloudFile(module)) {
return false;
}
@ -139,6 +139,16 @@ export class AddonModResourceHelperProvider {
return mimetype == 'text/html';
}
/**
* Check if the resource is a Nextcloud file.
*
* @param {any} module Module to check.
* @return {boolean} Whether it's a Nextcloud file.
*/
isNextcloudFile(module: any): boolean {
return module.contents && module.contents[0] && module.contents[0].repositorytype == 'nextcloud';
}
/**
* Opens a file of the resource activity.
*

View File

@ -122,6 +122,20 @@ export class AddonModResourcePrefetchHandler extends CoreCourseResourcePrefetchH
return Promise.all(promises);
}
/**
* Check if a resource is downloadable.
*
* @param {any} module Module to check.
* @param {number} courseId Course ID the module belongs to.
* @return {Promise<boolean>} Promise resolved with true if downloadable, resolved with false otherwise.
*/
isDownloadable(module: any, courseId: number): Promise<boolean> {
// Don't allow downloading Nextcloud files for now.
return this.loadContents(module, courseId, false).then(() => {
return !this.resourceHelper.isNextcloudFile(module);
});
}
/**
* Whether or not the handler is enabled on a site level.
*