/** * zimArchiveLoader.js: Functions to search and read ZIM archives. * * Copyright 2015 Mossroy and contributors * License GPL v3: * * This file is part of Kiwix. * * Kiwix is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Kiwix is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Kiwix (file LICENSE-GPLv3.txt). If not, see */ 'use strict'; define(['zimArchive', 'jquery'], function(zimArchive, jQuery) { /** * Create a ZIMArchive from DeviceStorage location * @param {DeviceStorage} storage * @param {String} path * @param {callbackZIMArchive} callbackReady * @param {callbackZIMArchive} callbackError * @returns {ZIMArchive} */ function loadArchiveFromDeviceStorage(storage, path, callbackReady, callbackError) { return new zimArchive.ZIMArchive(storage, path, callbackReady, callbackError); }; /** * Create a ZIMArchive from Files * @param {Array.} files * @param {callbackZIMArchive} callbackReady * @param {callbackZIMArchive} callbackError * @returns {ZIMArchive} */ function loadArchiveFromFiles(files, callbackReady, callbackError) { if (files.length >= 1) { return new zimArchive.ZIMArchive(files, null, callbackReady, callbackError); } }; /** * @callback callbackPathList * @param {Array.} directoryList List of directories */ /** * Scans the DeviceStorage for archives * * @param {Array.} storages List of DeviceStorage instances * @param {callbackPathList} callbackFunction Function to call with the list of directories where archives are found * @param {callbackPathList} callbackError Function to call in case of an error */ function scanForArchives(storages, callbackFunction, callbackError) { var directories = []; var promises = jQuery.map(storages, function(storage) { return storage.scanForArchives() .then(function(dirs) { jQuery.merge(directories, dirs); return true; }); }); jQuery.when.apply(null, promises).then(function() { callbackFunction(directories); }).catch(function (error) { callbackError("Error scanning your device storage : " + error + ". If you're using the Firefox OS Simulator, please put the archives in " + "a 'fake-sdcard' directory inside your Firefox profile " + "(ex : ~/.mozilla/firefox/xxxx.default/extensions/fxos_2_x_simulator@mozilla.org/" + "profile/fake-sdcard/wikipedia_en_ray_charles_2015-06.zim)", "Error reading Device Storage"); }); }; /** * Functions and classes exposed by this module */ return { loadArchiveFromDeviceStorage: loadArchiveFromDeviceStorage, loadArchiveFromFiles: loadArchiveFromFiles, scanForArchives: scanForArchives }; });