29#include <QStandardPaths>
33 : mDir( new QTemporaryDir() )
38 : mFiles( other.mFiles )
39 , mDir( new QTemporaryDir() )
47 mFiles = other.mFiles;
48 mDir.reset(
new QTemporaryDir() );
61 mDir.reset(
new QTemporaryDir() );
67 QTemporaryFile tmpFilePath( QDir::temp().absoluteFilePath( QStringLiteral(
"qgis-project-XXXXXX.zip" ) ) );
70 const QString tempPath = tmpFilePath.fileName();
75 const QString err = QObject::tr(
"Unable to zip content" );
80 QString target {filename};
83 if ( QFile::exists( target ) )
86 const QFileInfo targetFileInfo( target );
87 target = targetFileInfo.canonicalFilePath();
89 if ( QFile::exists( target ) )
90 QFile::remove( target );
97 dwAttrs = GetFileAttributes( qUtf16Printable( tempPath ) );
98 SetFileAttributes( qUtf16Printable( tempPath ), dwAttrs & ~ FILE_ATTRIBUTE_TEMPORARY );
100 dwAttrs = GetFileAttributes( tempPath.toLocal8Bit( ).data( ) );
101 SetFileAttributes( tempPath.toLocal8Bit( ).data( ), dwAttrs & ~ FILE_ATTRIBUTE_TEMPORARY );
107 if ( !QFile::rename( tempPath, target ) )
109 const QString err = QObject::tr(
"Unable to save zip file '%1'" ).arg( target );
125 mFiles.append( file );
132 if ( !file.isEmpty() && mFiles.contains( file ) && QFile::exists( file ) )
133 rc = QFile::remove( file );
135 mFiles.removeOne( file );
147 return QFileInfo::exists( mDir->path() );
152 const auto constFiles =
files();
153 for (
const QString &file : constFiles )
155 const QFileInfo fileInfo( file );
156 if ( fileInfo.suffix().compare( QLatin1String(
"qgs" ), Qt::CaseInsensitive ) == 0 )
180 const QStringList fileList =
files();
181 for (
const QString &file : fileList )
183 const QFileInfo fileInfo( file );
184 if ( fileInfo.suffix().compare( extension, Qt::CaseInsensitive ) == 0 )
Manages zip/unzip operations for an archive.
QgsArchive & operator=(const QgsArchive &other)
virtual bool unzip(const QString &zipFilename)
Clear the current content of this archive and unzip.
bool zip(const QString &zipFilename)
Zip the content of this archive.
void clear()
Clear the current content of this archive and create a new temporary directory.
bool exists() const
Returns true if the archive exists on the filesystem, false otherwise.
void addFile(const QString &filename)
Add a new file to this archive.
bool removeFile(const QString &filename)
Remove a file from this archive and from the filesystem.
QString dir() const
Returns the current temporary directory.
QStringList files() const
Returns the list of files within this archive.
static QString extension()
Returns the extension used for auxiliary databases.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
QString projectFile() const
Returns the current .qgs project file or an empty string if there's none.
QString auxiliaryStorageFile() const
Returns the current .qgd auxiliary storage file or an empty string if there's none.
bool clearProjectFile()
Remove the current .qgs project file from the temporary directory.
bool unzip(const QString &zipFilename) override
Clear the current content of this archive and unzip.
static bool zip(const QString &zip, const QStringList &files, bool overwrite=false)
Zip the list of files in the zip file.
static bool unzip(const QString &zip, const QString &dir, QStringList &files, bool checkConsistency=true)
Unzip a zip file in an output directory.