summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/settings.cpp
diff options
context:
space:
mode:
authorNiels Weber <niels.weber@digia.com>2014-11-11 09:32:20 +0100
committerNiels Weber <niels.weber@digia.com>2014-11-17 16:18:17 +0100
commit778af9e97d5652c84e027b3e3ccad62122fc92b6 (patch)
tree69f2508a9288c5fb57f8f91f0736cd9c0109256a /src/libs/installer/settings.cpp
parent32296ab72fd1fc6d460aef00dab74b14cb4120e9 (diff)
Allow spaces in RunProgramArguments
This changes the syntax of the RunProgramArguments entry in the config.xml. <Argument> sub tags need to be used to specify the RunProgramArguments now. Task-number: QTIFW-227 Change-Id: Ife007bf660cdcf4ff5e8e31bb9bb5ac2e5037616 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com> Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r--src/libs/installer/settings.cpp71
1 files changed, 52 insertions, 19 deletions
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index b47076ad7..6006e6349 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -40,6 +40,7 @@
#include <QtCore/QFileInfo>
#include <QtCore/QStringList>
+#include <QRegularExpression>
#include <QXmlStreamReader>
using namespace QInstaller;
@@ -90,23 +91,45 @@ static void raiseError(QXmlStreamReader &reader, const QString &error, Settings:
}
}
-static QStringList readTranslations(QXmlStreamReader &reader, Settings::ParseMode parseMode)
+static QStringList readArgumentAttributes(QXmlStreamReader &reader, Settings::ParseMode parseMode,
+ const QString &tagName, bool lc = false)
{
- QStringList translations;
- while (reader.readNextStartElement()) {
- if (reader.name() == QLatin1String("Translation")) {
- translations.append(reader.readElementText().toLower());
- } else {
- raiseError(reader, QString::fromLatin1("Unexpected element '%1'.").arg(reader.name().toString()),
- parseMode);
- }
+ QStringList arguments;
- if (!reader.attributes().isEmpty()) {
- raiseError(reader, QString::fromLatin1("Unexpected attribute for element '%1'.").arg(reader
- .name().toString()), parseMode);
+ while (QXmlStreamReader::TokenType token = reader.readNext()) {
+ switch (token) {
+ case QXmlStreamReader::StartElement: {
+ if (!reader.attributes().isEmpty()) {
+ raiseError(reader, QString::fromLatin1("Unexpected attribute for element '%1'.")
+ .arg(reader.name().toString()), parseMode);
+ return arguments;
+ } else {
+ if (reader.name().toString() == tagName) {
+ (lc) ? arguments.append(reader.readElementText().toLower()) :
+ arguments.append(reader.readElementText());
+ } else {
+ raiseError(reader, QString::fromLatin1("Unexpected element '%1'.").arg(reader.name()
+ .toString()), parseMode);
+ return arguments;
+ }
+ }
+ }
+ break;
+ case QXmlStreamReader::Characters: {
+ if (reader.isWhitespace())
+ continue;
+ arguments.append(reader.text().toString().split(QRegularExpression(QLatin1String("\\s+")),
+ QString::SkipEmptyParts));
+ }
+ break;
+ case QXmlStreamReader::EndElement: {
+ return arguments;
+ }
+ default:
+ break;
}
}
- return translations;
+ return arguments;
}
static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefault, Settings::ParseMode parseMode)
@@ -246,9 +269,11 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix,
if (s.d->m_data.contains(name))
reader.raiseError(QString::fromLatin1("Element '%1' has been defined before.").arg(name));
- if (name == scTranslations) {
- s.setTranslations(readTranslations(reader, parseMode));
- } else if (name == scRemoteRepositories) {
+ if (name == scTranslations) {
+ s.setTranslations(readArgumentAttributes(reader, parseMode, QLatin1String("Translation"), true));
+ } else if (name == scRunProgramArguments) {
+ s.setRunProgramArguments(readArgumentAttributes(reader, parseMode, QLatin1String("Argument")));
+ } else if (name == scRemoteRepositories) {
s.addDefaultRepositories(readRepositories(reader, true, parseMode));
} else {
s.d->m_data.insert(name, reader.readElementText(QXmlStreamReader::SkipChildElements));
@@ -386,11 +411,20 @@ QString Settings::runProgram() const
return d->m_data.value(scRunProgram).toString();
}
-QString Settings::runProgramArguments() const
+QStringList Settings::runProgramArguments() const
{
- return d->m_data.value(scRunProgramArguments).toString();
+ const QVariant variant = d->m_data.values(scRunProgramArguments);
+ if (variant.canConvert<QStringList>())
+ return variant.value<QStringList>();
+ return QStringList();
}
+void Settings::setRunProgramArguments(const QStringList &arguments)
+{
+ d->m_data.insert(scRunProgramArguments, arguments);
+}
+
+
QString Settings::runProgramDescription() const
{
return d->m_data.value(scRunProgramDescription).toString();
@@ -615,6 +649,5 @@ QStringList Settings::translations() const
void Settings::setTranslations(const QStringList &translations)
{
- d->m_data.remove(scTranslations);
d->m_data.insert(scTranslations, translations);
}