[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [discover/Plasma/5.12] libdiscover/backends/PackageKitBackend: Fix dependency counting
From: Aleix Pol <null () kde ! org>
Date: 2018-05-31 1:47:22
Message-ID: E1fOCgU-0002WJ-El () code ! kde ! org
[Download RAW message or body]
Git commit 6d63fd3581cb39be8ef4eccfb3b697751daaacc5 by Aleix Pol.
Committed on 31/05/2018 at 01:46.
Pushed by apol into branch 'Plasma/5.12'.
Fix dependency counting
Only do it for the transactions we need.
M +0 -17 libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
M +1 -1 libdiscover/backends/PackageKitBackend/PackageKitBackend.h
M +28 -3 libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
M +7 -2 libdiscover/backends/PackageKitBackend/PackageKitResource.h
https://commits.kde.org/discover/6d63fd3581cb39be8ef4eccfb3b697751daaacc5
diff --git a/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp \
b/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp index \
dfb7c418..c58430d5 100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
+++ b/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
@@ -567,23 +567,6 @@ void PackageKitBackend::performDetailsFetch()
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::dependsOn(ids);
- 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/PackageKitBackend.h \
b/libdiscover/backends/PackageKitBackend/PackageKitBackend.h index f30041c2..749703c5 \
100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitBackend.h
+++ b/libdiscover/backends/PackageKitBackend/PackageKitBackend.h
@@ -79,6 +79,7 @@ class DISCOVERCOMMON_EXPORT PackageKitBackend : public \
AbstractResourcesBackend public Q_SLOTS:
void reloadPackageList();
void refreshDatabase();
+ void transactionError(PackageKit::Transaction::Error, const QString& \
message);
private Q_SLOTS:
void getPackagesFinished();
@@ -86,7 +87,6 @@ class DISCOVERCOMMON_EXPORT PackageKitBackend : public \
AbstractResourcesBackend
void addPackageArch(PackageKit::Transaction::Info info, const QString \
&packageId, const QString &summary);
void addPackageNotArch(PackageKit::Transaction::Info info, const QString \
&packageId, const QString &summary); void packageDetails(const PackageKit::Details& \
details);
- void transactionError(PackageKit::Transaction::Error, const QString& \
message);
void addPackageToUpdate(PackageKit::Transaction::Info, const QString& pkgid, \
const QString& summary); void \
getUpdatesFinished(PackageKit::Transaction::Exit,uint);
void getUpdatesDetailsFinished(PackageKit::Transaction::Exit,uint);
diff --git a/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp \
b/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp index \
9ad765e5..ac48d3eb 100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
+++ b/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
@@ -25,15 +25,17 @@
#include <KLocalizedString>
#include <PackageKit/Details>
#include <PackageKit/Daemon>
+#include <QJsonArray>
#include <QDebug>
PackageKitResource::PackageKitResource(QString packageName, QString summary, \
PackageKitBackend* parent) : AbstractResource(parent)
, m_summary(std::move(summary))
, m_name(std::move(packageName))
- , m_dependenciesCount(0)
{
setObjectName(m_name);
+
+ connect(this, &PackageKitResource::dependenciesFound, this, [this](const \
QJsonObject& obj) { setDependenciesCount(obj.size()); }); }
QString PackageKitResource::name() const
@@ -176,7 +178,7 @@ void \
PackageKitResource::failedFetchingDetails(PackageKit::Transaction::Error, c \
qWarning() << "error fetching details" << msg; }
-void PackageKitResource::setDependenciesCount(uint deps)
+void PackageKitResource::setDependenciesCount(int deps)
{
if (deps != m_dependenciesCount) {
m_dependenciesCount = deps;
@@ -254,8 +256,31 @@ PackageKitBackend* PackageKitResource::backend() const
QString PackageKitResource::sizeDescription()
{
- if (m_dependenciesCount == 0)
+ if (m_dependenciesCount < 0) {
+ fetchDetails();
+ fetchDependencies();
+ }
+
+ if (m_dependenciesCount <= 0)
return AbstractResource::sizeDescription();
else
return i18np("%2 (plus %1 dependency)", "%2 (plus %1 dependencies)", \
m_dependenciesCount, AbstractResource::sizeDescription()); }
+
+void PackageKitResource::fetchDependencies()
+{
+ const auto id = availablePackageId();
+ if (id.isEmpty())
+ return;
+ m_dependenciesCount = 0;
+
+ QSharedPointer<QJsonObject> packageDependencies(new QJsonObject);
+ auto trans = PackageKit::Daemon::installPackage(id, \
PackageKit::Transaction::TransactionFlagSimulate); + connect(trans, \
&PackageKit::Transaction::errorCode, backend(), \
&PackageKitBackend::transactionError); + connect(trans, \
&PackageKit::Transaction::package, this, \
[packageDependencies](PackageKit::Transaction::Info info, const QString &packageID, \
const QString &summary) { + \
(*packageDependencies)[PackageKit::Daemon::packageName(packageID)] = summary ; + \
}); + connect(trans, &PackageKit::Transaction::finished, this, [this, \
packageDependencies](PackageKit::Transaction::Exit status) { + Q_EMIT \
dependenciesFound(*packageDependencies); + });
+}
diff --git a/libdiscover/backends/PackageKitBackend/PackageKitResource.h \
b/libdiscover/backends/PackageKitBackend/PackageKitResource.h index \
24284c68..19a92f03 100644
--- a/libdiscover/backends/PackageKitBackend/PackageKitResource.h
+++ b/libdiscover/backends/PackageKitBackend/PackageKitResource.h
@@ -67,7 +67,10 @@ class PackageKitResource : public AbstractResource
bool canExecute() const override { return false; }
QString sizeDescription() override;
- void setDependenciesCount(uint count);
+ void setDependenciesCount(int count);
+
+ Q_SIGNALS:
+ void dependenciesFound(const QJsonObject& dependencies);
public Q_SLOTS:
void addPackageId(PackageKit::Transaction::Info info, const QString \
&packageId, bool arch); @@ -90,6 +93,8 @@ class PackageKitResource : public \
AbstractResource
void failedFetchingDetails(PackageKit::Transaction::Error, const QString& \
msg);
private:
+ void fetchDependencies();
+ void setDependencies(const QStringList &deps);
/** fetches details individually, it's better if done in batch, like for \
updates */ void fetchDetails();
@@ -97,7 +102,7 @@ class PackageKitResource : public AbstractResource
const QString m_summary;
const QString m_name;
PackageKit::Details m_details;
- uint m_dependenciesCount;
+ int m_dependenciesCount = -1;
};
#endif // PACKAGEKITRESOURCE_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic