summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/settings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r--src/libs/installer/settings.cpp60
1 files changed, 56 insertions, 4 deletions
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index 5761387c6..21bbe8b4c 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -30,6 +30,7 @@
#include "errors.h"
#include "qinstallerglobal.h"
#include "repository.h"
+#include "repositorycategory.h"
#include <QtCore/QFileInfo>
#include <QtCore/QStringList>
@@ -55,6 +56,7 @@ static const QLatin1String scUserRepositories("UserRepositories");
static const QLatin1String scTmpRepositories("TemporaryRepositories");
static const QLatin1String scMaintenanceToolIniFile("MaintenanceToolIniFile");
static const QLatin1String scRemoteRepositories("RemoteRepositories");
+static const QLatin1String scRepositoryCategories("RepositoryCategories");
static const QLatin1String scDependsOnLocalInstallerBinary("DependsOnLocalInstallerBinary");
static const QLatin1String scTranslations("Translations");
static const QLatin1String scCreateLocalRepository("CreateLocalRepository");
@@ -133,11 +135,15 @@ static QStringList readArgumentAttributes(QXmlStreamReader &reader, Settings::Pa
return arguments;
}
-static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefault, Settings::ParseMode parseMode)
+static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefault, Settings::ParseMode parseMode, QString *displayName = 0)
{
+ qDebug()<<__FUNCTION__;
QSet<Repository> set;
while (reader.readNextStartElement()) {
- if (reader.name() == QLatin1String("Repository")) {
+ if (reader.name() == QLatin1String("DisplayName")) {
+ //remote repository can have also displayname. Needed when creating archive repositories
+ *displayName = reader.readElementText();
+ } else if (reader.name() == QLatin1String("Repository")) {
Repository repo(QString(), isDefault);
while (reader.readNextStartElement()) {
if (reader.name() == QLatin1String("Url")) {
@@ -160,6 +166,8 @@ static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefaul
.arg(reader.name().toString()), parseMode);
}
}
+ if (displayName && !displayName->isEmpty())
+ repo.setArchiveName(*displayName);
set.insert(repo);
} else {
raiseError(reader, QString::fromLatin1("Unexpected element \"%1\".").arg(reader.name().toString()),
@@ -174,6 +182,23 @@ static QSet<Repository> readRepositories(QXmlStreamReader &reader, bool isDefaul
return set;
}
+static QSet<RepositoryCategory> readRepositoryCategories(QXmlStreamReader &reader, bool isDefault, Settings::ParseMode parseMode,
+ QString *repositoryCategoryName)
+{
+ QSet<RepositoryCategory> archiveSet;
+ while (reader.readNextStartElement()) {
+ if (reader.name() == QLatin1String("RemoteRepositories")) {
+ RepositoryCategory archiveRepo;
+ QString displayName;
+ archiveRepo.setRepositories(readRepositories(reader, isDefault, parseMode, &displayName));
+ archiveRepo.setDisplayName(displayName);
+ archiveSet.insert(archiveRepo);
+ } else if (reader.name() == QLatin1String("RepositoryCategoryDisplayname")) {
+ *repositoryCategoryName = reader.readElementText();
+ }
+ }
+ return archiveSet;
+}
// -- Settings::Private
@@ -257,7 +282,7 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix,
<< scRepositorySettingsPageVisible << scTargetConfigurationFile
<< scRemoteRepositories << scTranslations << scUrlQueryString << QLatin1String(scControlScript)
<< scCreateLocalRepository << scInstallActionColumnVisible << scSupportsModify << scAllowUnstableComponents
- << scSaveDefaultRepositories;
+ << scSaveDefaultRepositories << scRepositoryCategories;
Settings s;
s.d->m_data.insert(scPrefix, prefix);
@@ -280,11 +305,16 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix,
s.setRunProgramArguments(readArgumentAttributes(reader, parseMode, QLatin1String("Argument")));
} else if (name == scRemoteRepositories) {
s.addDefaultRepositories(readRepositories(reader, true, parseMode));
+ } else if (name == scRepositoryCategories) {
+ QString repositoryCategoryName;
+ s.addRepositoryCategories(readRepositoryCategories(reader, true, parseMode, &repositoryCategoryName));
+ if (!repositoryCategoryName.isEmpty()) {
+ s.setRepositoryCategoryDisplayName(repositoryCategoryName);
+ }
} else {
s.d->m_data.insert(name, reader.readElementText(QXmlStreamReader::SkipChildElements));
}
}
-
if (reader.error() != QXmlStreamReader::NoError) {
throw Error(QString::fromLatin1("Error in %1, line %2, column %3: %4").arg(path).arg(reader
.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()));
@@ -549,6 +579,11 @@ QSet<Repository> Settings::defaultRepositories() const
return variantListToSet<Repository>(d->m_data.values(scRepositories));
}
+QSet<RepositoryCategory> Settings::repositoryCategories() const
+{
+ return variantListToSet<RepositoryCategory>(d->m_data.values(scRepositoryCategories));
+}
+
void Settings::setDefaultRepositories(const QSet<Repository> &repositories)
{
d->m_data.remove(scRepositories);
@@ -561,6 +596,12 @@ void Settings::addDefaultRepositories(const QSet<Repository> &repositories)
d->m_data.insertMulti(scRepositories, QVariant().fromValue(repository));
}
+void Settings::addRepositoryCategories(const QSet<RepositoryCategory> &repositories)
+{
+ foreach (const RepositoryCategory &repository, repositories)
+ d->m_data.insertMulti(scRepositoryCategories, QVariant().fromValue(repository));
+}
+
static bool apply(const RepoHash &updates, QHash<QUrl, Repository> *reposToUpdate)
{
bool update = false;
@@ -767,3 +808,14 @@ void Settings::setSaveDefaultRepositories(bool save)
{
d->m_data.insert(scSaveDefaultRepositories, save);
}
+
+QString Settings::repositoryCategoryDisplayName() const
+{
+ QString displayName = d->m_data.value(QLatin1String(scRepositoryCategoryDisplayName)).toString();
+ return displayName.isEmpty() ? tr("Package categories") : displayName;
+}
+
+void Settings::setRepositoryCategoryDisplayName(const QString& name)
+{
+ d->m_data.insert(scRepositoryCategoryDisplayName, name);
+}