Simpler patch
This commit is contained in:
parent
a624dec0af
commit
dd8f13536a
@ -1,121 +1,14 @@
|
|||||||
From 23f1fe1736b35fe15ca17a1388251f6b52628d46 Mon Sep 17 00:00:00 2001
|
commit 65ab13c42001d125ec10322e488e5dd4b29a61f6
|
||||||
From: Richard Hughes <richard@hughsie.com>
|
Author: Richard Hughes <richard@hughsie.com>
|
||||||
Date: Tue, 8 Oct 2019 17:07:09 +0100
|
Date: Fri Oct 11 16:56:03 2019 +0100
|
||||||
Subject: [PATCH] Do not show non-applications in the installed panel
|
|
||||||
|
|
||||||
Using appstream-glib to parse the desktop files into fake AppStream components
|
Do not show non-applications in the installed panel
|
||||||
had a drawback: it worked too well. What we wanted to do was only show
|
|
||||||
applications with AppData files in the installed list, only using the desktop
|
|
||||||
metadata if the icon could not be found in the AppStream metadata.
|
|
||||||
|
|
||||||
Instead we showed all apps, even ones that would be disasterous if removed...
|
|
||||||
|
|
||||||
Lets make this simpler; we can parse the desktop file directly. We only need
|
|
||||||
the icon and the component ID, so create a fake component without using
|
|
||||||
as_app_parse_data() at all. This should speed up initial startup, as we're
|
|
||||||
doing a lot less IO than before if there are a lot of desktop files installed.
|
|
||||||
|
|
||||||
We'll also be storing less data (e.g. translations we're never going to use) in
|
|
||||||
the xmlb mmap store -- although it makes no difference to query speed it'll
|
|
||||||
make a difference for storage space.
|
|
||||||
|
|
||||||
To ensure we only query AppData files for the installed list, we can now just
|
|
||||||
query for the existance of the <name> tag -- which the fake components now will
|
|
||||||
not have.
|
|
||||||
|
|
||||||
So that the xmlb store is regenerated with the fix, also add the package
|
|
||||||
version to the libxmlb cache guid.
|
|
||||||
|
|
||||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1759193
|
|
||||||
---
|
|
||||||
plugins/core/gs-plugin-appstream.c | 72 ++++++++++++++++++++++++++----
|
|
||||||
1 file changed, 63 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/core/gs-plugin-appstream.c b/plugins/core/gs-plugin-appstream.c
|
diff --git a/plugins/core/gs-plugin-appstream.c b/plugins/core/gs-plugin-appstream.c
|
||||||
index 1f18693b..4f5873cf 100644
|
index 1f18693b..4d8ba517 100644
|
||||||
--- a/plugins/core/gs-plugin-appstream.c
|
--- a/plugins/core/gs-plugin-appstream.c
|
||||||
+++ b/plugins/core/gs-plugin-appstream.c
|
+++ b/plugins/core/gs-plugin-appstream.c
|
||||||
@@ -206,20 +206,71 @@ gs_plugin_appstream_load_desktop_cb (XbBuilderSource *self,
|
@@ -517,6 +517,9 @@ gs_plugin_appstream_check_silo (GsPlugin *plugin,
|
||||||
GCancellable *cancellable,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
- GString *xml;
|
|
||||||
- g_autoptr(AsApp) app = as_app_new ();
|
|
||||||
+ g_autofree gchar *icon = NULL;
|
|
||||||
+ g_autofree gchar *type = NULL;
|
|
||||||
+ g_autofree gchar *xml = NULL;
|
|
||||||
+ g_autofree gchar *name = NULL;
|
|
||||||
g_autoptr(GBytes) bytes = NULL;
|
|
||||||
+ g_autoptr(GKeyFile) kf = g_key_file_new ();
|
|
||||||
+
|
|
||||||
+ /* get icon from desktop file */
|
|
||||||
bytes = xb_builder_source_ctx_get_bytes (ctx, cancellable, error);
|
|
||||||
if (bytes == NULL)
|
|
||||||
return NULL;
|
|
||||||
- as_app_set_id (app, xb_builder_source_ctx_get_filename (ctx));
|
|
||||||
- if (!as_app_parse_data (app, bytes, AS_APP_PARSE_FLAG_USE_FALLBACKS, error))
|
|
||||||
+ if (!g_key_file_load_from_data (kf,
|
|
||||||
+ g_bytes_get_data (bytes, NULL),
|
|
||||||
+ g_bytes_get_size (bytes),
|
|
||||||
+ G_KEY_FILE_NONE,
|
|
||||||
+ error))
|
|
||||||
return NULL;
|
|
||||||
- xml = as_app_to_xml (app, error);
|
|
||||||
- if (xml == NULL)
|
|
||||||
+ if (g_key_file_get_boolean (kf,
|
|
||||||
+ G_KEY_FILE_DESKTOP_GROUP,
|
|
||||||
+ G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY,
|
|
||||||
+ NULL)) {
|
|
||||||
+ g_set_error_literal (error,
|
|
||||||
+ GS_PLUGIN_ERROR,
|
|
||||||
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
|
|
||||||
+ "NoDisplay=true");
|
|
||||||
return NULL;
|
|
||||||
- g_string_prepend (xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
|
|
||||||
- return g_memory_input_stream_new_from_data (g_string_free (xml, FALSE), -1, g_free);
|
|
||||||
+ }
|
|
||||||
+ type = g_key_file_get_string (kf,
|
|
||||||
+ G_KEY_FILE_DESKTOP_GROUP,
|
|
||||||
+ G_KEY_FILE_DESKTOP_KEY_TYPE,
|
|
||||||
+ error);
|
|
||||||
+ if (type == NULL)
|
|
||||||
+ return NULL;
|
|
||||||
+ if (g_strcmp0 (type, G_KEY_FILE_DESKTOP_TYPE_APPLICATION) != 0) {
|
|
||||||
+ g_set_error (error,
|
|
||||||
+ GS_PLUGIN_ERROR,
|
|
||||||
+ GS_PLUGIN_ERROR_NOT_SUPPORTED,
|
|
||||||
+ "Type=%s", type);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+ icon = g_key_file_get_string (kf,
|
|
||||||
+ G_KEY_FILE_DESKTOP_GROUP,
|
|
||||||
+ G_KEY_FILE_DESKTOP_KEY_ICON,
|
|
||||||
+ error);
|
|
||||||
+ if (icon == NULL)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ name = g_key_file_get_string (kf,
|
|
||||||
+ G_KEY_FILE_DESKTOP_GROUP,
|
|
||||||
+ G_KEY_FILE_DESKTOP_KEY_NAME,
|
|
||||||
+ error);
|
|
||||||
+ if (name == NULL)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ /* build a super-simple fake AppData file */
|
|
||||||
+ xml = g_strdup_printf ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
|
||||||
+ "<component type=\"desktop\">\n"
|
|
||||||
+ "<id>%s</id>\n"
|
|
||||||
+ "<name>%s</name>"
|
|
||||||
+ "<icon type=\"stock\">%s</icon>\n"
|
|
||||||
+ "</component>\n",
|
|
||||||
+ xb_builder_source_ctx_get_filename (ctx),
|
|
||||||
+ name,
|
|
||||||
+ icon);
|
|
||||||
+ return g_memory_input_stream_new_from_data (g_steal_pointer (&xml), -1, g_free);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
@@ -517,6 +568,9 @@ gs_plugin_appstream_check_silo (GsPlugin *plugin,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +18,7 @@ index 1f18693b..4f5873cf 100644
|
|||||||
/* create per-user cache */
|
/* create per-user cache */
|
||||||
blobfn = gs_utils_get_cache_filename ("appstream", "components.xmlb",
|
blobfn = gs_utils_get_cache_filename ("appstream", "components.xmlb",
|
||||||
GS_UTILS_CACHE_FLAG_WRITEABLE,
|
GS_UTILS_CACHE_FLAG_WRITEABLE,
|
||||||
@@ -925,7 +979,7 @@ gs_plugin_add_installed (GsPlugin *plugin,
|
@@ -925,7 +928,7 @@ gs_plugin_add_installed (GsPlugin *plugin,
|
||||||
locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
|
locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
|
||||||
|
|
||||||
/* get all installed appdata files (notice no 'components/' prefix...) */
|
/* get all installed appdata files (notice no 'components/' prefix...) */
|
||||||
@ -134,6 +27,3 @@ index 1f18693b..4f5873cf 100644
|
|||||||
if (components == NULL)
|
if (components == NULL)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
for (guint i = 0; i < components->len; i++) {
|
for (guint i = 0; i < components->len; i++) {
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
Name: gnome-software
|
Name: gnome-software
|
||||||
Version: 3.34.1
|
Version: 3.34.1
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: A software center for GNOME
|
Summary: A software center for GNOME
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -223,6 +223,10 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
|
|||||||
%{_mandir}/man1/gnome-software-editor.1*
|
%{_mandir}/man1/gnome-software-editor.1*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Oct 11 2019 Richard Hughes <rhughes@redhat.com> - 3.34.1-4
|
||||||
|
- Backport a simpler to correct the installed applications
|
||||||
|
- Resolves #1759193
|
||||||
|
|
||||||
* Fri Oct 11 2019 Richard Hughes <rhughes@redhat.com> - 3.34.1-3
|
* Fri Oct 11 2019 Richard Hughes <rhughes@redhat.com> - 3.34.1-3
|
||||||
- Backport a better patch to correct the installed applications
|
- Backport a better patch to correct the installed applications
|
||||||
- Resolves #1759193
|
- Resolves #1759193
|
||||||
|
Loading…
Reference in New Issue
Block a user