Skip to content

Commit 2959209

Browse files
committed
Merge pull request #477 from dpalou/MOBILE-1554
Mobile 1554
2 parents ebb97da + 9ed9d7f commit 2959209

File tree

13 files changed

+453
-99
lines changed

13 files changed

+453
-99
lines changed

www/addons/mod_book/services/handlers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ angular.module('mm.addons.mod_book')
6868
e.preventDefault();
6969
e.stopPropagation();
7070
var size = $mmaModBookPrefetchHandler.getDownloadSize(module);
71-
$mmCourseHelper.prefetchModule($mmaModBook, module, size, false);
71+
$mmCourseHelper.prefetchModule($scope, $mmaModBook, module, size, false);
7272
}
7373
};
7474

@@ -80,7 +80,7 @@ angular.module('mm.addons.mod_book')
8080
e.preventDefault();
8181
e.stopPropagation();
8282
var size = $mmaModBookPrefetchHandler.getDownloadSize(module);
83-
$mmCourseHelper.prefetchModule($mmaModBook, module, size, true);
83+
$mmCourseHelper.prefetchModule($scope, $mmaModBook, module, size, true);
8484
}
8585
};
8686

www/addons/mod_folder/services/handlers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ angular.module('mm.addons.mod_folder')
7373

7474
// Check size and show confirmation if needed.
7575
var size = $mmaModFolderPrefetchHandler.getDownloadSize(module);
76-
$mmCourseHelper.prefetchModule($mmaModFolder, module, size, false);
76+
$mmCourseHelper.prefetchModule($scope, $mmaModFolder, module, size, false);
7777
}
7878

7979
downloadBtn = {

www/addons/mod_imscp/services/handlers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ angular.module('mm.addons.mod_imscp')
7474
e.preventDefault();
7575
e.stopPropagation();
7676
var size = $mmaModImscpPrefetchHandler.getDownloadSize(module);
77-
$mmCourseHelper.prefetchModule($mmaModImscp, module, size, false);
77+
$mmCourseHelper.prefetchModule($scope, $mmaModImscp, module, size, false);
7878
}
7979
};
8080

@@ -86,7 +86,7 @@ angular.module('mm.addons.mod_imscp')
8686
e.preventDefault();
8787
e.stopPropagation();
8888
var size = $mmaModImscpPrefetchHandler.getDownloadSize(module);
89-
$mmCourseHelper.prefetchModule($mmaModImscp, module, size, true);
89+
$mmCourseHelper.prefetchModule($scope, $mmaModImscp, module, size, true);
9090
}
9191
};
9292

www/addons/mod_page/services/handlers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ angular.module('mm.addons.mod_page')
6868
e.preventDefault();
6969
e.stopPropagation();
7070
var size = $mmaModPagePrefetchHandler.getDownloadSize(module);
71-
$mmCourseHelper.prefetchModule($mmaModPage, module, size, false);
71+
$mmCourseHelper.prefetchModule($scope, $mmaModPage, module, size, false);
7272
}
7373
};
7474

@@ -80,7 +80,7 @@ angular.module('mm.addons.mod_page')
8080
e.preventDefault();
8181
e.stopPropagation();
8282
var size = $mmaModPagePrefetchHandler.getDownloadSize(module);
83-
$mmCourseHelper.prefetchModule($mmaModPage, module, size, true);
83+
$mmCourseHelper.prefetchModule($scope, $mmaModPage, module, size, true);
8484
}
8585
};
8686

www/addons/mod_resource/services/handlers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ angular.module('mm.addons.mod_resource')
6868
e.preventDefault();
6969
e.stopPropagation();
7070
var size = $mmaModResourcePrefetchHandler.getDownloadSize(module);
71-
$mmCourseHelper.prefetchModule($mmaModResource, module, size, false);
71+
$mmCourseHelper.prefetchModule($scope, $mmaModResource, module, size, false);
7272
}
7373
};
7474

@@ -80,7 +80,7 @@ angular.module('mm.addons.mod_resource')
8080
e.preventDefault();
8181
e.stopPropagation();
8282
var size = $mmaModResourcePrefetchHandler.getDownloadSize(module);
83-
$mmCourseHelper.prefetchModule($mmaModResource, module, size, true);
83+
$mmCourseHelper.prefetchModule($scope, $mmaModResource, module, size, true);
8484
}
8585
};
8686

