From kde-commits Thu May 31 01:47:22 2018 From: Aleix Pol Date: Thu, 31 May 2018 01:47:22 +0000 To: kde-commits Subject: [discover/Plasma/5.12] libdiscover/backends/PackageKitBackend: Fix dependency counting Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=152773125509106 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 =3D PackageKit::Daemon::getDetail= s(ids); connect(transaction, &PackageKit::Transaction::details, this, &Package= KitBackend::packageDetails); connect(transaction, &PackageKit::Transaction::errorCode, this, &Packa= geKitBackend::transactionError); - - QSharedPointer> packageDependencies(new QMap); - auto trans =3D PackageKit::Daemon::dependsOn(ids); - connect(trans, &PackageKit::Transaction::package, this, [packageDepend= encies](PackageKit::Transaction::Info /*info*/, const QString &packageID, c= onst QString &/*summary*/) { - (*packageDependencies)[packageID] +=3D 1; - }); - connect(trans, &PackageKit::Transaction::finished, this, [this, packag= eDependencies](PackageKit::Transaction::Exit /*status*/) { - auto pkgDeps =3D (*packageDependencies); - - for (auto it =3D pkgDeps.constBegin(), itEnd =3D pkgDeps.constEnd(= ); it !=3D itEnd; ++it) { - const auto resources =3D resourcesByPackageName(PackageKit::Da= emon::packageName(it.key())); - for(auto resource : resources) { - auto pkres =3D qobject_cast(resource); - pkres->setDependenciesCount(it.value()); - } - } - }); } = void PackageKitBackend::checkDaemonRunning() diff --git a/libdiscover/backends/PackageKitBackend/PackageKitBackend.h b/l= ibdiscover/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 Ab= stractResourcesBackend public Q_SLOTS: void reloadPackageList(); void refreshDatabase(); + void transactionError(PackageKit::Transaction::Error, const QStrin= g& message); = private Q_SLOTS: void getPackagesFinished(); @@ -86,7 +87,6 @@ class DISCOVERCOMMON_EXPORT PackageKitBackend : public Ab= stractResourcesBackend void addPackageArch(PackageKit::Transaction::Info info, const QStr= ing &packageId, const QString &summary); void addPackageNotArch(PackageKit::Transaction::Info info, const Q= String &packageId, const QString &summary); void packageDetails(const PackageKit::Details& details); - void transactionError(PackageKit::Transaction::Error, const QStrin= g& message); void addPackageToUpdate(PackageKit::Transaction::Info, const QStri= ng& 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 #include #include +#include #include = PackageKitResource::PackageKitResource(QString packageName, QString summar= y, 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](con= st QJsonObject& obj) { setDependenciesCount(obj.size()); }); } = QString PackageKitResource::name() const @@ -176,7 +178,7 @@ void PackageKitResource::failedFetchingDetails(PackageK= it::Transaction::Error, c qWarning() << "error fetching details" << msg; } = -void PackageKitResource::setDependenciesCount(uint deps) +void PackageKitResource::setDependenciesCount(int deps) { if (deps !=3D m_dependenciesCount) { m_dependenciesCount =3D deps; @@ -254,8 +256,31 @@ PackageKitBackend* PackageKitResource::backend() const = QString PackageKitResource::sizeDescription() { - if (m_dependenciesCount =3D=3D 0) + if (m_dependenciesCount < 0) { + fetchDetails(); + fetchDependencies(); + } + + if (m_dependenciesCount <=3D 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 =3D availablePackageId(); + if (id.isEmpty()) + return; + m_dependenciesCount =3D 0; + + QSharedPointer packageDependencies(new QJsonObject); + auto trans =3D PackageKit::Daemon::installPackage(id, PackageKit::Tran= saction::TransactionFlagSimulate); + connect(trans, &PackageKit::Transaction::errorCode, backend(), &Packag= eKitBackend::transactionError); + connect(trans, &PackageKit::Transaction::package, this, [packageDepend= encies](PackageKit::Transaction::Info info, const QString &packageID, const= QString &summary) { + (*packageDependencies)[PackageKit::Daemon::packageName(packageID)]= =3D summary ; + }); + connect(trans, &PackageKit::Transaction::finished, this, [this, packag= eDependencies](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 QStrin= g &packageId, bool arch); @@ -90,6 +93,8 @@ class PackageKitResource : public AbstractResource void failedFetchingDetails(PackageKit::Transaction::Error, const Q= String& msg); = private: + void fetchDependencies(); + void setDependencies(const QStringList &deps); /** fetches details individually, it's better if done in batch, li= ke 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 =3D -1; }; = #endif // PACKAGEKITRESOURCE_H