From e9d2d7640148e07feebf76e0e2d681c1ddf85f1a Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Tue, 24 Apr 2012 18:42:28 +0200 Subject: add the possibility to add a repository from script side Change-Id: Ida419095138fcfb924210484c2bf2d1cb77fc55b Reviewed-by: Karsten Heimrich --- src/libs/installer/packagemanagercore.cpp | 11 +++++++++++ src/libs/installer/packagemanagercore.h | 3 +++ src/libs/installer/repository.cpp | 30 ++++++++++++++++++++++++++++++ src/libs/installer/repository.h | 2 ++ 4 files changed, 46 insertions(+) (limited to 'src/libs/installer') diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 52713f50f..03432c31f 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -763,11 +763,22 @@ bool PackageManagerCore::removeWizardPageItem(Component *component, const QStrin return false; } +void PackageManagerCore::addUserRepository(const QString &repositoryUrl, bool isDefault) +{ + addUserRepositories(QSet() << Repository::fromUserInput(repositoryUrl, isDefault)); +} + void PackageManagerCore::addUserRepositories(const QSet &repositories) { d->m_settings.addUserRepositories(repositories); } + +void PackageManagerCore::setTemporaryRepository(const QString &repositoryUrl) +{ + setTemporaryRepositories(QSet() << Repository::fromUserInput(repositoryUrl, false)); +} + /*! Sets additional repository for this instance of the installer or updater. Will be removed after invoking it again. diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index a8fa65eab..2e7f8d28c 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -147,7 +147,10 @@ public: bool testChecksum() const; void setTestChecksum(bool test); + Q_INVOKABLE void addUserRepository(const QString &repositoryUrl, bool isDefault); void addUserRepositories(const QSet &repositories); + + Q_INVOKABLE void setTemporaryRepository(const QString &repositoryUrl); void setTemporaryRepositories(const QSet &repositories, bool replace = false); Q_INVOKABLE void autoAcceptMessageBoxes(); diff --git a/src/libs/installer/repository.cpp b/src/libs/installer/repository.cpp index cc80a20d9..8842a7899 100644 --- a/src/libs/installer/repository.cpp +++ b/src/libs/installer/repository.cpp @@ -32,6 +32,9 @@ #include "repository.h" +#include +#include + namespace QInstaller { /* @@ -68,6 +71,33 @@ Repository::Repository(const QUrl &url, bool isDefault) registerMetaType(); } +/*! + Constructs a new repository by setting it's address to \a repositoryUrl as string and it's + default state. + + Note: user and password can be inside the \a repositoryUrl string: http://user:password@repository.url +*/ +Repository Repository::fromUserInput(const QString &repositoryUrl, bool isDefault) +{ + QStringList supportedShemes; + supportedShemes << QLatin1String("http") << QLatin1String("https") << QLatin1String("ftp") << + QLatin1String("file"); + + QUrl url = QUrl::fromUserInput(repositoryUrl); + if (!supportedShemes.contains(url.scheme()) && QFileInfo(url.toString()).exists()) + url = QLatin1String("file:///") + url.toString(); + + QString userName = url.userName(); + QString password = url.password(); + url.setUserName(QString()); + url.setPassword(QString()); + + Repository repository(url, isDefault); + repository.setUsername(userName); + repository.setPassword(password); + return repository; +} + /*! Returns true if the repository URL is valid; otherwise returns false. diff --git a/src/libs/installer/repository.h b/src/libs/installer/repository.h index 432a851c4..a780a53e4 100644 --- a/src/libs/installer/repository.h +++ b/src/libs/installer/repository.h @@ -47,6 +47,8 @@ public: Repository(const Repository &other); explicit Repository(const QUrl &url, bool isDefault); + static Repository fromUserInput(const QString &repositoryUrl, bool isDefault = false); + bool isValid() const; bool isDefault() const; -- cgit v1.2.3