summaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--src/libs/installer/extractarchiveoperation.cpp72
-rw-r--r--src/libs/installer/extractarchiveoperation.h6
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;