[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