diff --git a/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp b/libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp index 6258708c85c5999ad0e7fecfaaa0a58d7f280f50..38956f4bfb6107630b2937637ceb80f4d6242870 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> packageDependencies(new QMap); + 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(resource); + pkres->setDependenciesCount(it.value()); + } + } + }); } void PackageKitBackend::checkDaemonRunning() diff --git a/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp b/libdiscover/backends/PackageKitBackend/PackageKitResource.cpp index f092e119bff5fd131be1f44118e8440a919d97bc..e2bdfde011a0eff58ac94e411174839db35ec691 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 08eb4cbd9875188f0663b76203853d4cdcb17232..181bc6f6ce775bf9116b6d562eaa8a4a50af18f8 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);