diff options
5 files changed, 52 insertions, 83 deletions
diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp index c5df1d993..2a6b230c8 100644 --- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp +++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp @@ -33,6 +33,7 @@ #include "getrepositoriesmetainfojob.h" #include "getrepositorymetainfojob.h" +#include "packagemanagercore_p.h" #include "qinstallerglobal.h" #include <QtCore/QDebug> @@ -43,35 +44,16 @@ using namespace QInstaller; // -- GetRepositoriesMetaInfoJob -GetRepositoriesMetaInfoJob::GetRepositoriesMetaInfoJob(const QByteArray &publicKey, QObject *parent) - : KDJob(parent), - m_publicKey(publicKey), +GetRepositoriesMetaInfoJob::GetRepositoriesMetaInfoJob(PackageManagerCorePrivate *corePrivate) + : KDJob(corePrivate), m_canceled(false), m_silentRetries(3), - m_haveIgnoredError(false) + m_haveIgnoredError(false), + m_corePrivate(corePrivate) { setCapabilities(Cancelable); } -QSet<Repository> GetRepositoriesMetaInfoJob::repositories() const -{ - return m_repositories; -} - -void GetRepositoriesMetaInfoJob::setRepositories(const QSet<Repository> &repos) -{ - m_repositories = repos; - foreach (const Repository &repo, repos) { - if (repo.isEnabled()) - m_tmpRepositories += repo; - } -} - -QHash<QString, QPair<Repository, Repository> > GetRepositoriesMetaInfoJob::repositoryUpdates() const -{ - return m_repositoryUpdates; -} - QStringList GetRepositoriesMetaInfoJob::temporaryDirectories() const { return m_repositoryByTemporaryDirectory.keys(); @@ -111,7 +93,6 @@ void GetRepositoriesMetaInfoJob::reset() m_haveIgnoredError = false; m_repositories.clear(); - m_tmpRepositories.clear(); m_tempDirDeleter.releaseAndDeleteAll(); m_repositoryByTemporaryDirectory.clear(); @@ -129,6 +110,14 @@ bool GetRepositoriesMetaInfoJob::isCanceled() const void GetRepositoriesMetaInfoJob::doStart() { + if ((m_corePrivate->isInstaller() && !m_corePrivate->isOfflineOnly()) + || (m_corePrivate->isUpdater() || m_corePrivate->isPackageManager())) { + foreach (const Repository &repo, m_corePrivate->m_settings.repositories()) { + if (repo.isEnabled()) + m_repositories += repo; + } + } + fetchNextRepo(); } @@ -151,7 +140,7 @@ void GetRepositoriesMetaInfoJob::fetchNextRepo() return; } - if (m_tmpRepositories.isEmpty()) { + if (m_repositories.isEmpty()) { if (m_haveIgnoredError) emitFinishedWithError(QInstaller::UserIgnoreError, m_errorString); else @@ -159,12 +148,12 @@ void GetRepositoriesMetaInfoJob::fetchNextRepo() return; } - m_job = new GetRepositoryMetaInfoJob(m_publicKey, this); + m_job = new GetRepositoryMetaInfoJob(m_corePrivate, this); connect(m_job, SIGNAL(finished(KDJob*)), this, SLOT(jobFinished(KDJob*))); connect(m_job, SIGNAL(infoMessage(KDJob*, QString)), this, SIGNAL(infoMessage(KDJob*, QString))); m_job->setSilentRetries(silentRetries()); - m_job->setRepository(m_tmpRepositories.takeLast()); + m_job->setRepository(m_repositories.takeLast()); m_job->start(); } @@ -188,13 +177,6 @@ void GetRepositoriesMetaInfoJob::jobFinished(KDJob *j) return; } - if (job->error() == QInstaller::RepositoryUpdatesReceived) { - qDebug() << job->errorString(); - m_repositoryUpdates = job->repositoryUpdates(); - emitFinishedWithError(job->error(), job->errorString()); - return; - } - if (job->error() == QInstaller::UserIgnoreError) { m_haveIgnoredError = true; m_errorString = job->errorString(); @@ -203,5 +185,11 @@ void GetRepositoriesMetaInfoJob::jobFinished(KDJob *j) job->m_tempDirDeleter.passAndRelease(m_tempDirDeleter, tmpdir); m_repositoryByTemporaryDirectory.insert(tmpdir, job->repository()); } - QMetaObject::invokeMethod(this, "fetchNextRepo", Qt::QueuedConnection); + + if (job->error() == QInstaller::RepositoryUpdatesReceived) { + reset(); + QMetaObject::invokeMethod(this, "doStart", Qt::QueuedConnection); + } else { + QMetaObject::invokeMethod(this, "fetchNextRepo", Qt::QueuedConnection); + } } diff --git a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h index cf6a3b645..e7b403100 100644 --- a/installerbuilder/libinstaller/getrepositoriesmetainfojob.h +++ b/installerbuilder/libinstaller/getrepositoriesmetainfojob.h @@ -45,17 +45,14 @@ namespace KDUpdater { namespace QInstaller { class GetRepositoryMetaInfoJob; +class PackageManagerCorePrivate; class INSTALLER_EXPORT GetRepositoriesMetaInfoJob : public KDJob { Q_OBJECT public: - explicit GetRepositoriesMetaInfoJob(const QByteArray &publicKey, QObject *parent = 0); - - QSet<Repository> repositories() const; - void setRepositories(const QSet<Repository> &repositories); - QHash<QString, QPair<Repository, Repository> > repositoryUpdates() const; + explicit GetRepositoriesMetaInfoJob(PackageManagerCorePrivate *corePrivate); QStringList temporaryDirectories() const; QStringList releaseTemporaryDirectories() const; @@ -77,18 +74,16 @@ private Q_SLOTS: void jobFinished(KDJob*); private: - QPointer<GetRepositoryMetaInfoJob> m_job; - const QByteArray m_publicKey; bool m_canceled; int m_silentRetries; - QSet<Repository> m_repositories; - QList<Repository> m_tmpRepositories; - QHash<QString, Repository> m_repositoryByTemporaryDirectory; bool m_haveIgnoredError; + PackageManagerCorePrivate *m_corePrivate; + QString m_errorString; + QList<Repository> m_repositories; mutable TempDirDeleter m_tempDirDeleter; - - QHash<QString, QPair<Repository, Repository> > m_repositoryUpdates; + QPointer<GetRepositoryMetaInfoJob> m_job; + QHash<QString, Repository> m_repositoryByTemporaryDirectory; }; } // namespace QInstaller diff --git a/installerbuilder/libinstaller/getrepositorymetainfojob.cpp b/installerbuilder/libinstaller/getrepositorymetainfojob.cpp index 7ccf9eaf7..84d97c372 100644 --- a/installerbuilder/libinstaller/getrepositorymetainfojob.cpp +++ b/installerbuilder/libinstaller/getrepositorymetainfojob.cpp @@ -37,6 +37,7 @@ #include "cryptosignatureverifier.h" #include "lib7z_facade.h" #include "messageboxhandler.h" +#include "packagemanagercore_p.h" #include "qinstallerglobal.h" #include <kdupdaterfiledownloader.h> @@ -112,14 +113,15 @@ private: // -- GetRepositoryMetaInfoJob -GetRepositoryMetaInfoJob::GetRepositoryMetaInfoJob(const QByteArray &publicKey, QObject *parent) +GetRepositoryMetaInfoJob::GetRepositoryMetaInfoJob(PackageManagerCorePrivate *corePrivate, QObject *parent) : KDJob(parent), m_canceled(false), m_silentRetries(3), m_retriesLeft(m_silentRetries), - m_publicKey(publicKey), + m_publicKey(corePrivate->m_settings.publicKey()), m_downloader(0), - m_waitForDone(false) + m_waitForDone(false), + m_corePrivate(corePrivate) { setCapabilities(Cancelable); } @@ -151,11 +153,6 @@ void GetRepositoryMetaInfoJob::setSilentRetries(int retries) m_silentRetries = retries; } -QHash<QString, QPair<Repository, Repository> > GetRepositoryMetaInfoJob::repositoryUpdates() const -{ - return m_repositoryUpdates; -} - void GetRepositoryMetaInfoJob::doStart() { m_retriesLeft = m_silentRetries; @@ -284,11 +281,10 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished() emit infoMessage(this, tr("Parsing component meta information...")); const QDomElement root = doc.documentElement(); - - m_repositoryUpdates.clear(); // search for additional repositories that we might need to check const QDomNode repositoryUpdate = root.firstChildElement(QLatin1String("RepositoryUpdate")); if (!repositoryUpdate.isNull()) { + QHash<QString, QPair<Repository, Repository> > repositoryUpdates; const QDomNodeList children = repositoryUpdate.toElement().childNodes(); for (int i = 0; i < children.count(); ++i) { const QDomElement el = children.at(i).toElement(); @@ -299,13 +295,13 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished() Repository repository(el.attribute(QLatin1String("url")), true); repository.setUsername(el.attribute(QLatin1String("username"))); repository.setPassword(el.attribute(QLatin1String("password"))); - m_repositoryUpdates.insertMulti(action, qMakePair(repository, Repository())); + repositoryUpdates.insertMulti(action, qMakePair(repository, Repository())); - qDebug() << "Added new repository:" << repository.url().toString(); + qDebug() << "Repository to add:" << repository.url().toString(); } else if (action == QLatin1String("remove")) { // remove possible default repositories using the given server url Repository repository(el.attribute(QLatin1String("url")), true); - m_repositoryUpdates.insertMulti(action, qMakePair(repository, Repository())); + repositoryUpdates.insertMulti(action, qMakePair(repository, Repository())); qDebug() << "Repository to remove:" << repository.url().toString(); } else if (action == QLatin1String("replace")) { @@ -316,7 +312,7 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished() newRepository.setPassword(el.attribute(QLatin1String("password"))); // store the new repository and the one old it replaces - m_repositoryUpdates.insertMulti(action, qMakePair(newRepository, oldRepository)); + repositoryUpdates.insertMulti(action, qMakePair(newRepository, oldRepository)); qDebug() << "Replace repository:" << oldRepository.url().toString() << "with:" << newRepository.url().toString(); } else { @@ -326,9 +322,14 @@ void GetRepositoryMetaInfoJob::updatesXmlDownloadFinished() } } - if (!m_repositoryUpdates.isEmpty()) { - finished(QInstaller::RepositoryUpdatesReceived, tr("Repository updates received.")); - return; + if (!repositoryUpdates.isEmpty()) { + if (m_corePrivate->m_settings.updateDefaultRepositories(repositoryUpdates) + == Settings::UpdatesApplied) { + if (m_corePrivate->isUpdater() || m_corePrivate->isPackageManager()) + m_corePrivate->writeMaintenanceConfigFiles(); + finished(QInstaller::RepositoryUpdatesReceived, tr("Repository updates received.")); + return; + } } } diff --git a/installerbuilder/libinstaller/getrepositorymetainfojob.h b/installerbuilder/libinstaller/getrepositorymetainfojob.h index 75f8794fd..64467887d 100644 --- a/installerbuilder/libinstaller/getrepositorymetainfojob.h +++ b/installerbuilder/libinstaller/getrepositorymetainfojob.h @@ -28,7 +28,6 @@ #include <kdjob.h> -#include <QtCore/QHash> #include <QtCore/QPointer> #include <QtCore/QString> #include <QtCore/QStringList> @@ -46,6 +45,7 @@ namespace KDUpdater { namespace QInstaller { class GetRepositoriesMetaInfoJob; +class PackageManagerCorePrivate; class INSTALLER_EXPORT GetRepositoryMetaInfoJob : public KDJob { @@ -54,7 +54,7 @@ class INSTALLER_EXPORT GetRepositoryMetaInfoJob : public KDJob friend class QInstaller::GetRepositoriesMetaInfoJob; public: - explicit GetRepositoryMetaInfoJob(const QByteArray &publicKey = QByteArray(), QObject *parent = 0); + explicit GetRepositoryMetaInfoJob(PackageManagerCorePrivate *corePrivate, QObject *parent = 0); ~GetRepositoryMetaInfoJob(); Repository repository() const; @@ -66,8 +66,6 @@ public: QString temporaryDirectory() const; QString releaseTemporaryDirectory() const; - QHash<QString, QPair<Repository, Repository> > repositoryUpdates() const; - private: /* reimp */ void doStart(); /* reimp */ void doCancel(); @@ -103,8 +101,7 @@ private: bool m_waitForDone; QThreadPool m_threadPool; - - QHash<QString, QPair<Repository, Repository> > m_repositoryUpdates; + PackageManagerCorePrivate *m_corePrivate; }; } // namespace QInstaller diff --git a/installerbuilder/libinstaller/packagemanagercore_p.cpp b/installerbuilder/libinstaller/packagemanagercore_p.cpp index 6232de7a8..928c2363e 100644 --- a/installerbuilder/libinstaller/packagemanagercore_p.cpp +++ b/installerbuilder/libinstaller/packagemanagercore_p.cpp @@ -598,7 +598,7 @@ void PackageManagerCorePrivate::initialize() } if (!m_repoMetaInfoJob) { - m_repoMetaInfoJob = new GetRepositoriesMetaInfoJob(m_settings.publicKey(), this); + m_repoMetaInfoJob = new GetRepositoriesMetaInfoJob(this); m_repoMetaInfoJob->setAutoDelete(false); connect(m_repoMetaInfoJob, SIGNAL(infoMessage(KDJob*, QString)), this, SLOT(infoMessage(KDJob*, QString))); @@ -2032,9 +2032,6 @@ bool PackageManagerCorePrivate::fetchMetaInformationFromRepositories() m_updateSourcesAdded = false; m_repoMetaInfoJob->reset(); - if ((isInstaller() && !m_core->isOfflineOnly()) || (isUpdater() || isPackageManager())) - m_repoMetaInfoJob->setRepositories(m_settings.repositories()); - try { m_repoMetaInfoJob->start(); m_repoMetaInfoJob->waitForFinished(); @@ -2047,15 +2044,6 @@ bool PackageManagerCorePrivate::fetchMetaInformationFromRepositories() switch (m_repoMetaInfoJob->error()) { case QInstaller::UserIgnoreError: break; // we can simply ignore this error, the user knows about it - - case QInstaller::RepositoryUpdatesReceived: - if (m_settings.updateDefaultRepositories(m_repoMetaInfoJob->repositoryUpdates()) - == Settings::UpdatesApplied) { - fetchMetaInformationFromRepositories(); // start over, we might have complete new repos - return m_repoFetched; - } - break; - default: setStatus(PackageManagerCore::Failure, m_repoMetaInfoJob->errorString()); return m_repoFetched; |