Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsarchive.h 3 : : ---------------- 4 : : 5 : : begin : July 07, 2017 6 : : copyright : (C) 2017 by Paul Blottiere 7 : : email : paul.blottiere@oslandia.com 8 : : ***************************************************************************/ 9 : : 10 : : /*************************************************************************** 11 : : * * 12 : : * This program is free software; you can redistribute it and/or modify * 13 : : * it under the terms of the GNU General Public License as published by * 14 : : * the Free Software Foundation; either version 2 of the License, or * 15 : : * (at your option) any later version. * 16 : : * * 17 : : ***************************************************************************/ 18 : : 19 : : #ifndef QGSARCHIVE_H 20 : : #define QGSARCHIVE_H 21 : : 22 : : #include "qgis_core.h" 23 : : 24 : : #include <QStringList> 25 : : #include <QTemporaryFile> 26 : : #include <QTemporaryDir> 27 : : #include <memory> 28 : : 29 : : /** 30 : : * \class QgsArchive 31 : : * \ingroup core 32 : : * \brief Class allowing to manage the zip/unzip actions 33 : : * \since QGIS 3.0 34 : : */ 35 : : class CORE_EXPORT QgsArchive 36 : : { 37 : : public: 38 : : 39 : : /** 40 : : * Constructor 41 : : */ 42 : : QgsArchive(); 43 : : 44 : : /** 45 : : * Copy constructor 46 : : */ 47 : : QgsArchive( const QgsArchive &other ); 48 : : 49 : : QgsArchive &operator=( const QgsArchive &other ); 50 : : 51 : : /** 52 : : * Destructor 53 : : */ 54 : 3 : virtual ~QgsArchive() = default; 55 : : 56 : : /** 57 : : * Zip the content of this archive 58 : : * \param zipFilename The name of the zip to generate 59 : : * \returns FALSE if something goes wrong, TRUE otherwise 60 : : */ 61 : : bool zip( const QString &zipFilename ); 62 : : 63 : : /** 64 : : * Clear the current content of this archive and unzip. Files are unzipped 65 : : * in the temporary directory. 66 : : * \param zipFilename The zip file to unzip 67 : : * \returns TRUE if unzip action is a success, FALSE otherwise 68 : : */ 69 : : virtual bool unzip( const QString &zipFilename ); 70 : : 71 : : /** 72 : : * Clear the current content of this archive and create a new temporary 73 : : * directory. 74 : : */ 75 : : void clear(); 76 : : 77 : : /** 78 : : * Add a new file to this archive. During a zip action, this file will be 79 : : * part of the resulting zipped file. 80 : : * \param filename A file to add when zipping this archive 81 : : */ 82 : : void addFile( const QString &filename ); 83 : : 84 : : /** 85 : : * Remove a file from this archive and from the filesystem. 86 : : * \param filename The path of the file to remove 87 : : * \returns TRUE if the file has been removed from the filesystem, FALSE otherwise 88 : : */ 89 : : bool removeFile( const QString &filename ); 90 : : 91 : : /** 92 : : * Returns the list of files within this archive 93 : : */ 94 : : QStringList files() const; 95 : : 96 : : /** 97 : : * Returns the current temporary directory. 98 : : */ 99 : : QString dir() const; 100 : : 101 : : private: 102 : : // content of the archive 103 : : QStringList mFiles; 104 : : 105 : : // used when unzip is performed 106 : : std::unique_ptr<QTemporaryDir> mDir; 107 : : }; 108 : : 109 : : /** 110 : : * \class QgsProjectArchive 111 : : * \ingroup core 112 : : * \brief Class allowing to manage the zip/unzip actions on project file 113 : : * \since QGIS 3.0 114 : : */ 115 : 11 : class CORE_EXPORT QgsProjectArchive : public QgsArchive 116 : : { 117 : : public: 118 : : 119 : : /** 120 : : * Clear the current content of this archive and unzip. If a project file 121 : : * is found in the content, then this archive may be considered as a valid 122 : : * one. Files are unzipped in the temporary directory. 123 : : * \param zipFilename The zip file to unzip 124 : : * \returns TRUE if a project file has been found, FALSE otherwise 125 : : */ 126 : : bool unzip( const QString &zipFilename ) override; 127 : : 128 : : /** 129 : : * Returns the current .qgs project file or an empty string if there's none 130 : : */ 131 : : QString projectFile() const; 132 : : 133 : : /** 134 : : * Remove the current .qgs project file from the temporary directory. 135 : : * \returns TRUE if the file is well removed, FALSE otherwise 136 : : */ 137 : : bool clearProjectFile(); 138 : : 139 : : /** 140 : : * Returns the current .qgd auxiliary storage file or an empty string if 141 : : * there's none 142 : : */ 143 : : QString auxiliaryStorageFile() const; 144 : : }; 145 : : 146 : : #endif