summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/extractarchiveoperation.cpp
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2019-11-04 13:55:29 +0200
committerKatja Marttila <katja.marttila@qt.io>2019-11-26 08:16:32 +0000
commitd50eb7f9d107c919c84fe8ac083a9c10875f02f1 (patch)
tree15ee38f6db81f98fbbb5102da44c92b947a48552 /src/libs/installer/extractarchiveoperation.cpp
parent7bac504eb60c9783f29632c4f405eb61ca9236c5 (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>
Diffstat (limited to 'src/libs/installer/extractarchiveoperation.cpp')
-rw-r--r--src/libs/installer/extractarchiveoperation.cpp72
1 files changed, 47 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