@@ -20,14 +20,32 @@ angular.module('mm.addons.mod_folder')
2020 * @module mm.addons.mod_folder
2121 * @ngdoc service
2222 * @name $mmaModFolder
23+ * @todo Adding a new file in a folder updates the revision of all the files, so they're all shown as outdated.
24+ * To ignore revision in folders we'll have to modify $mmCoursePrefetchDelegate, mm-file and $mmFilepool.
2325 */
24- . factory ( '$mmaModFolder' , function ( $mmSite , $mmUtil , $mmCourse , $q ) {
26+ . factory ( '$mmaModFolder' , function ( $mmSite , $mmCourse , $q , $mmFilepool , mmaModFolderComponent ) {
2527 var self = { } ;
2628
29+ /**
30+ * Download all the content.
31+ *
32+ * @module mm.addons.mod_folder
33+ * @ngdoc method
34+ * @name $mmaModFolder#downloadAllContent
35+ * @param {Object } module The module object.
36+ * @return {Promise } Promise resolved when all content is downloaded. Data returned is not reliable.
37+ */
38+ self . downloadAllContent = function ( module ) {
39+ var files = self . getDownloadableFiles ( module ) ,
40+ revision = $mmFilepool . getRevisionFromFileList ( module . contents ) ,
41+ timemod = $mmFilepool . getTimemodifiedFromFileList ( module . contents ) ;
42+ return $mmFilepool . downloadPackage ( $mmSite . getId ( ) , files , mmaModFolderComponent , module . id , revision , timemod ) ;
43+ } ;
44+
2745 /**
2846 * Format folder contents, creating directory structure.
2947 *
30- * @module mm.addons.mod_url
48+ * @module mm.addons.mod_folder
3149 * @ngdoc method
3250 * @name $mmaModFolder#formatContents
3351 * @param {Object[] } contents Folder contents.
@@ -94,6 +112,40 @@ angular.module('mm.addons.mod_folder')
94112 return folders . concat ( files ) ;
95113 } ;
96114
115+ /**
116+ * Returns a list of files that can be downloaded.
117+ *
118+ * @module mm.addons.mod_folder
119+ * @ngdoc method
120+ * @name $mmaModFolder#getDownloadableFiles
121+ * @param {Object } module The module object returned by WS.
122+ * @return {Object[] } List of files.
123+ */
124+ self . getDownloadableFiles = function ( module ) {
125+ var files = [ ] ;
126+
127+ angular . forEach ( module . contents , function ( content ) {
128+ if ( self . isFileDownloadable ( content ) ) {
129+ files . push ( content ) ;
130+ }
131+ } ) ;
132+
133+ return files ;
134+ } ;
135+
136+ /**
137+ * Check if a file is downloadable. The file param must have a 'type' attribute like in core_course_get_contents response.
138+ *
139+ * @module mm.addons.mod_folder
140+ * @ngdoc method
141+ * @name $mmaModFolder#isFileDownloadable
142+ * @param {Object } file File to check.
143+ * @return {Boolean } True if downloadable, false otherwise.
144+ */
145+ self . isFileDownloadable = function ( file ) {
146+ return file . type === 'file' ;
147+ } ;
148+
97149 /**
98150 * Report a folder as being viewed.
99151 *
@@ -113,5 +165,21 @@ angular.module('mm.addons.mod_folder')
113165 return $q . reject ( ) ;
114166 } ;
115167
168+ /**
169+ * Prefetch the content.
170+ *
171+ * @module mm.addons.mod_folder
172+ * @ngdoc method
173+ * @name $mmaModFolder#prefetchContent
174+ * @param {Object } module The module object.
175+ * @return {Promise } Promise resolved when all content is downloaded. Data returned is not reliable.
176+ */
177+ self . prefetchContent = function ( module ) {
178+ var files = self . getDownloadableFiles ( module ) ,
179+ revision = $mmFilepool . getRevisionFromFileList ( module . contents ) ,
180+ timemod = $mmFilepool . getTimemodifiedFromFileList ( module . contents ) ;
181+ return $mmFilepool . prefetchPackage ( $mmSite . getId ( ) , files , mmaModFolderComponent , module . id , revision , timemod ) ;
182+ } ;
183+
116184 return self ;
117185} ) ;
0 commit comments