From 7787fb976497569fd49f77eb8ad269ca8132b351 Mon Sep 17 00:00:00 2001
From: Papoteur <papoteur@mageia.org>
Date: Sat, 1 May 2021 18:10:24 +0200
Subject: [PATCH] Add a specific function for get_packages for standard fields
 decription, size and group

This give an important improvement in time of GetPackages at start of application and relaod.
Gain is about 20% of the period of loading cache.
---
 daemon/dnfdaemon-system.py          |  5 ++++-
 python/dnfdaemon/server/__init__.py | 14 ++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/daemon/dnfdaemon-system.py b/daemon/dnfdaemon-system.py
index b9811ac..df21a20 100755
--- a/daemon/dnfdaemon-system.py
+++ b/daemon/dnfdaemon-system.py
@@ -235,7 +235,10 @@ class DnfDaemon(dnfdaemon.server.DnfDaemonBase):
         :param sender:
         """
         self.working_start(sender, write=False)
-        value = self.get_packages(pkg_filter, fields)
+        if fields ==  ['summary', 'size', 'group']:
+            value = self.get_packages_ndsg(pkg_filter)
+        else:
+            value = self.get_packages(pkg_filter, fields)
         return self.working_ended(value)
 
     @Logger
diff --git a/python/dnfdaemon/server/__init__.py b/python/dnfdaemon/server/__init__.py
index eb78c2b..a9a95bf 100644
--- a/python/dnfdaemon/server/__init__.py
+++ b/python/dnfdaemon/server/__init__.py
@@ -387,6 +387,20 @@ class DnfDaemonBase(dbus.service.Object, DownloadCallback):
             value = [self._get_po_list(po, attrs) for po in pkgs]
         return json.dumps(value)
 
+    @Logger
+    def get_packages_ndsg(self, pkg_filter):
+        """Get packages and attribute values based on a filter.
+
+        :param pkg_filter: pkg pkg_filter string ('installed','updates' etc)
+        :param attrs: list of attributes to get.
+        """
+        value = []
+        if pkg_filter in ['installed', 'available', 'updates', 'obsoletes',
+                          'recent', 'extras', 'updates_all']:
+            pkgs = getattr(self.base.packages, pkg_filter)
+            value = [[self._get_id(po), po.summary, po.size, po.group] for po in pkgs]
+        return json.dumps(value)
+
     def get_attribute(self, id, attr):
         """Get package attribute.
 
-- 
GitLab