mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
106 lines
3.8 KiB
C++
106 lines
3.8 KiB
C++
//
|
|
// ArchiveDownloadInterface.h
|
|
// libraries/script-engine/src
|
|
//
|
|
// Created by Elisa Lupin-Jimenez on 6/28/16.
|
|
// Copyright 2016 High Fidelity, Inc.
|
|
// Copyright 2023 Overte e.V.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
/// @addtogroup Interface
|
|
/// @{
|
|
|
|
#ifndef hifi_ArchiveDownloadInterface_h
|
|
#define hifi_ArchiveDownloadInterface_h
|
|
|
|
#include <QtCore/QObject>
|
|
#include <QtCore/QUrl>
|
|
#include <QFileInfo>
|
|
#include <QString>
|
|
|
|
/**
|
|
* @brief The ArchiveDownloadInterface API provides some facilities for working with the file system.
|
|
*/
|
|
class ArchiveDownloadInterface : public QObject {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
ArchiveDownloadInterface(QObject* parent);
|
|
|
|
public slots:
|
|
|
|
/**
|
|
* @brief Extracts a filename from a URL, where the filename is specified in the query part of the URL as filename=.
|
|
|
|
* @param url - The URL to extract the filename from.
|
|
* @return The filename specified in the URL; an empty string if no filename is specified.
|
|
*/
|
|
QString convertUrlToPath(QUrl url);
|
|
|
|
/**
|
|
* @brief Unzips a file in the local file system to a new, unique temporary directory.
|
|
* @param 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
|
|
* getTempDir).
|
|
* @param url - Not used.
|
|
* @param autoAdd - Not used by user scripts. The value is simply passed through to the
|
|
* unzipResult signal.
|
|
* @param 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 isBlocks - Not used by user scripts. The value is simply passed through to the
|
|
* unzipResult signal.
|
|
* @example (Old example from JS, needs to be converted)
|
|
* 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);
|
|
|
|
/**
|
|
* Creates a new, unique directory for temporary use.
|
|
* @return The path of the newly created temporary directory.
|
|
*/
|
|
QString getTempDir();
|
|
|
|
signals:
|
|
|
|
/**
|
|
* Triggered when runUnzip completes.
|
|
* @param zipFile - The file that was unzipped.
|
|
* @param 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 autoAdd - The value that runUnzip was called with.
|
|
* @param isZip - true if 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 isBlocks - The value that runUnzip was called with.
|
|
*/
|
|
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_ArchiveDownloadInterface_h
|
|
|
|
/// @}
|