summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--installerbuilder/libinstaller/getrepositoriesmetainfojob.cpp58
-rw-r--r--installerbuilder/libinstaller/getrepositoriesmetainfojob.h19
-rw-r--r--installerbuilder/libinstaller/getrepositorymetainfojob.cpp35
-rw-r--r--installerbuilder/libinstaller/getrepositorymetainfojob.h9
-rw-r--r--installerbuilder/libinstaller/packagemanagercore_p.cpp14
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;