From d48cb97ba1b1179ce314d6ab190a7379f802465a Mon Sep 17 00:00:00 2001 From: kh1 Date: Tue, 15 Nov 2011 12:37:01 +0100 Subject: Use QSet throughout the whole code, saves us QList conversions. Remove default parameter from Repo ctor, lead already to confusion. Also add some more specific {get/set} repo functions, to be able to distinguish between the different kind of repositories (needed for setting dialog). Change-Id: I2c1e4d5377799f54e408a89785bdc5f01619f846 Reviewed-by: Tim Jenssen Reviewed-by: Alexander Lenhardt --- examples/testapp/updatesettingswidget.cpp | 4 +- installerbuilder/common/repository.h | 2 +- installerbuilder/installerbase/installerbase.cpp | 15 +++--- .../libinstaller/getrepositoriesmetainfojob.cpp | 4 +- .../libinstaller/getrepositoriesmetainfojob.h | 6 +-- .../libinstaller/packagemanagercore.cpp | 4 +- installerbuilder/libinstaller/packagemanagercore.h | 4 +- installerbuilder/libinstaller/settings.cpp | 59 +++++++++++++++------- installerbuilder/libinstaller/settings.h | 14 +++-- installerbuilder/libinstaller/updatesettings.cpp | 15 +++--- installerbuilder/libinstaller/updatesettings.h | 6 +-- 11 files changed, 82 insertions(+), 51 deletions(-) diff --git a/examples/testapp/updatesettingswidget.cpp b/examples/testapp/updatesettingswidget.cpp index 6455760fe..4b8283179 100644 --- a/examples/testapp/updatesettingswidget.cpp +++ b/examples/testapp/updatesettingswidget.cpp @@ -146,9 +146,9 @@ void UpdateSettingsWidget::accept() d->settings.setUpdateInterval(-d->settings.updateInterval()); d->settings.setCheckOnlyImportantUpdates(d->ui.checkBoxCheckOnlyImportant->isChecked()); - QList repositories; + QSet repositories; foreach (const QString &url, d->model.stringList()) - repositories.append(Repository(QUrl(url))); + repositories.insert(Repository(QUrl(url), false)); d->settings.setRepositories(repositories); } diff --git a/installerbuilder/common/repository.h b/installerbuilder/common/repository.h index d6e90d094..a2c77f4e0 100644 --- a/installerbuilder/common/repository.h +++ b/installerbuilder/common/repository.h @@ -44,7 +44,7 @@ class INSTALLER_EXPORT Repository public: explicit Repository(); Repository(const Repository &other); - explicit Repository(const QUrl &url, bool isDefault = true); + explicit Repository(const QUrl &url, bool isDefault); bool isValid() const; bool isDefault() const; diff --git a/installerbuilder/installerbase/installerbase.cpp b/installerbuilder/installerbase/installerbase.cpp index f8473021f..ffe739ffe 100644 --- a/installerbuilder/installerbase/installerbase.cpp +++ b/installerbuilder/installerbase/installerbase.cpp @@ -65,20 +65,19 @@ using namespace QInstaller; using namespace QInstallerCreator; -static QList repositories(const QStringList &arguments, const int index) +static QSet repositories(const QStringList &arguments, const int index) { - QList repoList; + QSet set; if (index < arguments.size()) { QStringList items = arguments.at(index).split(QLatin1Char(',')); foreach (const QString &item, items) { + set.insert(Repository(item, false)); verbose() << "Adding custom repository:" << item << std::endl; - Repository rep(item); - repoList.append(rep); } } else { std::cerr << "No repository specified" << std::endl; } - return repoList; + return set; } int main(int argc, char *argv[]) @@ -255,7 +254,7 @@ int main(int argc, char *argv[]) } else if (argument == QLatin1String("--addTempRepository") || argument == QLatin1String("--setTempRepository")) { ++i; - QList repoList = repositories(args, i); + QSet repoList = repositories(args, i); if (repoList.isEmpty()) return PackageManagerCore::Failure; @@ -265,10 +264,10 @@ int main(int argc, char *argv[]) core.setTemporaryRepositories(repoList, replace); } else if (argument == QLatin1String("--addRepository")) { ++i; - QList repoList = repositories(args, i); + QSet repoList = repositories(args, i); if (repoList.isEmpty()) return PackageManagerCore::Failure; - core.addRepositories(repoList); + core.addUserRepositories(repoList); } else if (argument == QLatin1String("--no-force-installations")) { PackageManagerCore::setNoForceInstallation(true); } else { diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp index 24a9ef794..88793bf0c 100644 --- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp +++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp @@ -52,12 +52,12 @@ GetRepositoriesMetaInfoJob::GetRepositoriesMetaInfoJob(const QByteArray &publicK setCapabilities(Cancelable); } -QList< Repository > GetRepositoriesMetaInfoJob::repositories() const +QSet GetRepositoriesMetaInfoJob::repositories() const { return m_repositories; } -void GetRepositoriesMetaInfoJob::setRepositories(const QList &repos) +void GetRepositoriesMetaInfoJob::setRepositories(const QSet &repos) { m_repositories = repos; foreach (const Repository &repo, repos) { diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h index 18c5d3985..d57dda39b 100644 --- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h +++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h @@ -53,8 +53,8 @@ class INSTALLER_EXPORT GetRepositoriesMetaInfoJob : public KDJob public: explicit GetRepositoriesMetaInfoJob(const QByteArray &publicKey, QObject *parent = 0); - QList repositories() const; - void setRepositories(const QList &repositories); + QSet repositories() const; + void setRepositories(const QSet &repositories); QStringList temporaryDirectories() const; QStringList releaseTemporaryDirectories() const; @@ -80,7 +80,7 @@ private: const QByteArray m_publicKey; bool m_canceled; int m_silentRetries; - QList m_repositories; + QSet m_repositories; QList m_tmpRepositories; QHash m_repositoryByTemporaryDirectory; bool m_haveIgnoredError; diff --git a/installerbuilder/libinstaller/packagemanagercore.cpp b/installerbuilder/libinstaller/packagemanagercore.cpp index e6dd6124a..9769b1dbc 100644 --- a/installerbuilder/libinstaller/packagemanagercore.cpp +++ b/installerbuilder/libinstaller/packagemanagercore.cpp @@ -737,7 +737,7 @@ bool PackageManagerCore::removeWizardPageItem(Component *component, const QStrin return false; } -void PackageManagerCore::addRepositories(const QList &repositories) +void PackageManagerCore::addUserRepositories(const QSet &repositories) { d->m_settings.addUserRepositories(repositories); } @@ -746,7 +746,7 @@ void PackageManagerCore::addRepositories(const QList &repositories) Sets additional repository for this instance of the installer or updater. Will be removed after invoking it again. */ -void PackageManagerCore::setTemporaryRepositories(const QList &repositories, bool replace) +void PackageManagerCore::setTemporaryRepositories(const QSet &repositories, bool replace) { d->m_settings.setTemporaryRepositories(repositories, replace); } diff --git a/installerbuilder/libinstaller/packagemanagercore.h b/installerbuilder/libinstaller/packagemanagercore.h index be029c159..d46ff3770 100644 --- a/installerbuilder/libinstaller/packagemanagercore.h +++ b/installerbuilder/libinstaller/packagemanagercore.h @@ -128,8 +128,8 @@ public: bool testChecksum() const; void setTestChecksum(bool test); - void addRepositories(const QList &repositories); - void setTemporaryRepositories(const QList &repositories, bool replace = false); + void addUserRepositories(const QSet &repositories); + void setTemporaryRepositories(const QSet &repositories, bool replace = false); Q_INVOKABLE void autoAcceptMessageBoxes(); Q_INVOKABLE void autoRejectMessageBoxes(); diff --git a/installerbuilder/libinstaller/settings.cpp b/installerbuilder/libinstaller/settings.cpp index 956ac2482..2f6caeae7 100644 --- a/installerbuilder/libinstaller/settings.cpp +++ b/installerbuilder/libinstaller/settings.cpp @@ -56,6 +56,7 @@ static const QLatin1String scBackground("Background"); static const QLatin1String scAdminTargetDir("AdminTargetDir"); static const QLatin1String scUninstallerName("UninstallerName"); static const QLatin1String scUserRepositories("UserRepositories"); +static const QLatin1String scTmpRepositories("TemporaryRepositories"); static const QLatin1String scUninstallerIniFile("UninstallerIniFile"); static const QLatin1String scRemoteRepositories("RemoteRepositories"); static const QLatin1String scSigningCertificate("SigningCertificate"); @@ -84,7 +85,7 @@ static QString splitTrimmed(const QString &string) return result.join(QLatin1String("\n")); } -static QList readRepositories(QXmlStreamReader &reader, bool isDefault) +static QSet readRepositories(QXmlStreamReader &reader, bool isDefault) { QSet set; while (reader.readNextStartElement()) { @@ -107,7 +108,7 @@ static QList readRepositories(QXmlStreamReader &reader, bool isDefau reader.skipCurrentElement(); } } - return set.toList(); + return set; } static QVariantHash readTitles(QXmlStreamReader &reader) @@ -145,7 +146,12 @@ static QHash readPages(QXmlStreamReader &reader) class Settings::Private : public QSharedData { public: + Private() + : m_replacementRepos(false) + {} + QVariantHash m_data; + bool m_replacementRepos; QString makeAbsolutePath(const QString &path) const { @@ -211,11 +217,8 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix) if (name == scSigningCertificate) s.d->m_data.insertMulti(name, s.d->makeAbsolutePath(reader.readElementText())); - if (name == scRemoteRepositories) { - QList repositories = readRepositories(reader, true); - foreach (const Repository &repository, repositories) - s.d->m_data.insertMulti(scRepositories, QVariant().fromValue(repository)); - } + if (name == scRemoteRepositories) + s.addDefaultRepositories(readRepositories(reader, true)); if (name == scPages) { QHash pages = readPages(reader); @@ -369,29 +372,51 @@ QByteArray Settings::publicKey() const return d->m_data.value(scPublicKey).toByteArray(); } -QList Settings::repositories() const +bool Settings::hasReplacementRepos() const +{ + return d->m_replacementRepos; +} + +QSet Settings::repositories() const { + if (d->m_replacementRepos) + return variantListToSet(d->m_data.values(scTmpRepositories)); + return variantListToSet(d->m_data.values(scRepositories) - + d->m_data.values(scUserRepositories)).toList(); + + d->m_data.values(scUserRepositories) + d->m_data.values(scTmpRepositories)); } -void Settings::setTemporaryRepositories(const QList &repositories, bool replace) +QSet Settings::defaultRepositories() const { - if (replace) - d->m_data.remove(scRepositories); + return variantListToSet(d->m_data.values(scRepositories)); +} - foreach (const Repository &repository, repositories.toSet()) +void Settings::addDefaultRepositories(const QSet &repositories) +{ + foreach (const Repository &repository, repositories) d->m_data.insertMulti(scRepositories, QVariant().fromValue(repository)); } -QList Settings::userRepositories() const +QSet Settings::temporaryRepositories() const +{ + return variantListToSet(d->m_data.values(scTmpRepositories)); +} + +void Settings::setTemporaryRepositories(const QSet &repositories, bool replace) +{ + d->m_replacementRepos = replace; + foreach (const Repository &repository, repositories) + d->m_data.insertMulti(scTmpRepositories, QVariant().fromValue(repository)); +} + +QSet Settings::userRepositories() const { - return variantListToSet(d->m_data.values(scUserRepositories)).toList(); + return variantListToSet(d->m_data.values(scUserRepositories)); } -void Settings::addUserRepositories(const QList &repositories) +void Settings::addUserRepositories(const QSet &repositories) { - foreach (const Repository &repository, repositories.toSet()) + foreach (const Repository &repository, repositories) d->m_data.insertMulti(scUserRepositories, QVariant().fromValue(repository)); } diff --git a/installerbuilder/libinstaller/settings.h b/installerbuilder/libinstaller/settings.h index 23c28521f..876d20c54 100644 --- a/installerbuilder/libinstaller/settings.h +++ b/installerbuilder/libinstaller/settings.h @@ -77,11 +77,17 @@ public: QString configurationFileName() const; - QList repositories() const; - void setTemporaryRepositories(const QList &repositories, bool replace); + bool hasReplacementRepos() const; + QSet repositories() const; - QList userRepositories() const; - void addUserRepositories(const QList &repositories); + QSet defaultRepositories() const; + void addDefaultRepositories(const QSet &repositories); + + QSet temporaryRepositories() const; + void setTemporaryRepositories(const QSet &repositories, bool replace); + + QSet userRepositories() const; + void addUserRepositories(const QSet &repositories); QStringList certificateFiles() const; QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const; diff --git a/installerbuilder/libinstaller/updatesettings.cpp b/installerbuilder/libinstaller/updatesettings.cpp index 6f52cdd2c..0347beb1d 100644 --- a/installerbuilder/libinstaller/updatesettings.cpp +++ b/installerbuilder/libinstaller/updatesettings.cpp @@ -135,22 +135,22 @@ void UpdateSettings::setCheckOnlyImportantUpdates(bool checkOnlyImportantUpdates d->settings().setValue(QLatin1String("updatesettings/onlyimportant"), checkOnlyImportantUpdates); } -QList UpdateSettings::repositories() const +QSet UpdateSettings::repositories() const { QSettings &settings = *(const_cast (&d->settings())); const int count = settings.beginReadArray(QLatin1String("updatesettings/repositories")); - QList result; + QSet result; for (int i = 0; i < count; ++i) { settings.setArrayIndex(i); - result.append(Repository(d->settings().value(QLatin1String("url")).toUrl())); + result.insert(Repository(d->settings().value(QLatin1String("url")).toUrl(), false)); } settings.endArray(); try { if(result.isEmpty()) { result = Settings::fromFileAndPrefix(QLatin1String(":/metadata/installer-config/config.xml"), - QLatin1String(":/metadata/installer-config/")).repositories(); + QLatin1String(":/metadata/installer-config/")).userRepositories(); } } catch (const Error &error) { qDebug("Could not parse config: %s", qPrintable(error.message())); @@ -158,12 +158,13 @@ QList UpdateSettings::repositories() const return result; } -void UpdateSettings::setRepositories(const QList &repositories) +void UpdateSettings::setRepositories(const QSet &repositories) { + QSet::ConstIterator it = repositories.constBegin(); d->settings().beginWriteArray(QLatin1String("updatesettings/repositories")); - for (int i = 0; i < repositories.count(); ++i) { + for (int i = 0; i < repositories.count(); ++i, ++it) { d->settings().setArrayIndex(i); - d->settings().setValue(QLatin1String("url"), repositories.at(i).url()); + d->settings().setValue(QLatin1String("url"), (*it).url()); } d->settings().endArray(); } diff --git a/installerbuilder/libinstaller/updatesettings.h b/installerbuilder/libinstaller/updatesettings.h index 0b2f46bd8..490dea838 100644 --- a/installerbuilder/libinstaller/updatesettings.h +++ b/installerbuilder/libinstaller/updatesettings.h @@ -31,7 +31,7 @@ QT_BEGIN_NAMESPACE class QDateTime; template -class QList; +class QSet; class QSettings; QT_END_NAMESPACE @@ -65,8 +65,8 @@ public: bool checkOnlyImportantUpdates() const; void setCheckOnlyImportantUpdates(bool checkOnlyImportantUpdates); - QList repositories() const; - void setRepositories(const QList &repositories); + QSet repositories() const; + void setRepositories(const QSet &repositories); private: class Private; -- cgit v1.2.3