[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [discover/Plasma/5.12] libdiscover/backends/PackageKitBackend: Fetch all dependencies in a single tr
From: Aleix Pol <null () kde ! org>
Date: 2018-01-24 3:12:30
Message-ID: E1eeBUE-0007YM-N6 () code ! kde ! org
[Download RAW message or body]
Git commit 2fd22c34497328d1c092eb3a29c20119bef7aeb0 by Aleix Pol.
Committed on 24/01/2018 at 03:06.
Pushed by apol into branch 'Plasma/5.12'.
Fetch all dependencies in a single transaction
PackageKit would choke on big updates otherwise
M +21 -1 libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
M +8 -12 libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
M +1 -0 libdiscover/backends/PackageKitBackend/PackageKitResource.h
https://commits.kde.org/discover/2fd22c34497328d1c092eb3a29c20119bef7aeb0
diff --git a/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp \
b/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp index \
6258708c..38956f4b 100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
+++ b/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
@@ -515,9 +515,29 @@ void PackageKitBackend::fetchDetails(const QString& pkgid)
void PackageKitBackend::performDetailsFetch()
{
Q_ASSERT(!m_packageNamesToFetchDetails.isEmpty());
- PackageKit::Transaction* transaction = \
PackageKit::Daemon::getDetails(m_packageNamesToFetchDetails.toList()); + const \
auto ids = m_packageNamesToFetchDetails.toList(); +
+ PackageKit::Transaction* transaction = PackageKit::Daemon::getDetails(ids);
connect(transaction, &PackageKit::Transaction::details, this, \
&PackageKitBackend::packageDetails);
connect(transaction, &PackageKit::Transaction::errorCode, this, \
&PackageKitBackend::transactionError); +
+ QSharedPointer<QMap<QString, int>> packageDependencies(new QMap<QString, int>);
+ auto trans = PackageKit::Daemon::installPackages(ids, \
PackageKit::Transaction::TransactionFlagSimulate); + connect(trans, \
&PackageKit::Transaction::errorCode, this, &PackageKitBackend::transactionError); + \
connect(trans, &PackageKit::Transaction::package, this, \
[packageDependencies](PackageKit::Transaction::Info /*info*/, const QString \
&packageID, const QString &/*summary*/) { + (*packageDependencies)[packageID] \
+= 1; + });
+ connect(trans, &PackageKit::Transaction::finished, this, [this, \
packageDependencies](PackageKit::Transaction::Exit /*status*/) { + auto \
pkgDeps = (*packageDependencies); +
+ for (auto it = pkgDeps.constBegin(), itEnd = pkgDeps.constEnd(); it != \
itEnd; ++it) { + const auto resources = \
resourcesByPackageName(PackageKit::Daemon::packageName(it.key())); + \
for(auto resource : resources) { + auto pkres = \
qobject_cast<PackageKitResource*>(resource); + \
pkres->setDependenciesCount(it.value()); + }
+ }
+ });
}
void PackageKitBackend::checkDaemonRunning()
diff --git a/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp \
b/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp index \
f092e119..e2bdfde0 100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
+++ b/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
@@ -169,18 +169,6 @@ void PackageKitResource::fetchDetails()
m_details.insert(QStringLiteral("fetching"), true);//we add an entry so it's not \
re-fetched.
backend()->fetchDetails(pkgid);
-
- auto trans = PackageKit::Daemon::installPackages({ pkgid }, \
PackageKit::Transaction::TransactionFlagSimulate);
- connect(trans, &PackageKit::Transaction::package, this, \
[trans](PackageKit::Transaction::Info /*info*/, const QString &/*packageID*/, const \
QString &/*summary*/) {
- trans->setProperty("dependencies", trans->property("dependencies").toUInt() \
+ 1);
- });
- connect(trans, &PackageKit::Transaction::finished, this, [this, \
trans](PackageKit::Transaction::Exit /*status*/) {
- auto deps = trans->property("dependencies").toUInt();
- if (deps != m_dependenciesCount) {
- m_dependenciesCount = deps;
- Q_EMIT sizeChanged();
- }
- });
}
void PackageKitResource::failedFetchingDetails(PackageKit::Transaction::Error, const \
QString& msg) @@ -188,6 +176,14 @@ void \
PackageKitResource::failedFetchingDetails(PackageKit::Transaction::Error, c \
qWarning() << "error fetching details" << msg; }
+void PackageKitResource::setDependenciesCount(uint deps)
+{
+ if (deps != m_dependenciesCount) {
+ m_dependenciesCount = deps;
+ Q_EMIT sizeChanged();
+ }
+}
+
void PackageKitResource::setDetails(const PackageKit::Details & details)
{
const bool ourDetails = details.packageId() == availablePackageId();
diff --git a/libdiscover/backends/PackageKitBackend/PackageKitResource.h \
b/libdiscover/backends/PackageKitBackend/PackageKitResource.h index \
08eb4cbd..181bc6f6 100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitResource.h
+++ b/libdiscover/backends/PackageKitBackend/PackageKitResource.h
@@ -67,6 +67,7 @@ class PackageKitResource : public AbstractResource
bool canExecute() const override { return false; }
QString sizeDescription() override;
+ void setDependenciesCount(uint count);
public Q_SLOTS:
void addPackageId(PackageKit::Transaction::Info info, const QString \
&packageId, bool arch);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic