diff options
Diffstat (limited to 'src/libs/installer/getrepositorymetainfojob.cpp')
-rw-r--r-- | src/libs/installer/getrepositorymetainfojob.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/libs/installer/getrepositorymetainfojob.cpp b/src/libs/installer/getrepositorymetainfojob.cpp index ac575ab18..c86ab9309 100644 --- a/src/libs/installer/getrepositorymetainfojob.cpp +++ b/src/libs/installer/getrepositorymetainfojob.cpp @@ -226,6 +226,8 @@ void GetRepositoryMetaInfoJob::startUpdatesXmlDownload() connect(m_downloader, SIGNAL(downloadCanceled()), this, SLOT(updatesXmlDownloadCanceled())); connect(m_downloader, SIGNAL(downloadAborted(QString)), this, SLOT(updatesXmlDownloadError(QString)), Qt::QueuedConnection); + connect(m_downloader, SIGNAL(authenticatorChanged(QAuthenticator)), this, + SLOT(onAuthenticatorChanged(QAuthenticator))); m_downloader->download(); } @@ -440,6 +442,8 @@ void GetRepositoryMetaInfoJob::fetchNextMetaInfo() connect(m_downloader, SIGNAL(downloadCompleted()), this, SLOT(metaDownloadFinished())); connect(m_downloader, SIGNAL(downloadAborted(QString)), this, SLOT(metaDownloadError(QString)), Qt::QueuedConnection); + connect(m_downloader, SIGNAL(authenticatorChanged(QAuthenticator)), this, + SLOT(onAuthenticatorChanged(QAuthenticator))); m_downloader->download(); } @@ -512,5 +516,48 @@ void GetRepositoryMetaInfoJob::unzipFinished(bool ok, const QString &error) finished(QInstaller::ExtractionError, error); } +bool GetRepositoryMetaInfoJob::updateRepositories(QSet<Repository> *repositories, const QString &username, + const QString &password) +{ + if (!repositories->contains(m_repository)) + return false; + + repositories->remove(m_repository); + m_repository.setUsername(username); + m_repository.setPassword(password); + repositories->insert(m_repository); + return true; +} + +void GetRepositoryMetaInfoJob::onAuthenticatorChanged(const QAuthenticator &authenticator) +{ + const QString username = authenticator.user(); + const QString password = authenticator.password(); + if (username != m_repository.username() || password != m_repository.password()) { + QSet<Repository> repositories = m_corePrivate->m_settings.defaultRepositories(); + bool reposChanged = updateRepositories(&repositories, username, password); + if (reposChanged) + m_corePrivate->m_settings.setDefaultRepositories(repositories); + + repositories = m_corePrivate->m_settings.temporaryRepositories(); + reposChanged |= updateRepositories(&repositories, username, password); + if (reposChanged) { + m_corePrivate->m_settings.setTemporaryRepositories(repositories, + m_corePrivate->m_settings.hasReplacementRepos()); + } + + repositories = m_corePrivate->m_settings.userRepositories(); + reposChanged |= updateRepositories(&repositories, username, password); + if (reposChanged) + m_corePrivate->m_settings.setUserRepositories(repositories); + + if (reposChanged) { + if (m_corePrivate->isUpdater() || m_corePrivate->isPackageManager()) + m_corePrivate->writeMaintenanceConfigFiles(); + finished(QInstaller::RepositoryUpdatesReceived, tr("Repository updates received.")); + } + } +} + #include "getrepositorymetainfojob.moc" #include "moc_getrepositorymetainfojob.cpp" |