www/addons/mod_resource/services/resource.js

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ angular.module('mm.addons.mod_resource')
2222
* @name $mmaModResource
2323
*/
2424
.factory('$mmaModResource', function($mmFilepool, $mmSite, $mmUtil, $mmFS, $http, $log, $q, $sce, $mmApp, $mmSitesManager,
25-
mmaModResourceComponent) {
25+
mmaModResourceComponent, mmCoreNotDownloaded, mmCoreDownloading, mmCoreDownloaded) {
2626
$log = $log.getInstance('$mmaModResource');
2727

2828
var self = {};
@@ -356,20 +356,61 @@ angular.module('mm.addons.mod_resource')
356356
siteId = $mmSite.getId(),
357357
revision = $mmFilepool.getRevisionFromFileList(files),
358358
timeMod = $mmFilepool.getTimemodifiedFromFileList(files),
359+
component = mmaModResourceComponent,
360+
url = contents[0].fileurl,
361+
fixedUrl = $mmSite.fixPluginfileURL(url),
359362
promise;
360363

361364
if ($mmFS.isAvailable()) {
362365
// The file system is available.
363-
promise = $mmFilepool.downloadPackage(siteId, files, mmaModResourceComponent, moduleId, revision, timeMod).then(function() {
364-
return $mmFilepool.getUrlByUrl(siteId, contents[0].fileurl, mmaModResourceComponent, moduleId, timeMod);
366+
promise = $mmFilepool.getPackageStatus(siteId, component, moduleId, revision, timeMod).then(function(status) {
367+
var isWifi = !$mmApp.isNetworkAccessLimited(),
368+
isOnline = $mmApp.isOnline();
369+
370+
if (status === mmCoreDownloaded) {
371+
// Get the local file URL.
372+
return $mmFilepool.getUrlByUrl(siteId, url, component, moduleId, timeMod);
373+
} else if (status === mmCoreDownloading) {
374+
// Return the online URL.
375+
return fixedUrl;
376+
} else {
377+
if (!isOnline && status === mmCoreNotDownloaded) {
378+
// Not downloaded and we're offline, reject.
379+
return $q.reject();
380+
}
381+
382+
return $mmFilepool.shouldDownloadBeforeOpen(fixedUrl, contents[0].filesize).then(function() {
383+
// Download and then return the local URL.
384+
return $mmFilepool.downloadPackage(siteId, files, component, moduleId, revision, timeMod).then(function() {
385+
return $mmFilepool.getUrlByUrl(siteId, url, component, moduleId, timeMod);
386+
});
387+
}, function() {
388+
// Start the download if in wifi, but return the URL right away so the file is opened.
389+
if (isWifi && isOnline) {
390+
$mmFilepool.downloadPackage(siteId, files, component, moduleId, revision, timeMod);
391+
}
392+
393+
if (status === mmCoreNotDownloaded || isOnline) {
394+
// Not downloaded or outdated and online, return the online URL.
395+
return fixedUrl;
396+
} else {
397+
// Outdated but offline, so we return the local URL.
398+
return $mmFilepool.getUrlByUrl(siteId, url, component, moduleId, timeMod);
399+
}
400+
});
401+
}
365402
});
366403
} else {
367404
// We use the live URL.
368-
promise = $q.when($mmSite.fixPluginfileURL(url));
405+
promise = $q.when(fixedUrl);
369406
}
370407

371-
return promise.then(function(localUrl) {
372-
return $mmUtil.openFile(localUrl);
408+
return promise.then(function(url) {
409+
if (url.indexOf('http') === 0) {
410+
return $mmUtil.openOnlineFile(url);
411+
} else {
412+
return $mmUtil.openFile(url);
413+
}
373414
});
374415
};
375416

www/core/components/course/services/helper.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,14 @@ angular.module('mm.core.course')
314314
* @module mm.core.course
315315
* @ngdoc method
316316
* @name $mmCourseHelper#prefetchModule
317+
* @param {Object} scope Scope.
317318
* @param {Object} service Service implementing 'invalidateContent' and 'prefetchContent'.
318319
* @param {Object} module Module to download.
319320
* @param {Number} size Size of the module.
320321
* @param {Boolean} refresh True if refreshing, false otherwise.
321322
* @return {Promise} Promise resolved when downloaded.
322323
*/
323-
self.prefetchModule = function(service, module, size, refresh) {
324+
self.prefetchModule = function(scope, service, module, size, refresh) {
324325
// Show confirmation if needed.
325326
return $mmUtil.confirmDownloadSize(size).then(function() {
326327
// Invalidate content if refreshing and download the data.
@@ -329,7 +330,7 @@ angular.module('mm.core.course')
329330
// Ignore errors.
330331
}).then(function() {
331332
return service.prefetchContent(module).catch(function() {
332-
if (!$scope.$$destroyed) {
333+
if (!scope.$$destroyed) {
333334
$mmUtil.showErrorModal('mm.core.errordownloading', true);
334335
}
335336
});

www/core/directives/external_content.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ angular.module('mm.core')
3131
* Attributes accepted:
3232
* - siteid: Reference to the site ID if different than the site the user is connected to.
3333
*/
34-
.directive('mmExternalContent', function($log, $mmFilepool, $mmSite, $mmSitesManager, $mmUtil, $q) {
34+
.directive('mmExternalContent', function($log, $mmFilepool, $mmSite, $mmSitesManager, $mmUtil, $q, $mmApp) {
3535
$log = $log.getInstance('mmExternalContent');
3636

3737
/**
@@ -99,6 +99,27 @@ angular.module('mm.core')
9999
} else {
100100
dom.setAttribute(targetAttr, finalUrl);
101101
}
102+
103+
// Set events to download big files (not downloaded automatically).
104+
if (finalUrl.indexOf('http') === 0 &&
105+
(dom.tagName == 'VIDEO' || dom.tagName == 'AUDIO' || dom.tagName == 'A' || dom.tagName == 'SOURCE')) {
106+
var eventName = dom.tagName == 'A' ? 'click' : 'play';
107+
108+
if (dom.tagName == 'SOURCE') {
109+
dom = $mmUtil.closest(dom, 'video,audio');
110+
if (!dom) {
111+
return;
112+
}
113+
}
114+
115+
angular.element(dom).on(eventName, function() {
116+
// User played media or opened a downloadable link.
117+
// Download the file if in wifi and it hasn't been downloaded already (for big files).
118+
if (!$mmApp.isNetworkAccessLimited()) {
119+
fn(siteId, url, component, componentId, undefined, false);
120+
}
121+
});
122+
}
102123
});
103124
});
104125
}

0 commit comments

Comments
 (0)