diff options
Diffstat (limited to 'src/libs/installer/settings.cpp')
-rw-r--r-- | src/libs/installer/settings.cpp | 60 |
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); +} |