// // FileScriptingInterface.h // libraries/script-engine/src // // Created by Elisa Lupin-Jimenez on 6/28/16. // Copyright 2016 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #ifndef hifi_FileScriptingInterface_h #define hifi_FileScriptingInterface_h #include #include #include /**jsdoc * The File API provides some facilities for working with the file system. * * @namespace File * * @hifi-interface * @hifi-client-entity * @hifi-avatar * @hifi-server-entity * @hifi-assignment-client */ class FileScriptingInterface : public QObject { Q_OBJECT public: FileScriptingInterface(QObject* parent); public slots: /**jsdoc * Extracts a filename from a URL, where the filename is specified in the query part of the URL as filename=. * @function File.convertUrlToPath * @param {string} url - The URL to extract the filename from. * @returns {string} The filename specified in the URL; an empty string if no filename is specified. * @example Extract a filename from a URL. * var url = "http://domain.tld/path/page.html?filename=file.ext"; * print("File name: " + File.convertUrlToPath(url)); // file.ext */ QString convertUrlToPath(QUrl url); /**jsdoc * Unzips a file in the local file system to a new, unique temporary directory. * @function File.runUnzip * @param {string} path - The path of the zip file in the local file system. May have a leading "file:///". * Need not have a ".zip" extension if it is in a temporary directory (as created by * {@link File.getTempDir|getTempDir}). * @param {string} url - Not used. * @param {boolean} autoAdd - Not used by user scripts. The value is simply passed through to the * {@link File.unzipResult|unzipResult} signal. * @param {boolean} isZip - Set to true if path has a ".zip" extension, * false if it doesn't (but should still be treated as a zip file). * @param {boolean} isBlocks - Not used by user scripts. The value is simply passed through to the * {@link File.unzipResult|unzipResult} signal. * @example Select and unzip a file. * File.unzipResult.connect(function (zipFile, unzipFiles, autoAdd, isZip, isBlocks) { * print("File.unzipResult()"); * print("- zipFile: " + zipFile); * print("- unzipFiles(" + unzipFiles.length + "): " + unzipFiles); * print("- autoAdd: " + autoAdd); * print("- isZip: " + isZip); * print("- isBlocks: " + isBlocks); * }); * * var zipFile = Window.browse("Select a Zip File", "", "*.zip"); * if (zipFile) { * File.runUnzip(zipFile, "", false, true, false); * } else { * print("Zip file not selected."); * } */ void runUnzip(QString path, QUrl url, bool autoAdd, bool isZip, bool isBlocks); /**jsdoc * Creates a new, unique directory for temporary use. * @function File.getTempDir * @returns {string} The path of the newly created temporary directory. * @example Create a temporary directory. * print("New temporary directory: " + File.getTempDir()); */ QString getTempDir(); signals: /**jsdoc * Triggered when {@link File.runUnzip|runUnzip} completes. * @function File.unzipResult * @param {string} zipFile - The file that was unzipped. * @param {string[]} unzipFiles - The paths of the unzipped files in a newly created temporary directory. Includes entries * for any subdirectories created. An empty array if the zipFile could not be unzipped. * @param {boolean} autoAdd - The value that {@link File.runUnzip|runUnzip} was called with. * @param {boolean} isZip - true if {@link File.runUnzip|runUnzip} was called with isZip == true, * unless there is no FBX or OBJ file in the unzipped file(s) in which case the value is false. * @param {boolean} isBlocks - The value that {@link File.runUnzip|runUnzip} was called with. * @returns {Signal} */ void unzipResult(QString zipFile, QStringList unzipFile, bool autoAdd, bool isZip, bool isBlocks); private: bool isTempDir(QString tempDir); bool hasModel(QStringList fileList); QStringList unzipFile(QString path, QString tempDir); void recursiveFileScan(QFileInfo file, QString* dirName); void downloadZip(QString path, const QString link); }; #endif // hifi_FileScriptingInterface_h