diff options
author | Niels Weber <niels.weber@digia.com> | 2014-11-11 09:32:20 +0100 |
---|---|---|
committer | Niels Weber <niels.weber@digia.com> | 2014-11-17 16:18:17 +0100 |
commit | 778af9e97d5652c84e027b3e3ccad62122fc92b6 (patch) | |
tree | 69f2508a9288c5fb57f8f91f0736cd9c0109256a /src/libs/installer/settings.cpp | |
parent | 32296ab72fd1fc6d460aef00dab74b14cb4120e9 (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.cpp | 71 |
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); } |