diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2019-11-04 13:55:29 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2019-11-26 08:16:32 +0000 |
commit | d50eb7f9d107c919c84fe8ac083a9c10875f02f1 (patch) | |
tree | 15ee38f6db81f98fbbb5102da44c92b947a48552 | |
parent | 7bac504eb60c9783f29632c4f405eb61ca9236c5 (diff) |
Add function for reading separate data files in ExtractArchiveOperation
Split reading of data files into its own public function so this can be
used elsewhere if needed. Also move deleting of the data file into its
own function.
Change-Id: I63f758be8863c8a19069c97d726dc573bf240484
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
-rw-r--r-- | src/libs/installer/extractarchiveoperation.cpp | 72 | ||||
-rw-r--r-- | src/libs/installer/extractarchiveoperation.h | 6 |
2 files changed, 53 insertions, 25 deletions
diff --git a/src/libs/installer/extractarchiveoperation.cpp b/src/libs/installer/extractarchiveoperation.cpp index e790920d1..ba0591c84 100644 --- a/src/libs/installer/extractarchiveoperation.cpp +++ b/src/libs/installer/extractarchiveoperation.cpp @@ -144,37 +144,18 @@ bool ExtractArchiveOperation::undoOperation() // For backward compatibility, check if "files" can be converted to QStringList. // If yes, files are listed in .dat instead of in a separate file. bool useStringListType(value(QLatin1String("files")).type() == QVariant::StringList); + QString targetDir = arguments().at(1); QStringList files; if (useStringListType) { files = value(QLatin1String("files")).toStringList(); - startUndoProcess(files); } else { - const QString filePath = value(QLatin1String("files")).toString(); - QString targetDir = arguments().at(1); - // Does not change target on non macOS platforms. - if (QInstaller::isInBundle(targetDir, &targetDir)) - targetDir = QDir::cleanPath(targetDir + QLatin1String("/..")); - QString fileName = replacePath(filePath, QLatin1String(scRelocatable), targetDir); - QFile file(fileName); - - if (file.open(QIODevice::ReadOnly)) { - QDataStream in(&file); - in >> files; - for (int i = 0; i < files.count(); ++i) - files[i] = replacePath(files.at(i), QLatin1String(scRelocatable), targetDir); - startUndoProcess(files); - QFileInfo fileInfo(file); - file.remove(); - QDir directory(fileInfo.absoluteDir()); - if (directory.exists() && directory.isEmpty()) - directory.rmdir(directory.path()); - } else { - setError(UserDefinedError); - setErrorString(tr("Cannot open file \"%1\" for reading: %2") - .arg(QDir::toNativeSeparators(file.fileName())).arg(file.errorString())); + if (!readDataFileContents(targetDir, &files)) return false; - } } + startUndoProcess(files); + if (!useStringListType) + deleteDataFile(m_relocatedDataFileName); + return true; } @@ -193,9 +174,50 @@ void ExtractArchiveOperation::startUndoProcess(const QStringList &files) thread->deleteLater(); } +void ExtractArchiveOperation::deleteDataFile(const QString &fileName) +{ + if (fileName.isEmpty()) { + qWarning() << Q_FUNC_INFO << "data file name cannot be empty."; + return; + } + QFile file(fileName); + QFileInfo fileInfo(file); + if (file.remove()) { + QDir directory(fileInfo.absoluteDir()); + if (directory.exists() && directory.isEmpty()) + directory.rmdir(directory.path()); + } else { + qWarning() << "Cannot remove data file" << file.fileName(); + } +} + bool ExtractArchiveOperation::testOperation() { return true; } +bool ExtractArchiveOperation::readDataFileContents(QString &targetDir, QStringList *resultList) +{ + const QString filePath = value(QLatin1String("files")).toString(); + // Does not change target on non macOS platforms. + if (QInstaller::isInBundle(targetDir, &targetDir)) + targetDir = QDir::cleanPath(targetDir + QLatin1String("/..")); + m_relocatedDataFileName = replacePath(filePath, QLatin1String(scRelocatable), targetDir); + QFile file(m_relocatedDataFileName); + + if (file.open(QIODevice::ReadOnly)) { + QDataStream in(&file); + in >> *resultList; + for (int i = 0; i < resultList->count(); ++i) + resultList->replace(i, replacePath(resultList->at(i), QLatin1String(scRelocatable), targetDir)); + + } else { + setError(UserDefinedError); + setErrorString(tr("Cannot open file \"%1\" for reading: %2") + .arg(QDir::toNativeSeparators(file.fileName())).arg(file.errorString())); + return false; + } + return true; +} + } // namespace QInstaller diff --git a/src/libs/installer/extractarchiveoperation.h b/src/libs/installer/extractarchiveoperation.h index e706159ed..fa05d403a 100644 --- a/src/libs/installer/extractarchiveoperation.h +++ b/src/libs/installer/extractarchiveoperation.h @@ -48,12 +48,18 @@ public: bool undoOperation(); bool testOperation(); + bool readDataFileContents(QString &targetDir, QStringList *resultList); + Q_SIGNALS: void outputTextChanged(const QString &progress); void progressChanged(double); private: void startUndoProcess(const QStringList &files); + void deleteDataFile(const QString &fileName); + +private: + QString m_relocatedDataFileName; private: class Callback; |