Compare commits

...

No commits in common. "c8" and "c9-beta" have entirely different histories.
c8 ... c9-beta

20 changed files with 1169 additions and 3624 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/gnome-software-3.36.1.tar.xz
SOURCES/gnome-software-45.3.tar.xz

1
.gnome-software.metadata Normal file
View File

@ -0,0 +1 @@
5f8d9e12db5da6b9e82b2cd7ec23768e5ac3df0c SOURCES/gnome-software-45.3.tar.xz

View File

@ -1,813 +0,0 @@
From b6a41a1b9e9020a23dbc418183ebe4746b6ec027 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Mon, 18 May 2020 14:45:35 +0200
Subject: [PATCH 1/2] Add basic auth support to flatpak plugin
This is useful for e.g. OCI remotes that can use basic auth.
All user visible strings in the basic auth dialog are taken from the
flatpak CLI client.
---
lib/gs-plugin-loader.c | 29 +++-
lib/gs-plugin-loader.h | 7 +-
lib/gs-plugin.c | 68 +++++++++-
lib/gs-plugin.h | 13 +-
plugins/flatpak/gs-plugin-flatpak.c | 55 +++++++-
po/POTFILES.in | 2 +
src/gnome-software.gresource.xml | 1 +
src/gs-basic-auth-dialog.c | 130 ++++++++++++++++++
src/gs-basic-auth-dialog.h | 28 ++++
src/gs-basic-auth-dialog.ui | 203 ++++++++++++++++++++++++++++
src/gs-shell.c | 25 +++-
src/meson.build | 1 +
12 files changed, 556 insertions(+), 6 deletions(-)
create mode 100644 src/gs-basic-auth-dialog.c
create mode 100644 src/gs-basic-auth-dialog.h
create mode 100644 src/gs-basic-auth-dialog.ui
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
index 979f3d5d..35382e3f 100644
--- a/lib/gs-plugin-loader.c
+++ b/lib/gs-plugin-loader.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2007-2018 Richard Hughes <richard@hughsie.com>
- * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2014-2020 Kalev Lember <klember@redhat.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -74,6 +74,7 @@ enum {
SIGNAL_PENDING_APPS_CHANGED,
SIGNAL_UPDATES_CHANGED,
SIGNAL_RELOAD,
+ SIGNAL_BASIC_AUTH_START,
SIGNAL_LAST
};
@@ -2016,6 +2017,23 @@ gs_plugin_loader_status_changed_cb (GsPlugin *plugin,
0, app, status);
}
+static void
+gs_plugin_loader_basic_auth_start_cb (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data,
+ GsPluginLoader *plugin_loader)
+{
+ g_debug ("emitting basic-auth-start %s", realm);
+ g_signal_emit (plugin_loader,
+ signals[SIGNAL_BASIC_AUTH_START], 0,
+ remote,
+ realm,
+ callback,
+ user_data);
+}
+
static gboolean
gs_plugin_loader_job_actions_changed_delay_cb (gpointer user_data)
{
@@ -2102,6 +2120,9 @@ gs_plugin_loader_open_plugin (GsPluginLoader *plugin_loader,
g_signal_connect (plugin, "status-changed",
G_CALLBACK (gs_plugin_loader_status_changed_cb),
plugin_loader);
+ g_signal_connect (plugin, "basic-auth-start",
+ G_CALLBACK (gs_plugin_loader_basic_auth_start_cb),
+ plugin_loader);
g_signal_connect (plugin, "report-event",
G_CALLBACK (gs_plugin_loader_report_event_cb),
plugin_loader);
@@ -2712,6 +2733,12 @@ gs_plugin_loader_class_init (GsPluginLoaderClass *klass)
G_STRUCT_OFFSET (GsPluginLoaderClass, reload),
NULL, NULL, g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals [SIGNAL_BASIC_AUTH_START] =
+ g_signal_new ("basic-auth-start",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginLoaderClass, basic_auth_start),
+ NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
}
static void
diff --git a/lib/gs-plugin-loader.h b/lib/gs-plugin-loader.h
index 74cbfa53..e88ea2d1 100644
--- a/lib/gs-plugin-loader.h
+++ b/lib/gs-plugin-loader.h
@@ -1,7 +1,7 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2007-2017 Richard Hughes <richard@hughsie.com>
- * Copyright (C) 2015 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2015-2020 Kalev Lember <klember@redhat.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -31,6 +31,11 @@ struct _GsPluginLoaderClass
void (*pending_apps_changed) (GsPluginLoader *plugin_loader);
void (*updates_changed) (GsPluginLoader *plugin_loader);
void (*reload) (GsPluginLoader *plugin_loader);
+ void (*basic_auth_start) (GsPluginLoader *plugin_loader,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data);
};
GsPluginLoader *gs_plugin_loader_new (void);
diff --git a/lib/gs-plugin.c b/lib/gs-plugin.c
index 5aed1058..3f63fa97 100644
--- a/lib/gs-plugin.c
+++ b/lib/gs-plugin.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
- * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2014-2020 Kalev Lember <klember@redhat.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -87,6 +87,7 @@ enum {
SIGNAL_RELOAD,
SIGNAL_REPORT_EVENT,
SIGNAL_ALLOW_UPDATES,
+ SIGNAL_BASIC_AUTH_START,
SIGNAL_LAST
};
@@ -851,6 +852,64 @@ gs_plugin_status_update (GsPlugin *plugin, GsApp *app, GsPluginStatus status)
g_source_attach (idle_source, NULL);
}
+typedef struct {
+ GsPlugin *plugin;
+ gchar *remote;
+ gchar *realm;
+ GCallback callback;
+ gpointer user_data;
+} GsPluginBasicAuthHelper;
+
+static gboolean
+gs_plugin_basic_auth_start_cb (gpointer user_data)
+{
+ GsPluginBasicAuthHelper *helper = user_data;
+ g_signal_emit (helper->plugin,
+ signals[SIGNAL_BASIC_AUTH_START], 0,
+ helper->remote,
+ helper->realm,
+ helper->callback,
+ helper->user_data);
+ g_free (helper->remote);
+ g_free (helper->realm);
+ g_slice_free (GsPluginBasicAuthHelper, helper);
+ return FALSE;
+}
+
+/**
+ * gs_plugin_basic_auth_start:
+ * @plugin: a #GsPlugin
+ * @remote: a string
+ * @realm: a string
+ * @callback: callback to invoke to submit the user/password
+ * @user_data: callback data to pass to the callback
+ *
+ * Emit the basic-auth-start signal in the main thread.
+ *
+ * Since: 3.38
+ **/
+void
+gs_plugin_basic_auth_start (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data)
+{
+ GsPluginBasicAuthHelper *helper;
+ g_autoptr(GSource) idle_source = NULL;
+
+ helper = g_slice_new0 (GsPluginBasicAuthHelper);
+ helper->plugin = plugin;
+ helper->remote = g_strdup (remote);
+ helper->realm = g_strdup (realm);
+ helper->callback = callback;
+ helper->user_data = user_data;
+
+ idle_source = g_idle_source_new ();
+ g_source_set_callback (idle_source, gs_plugin_basic_auth_start_cb, helper, NULL);
+ g_source_attach (idle_source, NULL);
+}
+
static gboolean
gs_plugin_app_launch_cb (gpointer user_data)
{
@@ -1959,6 +2018,13 @@ gs_plugin_class_init (GsPluginClass *klass)
G_STRUCT_OFFSET (GsPluginClass, allow_updates),
NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals [SIGNAL_BASIC_AUTH_START] =
+ g_signal_new ("basic-auth-start",
+ G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsPluginClass, basic_auth_start),
+ NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
}
static void
diff --git a/lib/gs-plugin.h b/lib/gs-plugin.h
index 7dd2d864..d07afd3b 100644
--- a/lib/gs-plugin.h
+++ b/lib/gs-plugin.h
@@ -1,6 +1,7 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2012-2016 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2020 Kalev Lember <klember@redhat.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -37,7 +38,12 @@ struct _GsPluginClass
GsPluginEvent *event);
void (*allow_updates) (GsPlugin *plugin,
gboolean allow_updates);
- gpointer padding[26];
+ void (*basic_auth_start) (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data);
+ gpointer padding[25];
};
typedef struct GsPluginData GsPluginData;
@@ -116,5 +122,10 @@ void gs_plugin_report_event (GsPlugin *plugin,
void gs_plugin_set_allow_updates (GsPlugin *plugin,
gboolean allow_updates);
gboolean gs_plugin_get_network_available (GsPlugin *plugin);
+void gs_plugin_basic_auth_start (GsPlugin *plugin,
+ const gchar *remote,
+ const gchar *realm,
+ GCallback callback,
+ gpointer user_data);
G_END_DECLS
diff --git a/plugins/flatpak/gs-plugin-flatpak.c b/plugins/flatpak/gs-plugin-flatpak.c
index 4d6a81ba..2518025d 100644
--- a/plugins/flatpak/gs-plugin-flatpak.c
+++ b/plugins/flatpak/gs-plugin-flatpak.c
@@ -2,7 +2,7 @@
*
* Copyright (C) 2016 Joaquim Rocha <jrocha@endlessm.com>
* Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
- * Copyright (C) 2017-2018 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2017-2020 Kalev Lember <klember@redhat.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -456,6 +456,55 @@ _group_apps_by_installation (GsPlugin *plugin,
return g_steal_pointer (&applist_by_flatpaks);
}
+#if FLATPAK_CHECK_VERSION(1,6,0)
+typedef struct {
+ FlatpakTransaction *transaction;
+ guint id;
+} BasicAuthData;
+
+static void
+basic_auth_data_free (BasicAuthData *data)
+{
+ g_object_unref (data->transaction);
+ g_slice_free (BasicAuthData, data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(BasicAuthData, basic_auth_data_free)
+
+static void
+_basic_auth_cb (const gchar *user, const gchar *password, gpointer user_data)
+{
+ g_autoptr(BasicAuthData) data = user_data;
+
+ g_debug ("Submitting basic auth data");
+
+ /* NULL user aborts the basic auth request */
+ flatpak_transaction_complete_basic_auth (data->transaction, data->id, user, password, NULL /* options */);
+}
+
+static gboolean
+_basic_auth_start (FlatpakTransaction *transaction,
+ const char *remote,
+ const char *realm,
+ GVariant *options,
+ guint id,
+ GsPlugin *plugin)
+{
+ BasicAuthData *data;
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE))
+ return FALSE;
+
+ data = g_slice_new0 (BasicAuthData);
+ data->transaction = g_object_ref (transaction);
+ data->id = id;
+
+ g_debug ("Login required remote %s (realm %s)\n", remote, realm);
+ gs_plugin_basic_auth_start (plugin, remote, realm, G_CALLBACK (_basic_auth_cb), data);
+ return TRUE;
+}
+#endif
+
static FlatpakTransaction *
_build_transaction (GsPlugin *plugin, GsFlatpak *flatpak,
GCancellable *cancellable, GError **error)
@@ -491,6 +540,10 @@ _build_transaction (GsPlugin *plugin, GsFlatpak *flatpak,
/* connect up signals */
g_signal_connect (transaction, "ref-to-app",
G_CALLBACK (_ref_to_app), plugin);
+#if FLATPAK_CHECK_VERSION(1,6,0)
+ g_signal_connect (transaction, "basic-auth-start",
+ G_CALLBACK (_basic_auth_start), plugin);
+#endif
/* use system installations as dependency sources for user installations */
flatpak_transaction_add_default_dependency_sources (transaction);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 20721c4a..a44a6ad3 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,6 +10,8 @@ src/gs-app-row.c
src/gs-app-row.ui
src/gs-app-tile.c
src/gs-app-tile.ui
+src/gs-basic-auth-dialog.c
+src/gs-basic-auth-dialog.ui
lib/gs-category.c
src/gs-category-page.c
src/gs-category-page.ui
diff --git a/src/gnome-software.gresource.xml b/src/gnome-software.gresource.xml
index 3eaabca2..459ecf82 100644
--- a/src/gnome-software.gresource.xml
+++ b/src/gnome-software.gresource.xml
@@ -4,6 +4,7 @@
<file preprocess="xml-stripblanks">gnome-software.ui</file>
<file preprocess="xml-stripblanks">gs-app-addon-row.ui</file>
<file preprocess="xml-stripblanks">gs-app-row.ui</file>
+ <file preprocess="xml-stripblanks">gs-basic-auth-dialog.ui</file>
<file preprocess="xml-stripblanks">gs-category-page.ui</file>
<file preprocess="xml-stripblanks">gs-category-tile.ui</file>
<file preprocess="xml-stripblanks">gs-details-page.ui</file>
diff --git a/src/gs-basic-auth-dialog.c b/src/gs-basic-auth-dialog.c
new file mode 100644
index 00000000..c690a327
--- /dev/null
+++ b/src/gs-basic-auth-dialog.c
@@ -0,0 +1,130 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-basic-auth-dialog.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+struct _GsBasicAuthDialog
+{
+ GtkDialog parent_instance;
+
+ GsBasicAuthCallback callback;
+ gpointer callback_data;
+
+ /* template widgets */
+ GtkButton *login_button;
+ GtkLabel *description_label;
+ GtkEntry *user_entry;
+ GtkEntry *password_entry;
+};
+
+G_DEFINE_TYPE (GsBasicAuthDialog, gs_basic_auth_dialog, GTK_TYPE_DIALOG)
+
+static void
+cancel_button_clicked_cb (GsBasicAuthDialog *dialog)
+{
+ /* abort the basic auth request */
+ dialog->callback (NULL, NULL, dialog->callback_data);
+
+ gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL);
+}
+
+static void
+login_button_clicked_cb (GsBasicAuthDialog *dialog)
+{
+ const gchar *user;
+ const gchar *password;
+
+ user = gtk_entry_get_text (dialog->user_entry);
+ password = gtk_entry_get_text (dialog->password_entry);
+
+ /* submit the user/password to basic auth */
+ dialog->callback (user, password, dialog->callback_data);
+
+ gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+}
+
+static void
+dialog_validate (GsBasicAuthDialog *dialog)
+{
+ const gchar *user;
+ const gchar *password;
+ gboolean valid_user;
+ gboolean valid_password;
+
+ /* require user */
+ user = gtk_entry_get_text (dialog->user_entry);
+ valid_user = user != NULL && strlen (user) != 0;
+
+ /* require password */
+ password = gtk_entry_get_text (dialog->password_entry);
+ valid_password = password != NULL && strlen (password) != 0;
+
+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->login_button), valid_user && valid_password);
+}
+
+static void
+update_description (GsBasicAuthDialog *dialog, const gchar *remote, const gchar *realm)
+{
+ g_autofree gchar *description = NULL;
+
+ /* TRANSLATORS: This is a description for entering user/password */
+ description = g_strdup_printf (_("Login required remote %s (realm %s)"),
+ remote, realm);
+ gtk_label_set_text (dialog->description_label, description);
+}
+
+static void
+gs_basic_auth_dialog_init (GsBasicAuthDialog *dialog)
+{
+ gtk_widget_init_template (GTK_WIDGET (dialog));
+}
+
+static void
+gs_basic_auth_dialog_class_init (GsBasicAuthDialogClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-basic-auth-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, login_button);
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, description_label);
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, user_entry);
+ gtk_widget_class_bind_template_child (widget_class, GsBasicAuthDialog, password_entry);
+
+ gtk_widget_class_bind_template_callback (widget_class, dialog_validate);
+ gtk_widget_class_bind_template_callback (widget_class, cancel_button_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, login_button_clicked_cb);
+}
+
+GtkWidget *
+gs_basic_auth_dialog_new (GtkWindow *parent,
+ const gchar *remote,
+ const gchar *realm,
+ GsBasicAuthCallback callback,
+ gpointer callback_data)
+{
+ GsBasicAuthDialog *dialog;
+
+ dialog = g_object_new (GS_TYPE_BASIC_AUTH_DIALOG,
+ "use-header-bar", TRUE,
+ "transient-for", parent,
+ "modal", TRUE,
+ NULL);
+ dialog->callback = callback;
+ dialog->callback_data = callback_data;
+
+ update_description (dialog, remote, realm);
+ dialog_validate (dialog);
+
+ return GTK_WIDGET (dialog);
+}
diff --git a/src/gs-basic-auth-dialog.h b/src/gs-basic-auth-dialog.h
new file mode 100644
index 00000000..ec5f1d03
--- /dev/null
+++ b/src/gs-basic-auth-dialog.h
@@ -0,0 +1,28 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2020 Kalev Lember <klember@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include "gnome-software-private.h"
+
+G_BEGIN_DECLS
+
+typedef void (*GsBasicAuthCallback) (const gchar *user, const gchar *password, gpointer callback_data);
+
+#define GS_TYPE_BASIC_AUTH_DIALOG (gs_basic_auth_dialog_get_type ())
+
+G_DECLARE_FINAL_TYPE (GsBasicAuthDialog, gs_basic_auth_dialog, GS, BASIC_AUTH_DIALOG, GtkDialog)
+
+GtkWidget *gs_basic_auth_dialog_new (GtkWindow *parent,
+ const gchar *remote,
+ const gchar *realm,
+ GsBasicAuthCallback callback,
+ gpointer callback_data);
+
+G_END_DECLS
diff --git a/src/gs-basic-auth-dialog.ui b/src/gs-basic-auth-dialog.ui
new file mode 100644
index 00000000..339e831d
--- /dev/null
+++ b/src/gs-basic-auth-dialog.ui
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="GsBasicAuthDialog" parent="GtkDialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="title" translatable="yes">Login Required</property>
+ <property name="use_header_bar">1</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_close_button">False</property>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="visible">True</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="cancel_button_clicked_cb" object="GsBasicAuthDialog" swapped="yes"/>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="login_button">
+ <property name="label" translatable="yes">_Login</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="login_button_clicked_cb" object="GsBasicAuthDialog" swapped="yes"/>
+ <style>
+ <class name="text-button"/>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="row_spacing">8</property>
+ <property name="column_spacing">6</property>
+ <property name="border_width">20</property>
+ <property name="margin_end">20</property>
+ <child>
+ <object class="GtkLabel" id="description_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="margin_bottom">20</property>
+ <property name="max_width_chars">55</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="user_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_User</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">user_entry</property>
+ <property name="margin_start">20</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="password_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Password</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">password_entry</property>
+ <property name="margin_start">20</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="user_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ <property name="input_purpose">password</property>
+ <signal name="changed" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ <signal name="activate" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="password_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ <property name="input_purpose">password</property>
+ <signal name="changed" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ <signal name="activate" handler="dialog_validate" object="GsBasicAuthDialog" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+ <object class="GtkSizeGroup">
+ <widgets>
+ <widget name="user_label"/>
+ <widget name="password_label"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup">
+ <widgets>
+ <widget name="user_entry"/>
+ <widget name="password_entry"/>
+ </widgets>
+ </object>
+ <object class="GtkSizeGroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="login_button"/>
+ <widget name="cancel_button"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 009776ad..41503cf8 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -2,7 +2,7 @@
*
* Copyright (C) 2013-2017 Richard Hughes <richard@hughsie.com>
* Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
- * Copyright (C) 2014-2018 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2014-2020 Kalev Lember <klember@redhat.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -18,6 +18,7 @@
#include "gs-common.h"
#include "gs-shell.h"
+#include "gs-basic-auth-dialog.h"
#include "gs-details-page.h"
#include "gs-installed-page.h"
#include "gs-metered-data-dialog.h"
@@ -362,6 +363,25 @@ scheduler_ready_cb (GObject *source_object,
}
#endif /* HAVE_MOGWAI */
+static void
+gs_shell_basic_auth_start_cb (GsPluginLoader *plugin_loader,
+ const gchar *remote,
+ const gchar *realm,
+ GsBasicAuthCallback callback,
+ gpointer callback_data,
+ GsShell *shell)
+{
+ GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+ GtkWidget *dialog;
+
+ dialog = gs_basic_auth_dialog_new (priv->main_window, remote, realm, callback, callback_data);
+ gs_shell_modal_dialog_present (shell, GTK_DIALOG (dialog));
+
+ /* just destroy */
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+}
+
static void
free_back_entry (BackEntry *entry)
{
@@ -2126,6 +2146,9 @@ gs_shell_setup (GsShell *shell, GsPluginLoader *plugin_loader, GCancellable *can
g_signal_connect_object (priv->plugin_loader, "notify::network-metered",
G_CALLBACK (gs_shell_network_metered_notify_cb),
shell, 0);
+ g_signal_connect_object (priv->plugin_loader, "basic-auth-start",
+ G_CALLBACK (gs_shell_basic_auth_start_cb),
+ shell, 0);
priv->cancellable = g_object_ref (cancellable);
priv->settings = g_settings_new ("org.gnome.software");
diff --git a/src/meson.build b/src/meson.build
index cbd0a511..6581e77c 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -20,6 +20,7 @@ gnome_software_sources = [
'gs-application.c',
'gs-app-row.c',
'gs-app-tile.c',
+ 'gs-basic-auth-dialog.c',
'gs-category-page.c',
'gs-category-tile.c',
'gs-common.c',
--
2.26.2

View File

@ -1,61 +0,0 @@
From 9dce785c2a71e81c410c6e314dd4d4db6cc02808 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Wed, 3 Jun 2020 16:35:03 +0200
Subject: [PATCH] Fix hardcoded desktop and appdata names to match what's in
RHEL 8.3
---
data/assets/org.gnome.Software.Featured.xml | 2 +-
plugins/core/gs-plugin-hardcoded-popular.c | 2 +-
src/gs-folders.c | 6 +++---
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/data/assets/org.gnome.Software.Featured.xml b/data/assets/org.gnome.Software.Featured.xml
index d1d920be..822fc6a9 100644
--- a/data/assets/org.gnome.Software.Featured.xml
+++ b/data/assets/org.gnome.Software.Featured.xml
@@ -145,7 +145,7 @@ text-shadow: none;</value>
</custom>
</component>
<component merge="append">
- <id>org.gimp.GIMP</id>
+ <id>gimp.desktop</id>
<custom>
<value key="GnomeSoftware::FeatureTile-css">border-color: #4a8c30;
text-shadow: none;
diff --git a/plugins/core/gs-plugin-hardcoded-popular.c b/plugins/core/gs-plugin-hardcoded-popular.c
index 3998a813..03b44475 100644
--- a/plugins/core/gs-plugin-hardcoded-popular.c
+++ b/plugins/core/gs-plugin-hardcoded-popular.c
@@ -29,7 +29,7 @@ gs_plugin_add_popular (GsPlugin *plugin,
"org.gnome.clocks.desktop",
"org.gnome.Dictionary.desktop",
"org.gnome.Documents.desktop",
- "org.gnome.Evince",
+ "evince.desktop",
"org.gnome.gedit.desktop",
"org.gnome.Maps.desktop",
"org.gnome.Weather",
diff --git a/src/gs-folders.c b/src/gs-folders.c
index fa068f0e..589cc1e2 100644
--- a/src/gs-folders.c
+++ b/src/gs-folders.c
@@ -560,12 +560,12 @@ gs_folders_convert (void)
"org.gnome.DejaDup.desktop",
"org.gnome.Dictionary.desktop",
"org.gnome.DiskUtility.desktop",
- "org.gnome.eog.desktop",
- "org.gnome.Evince.desktop",
+ "eog.desktop",
+ "evince.desktop",
"org.gnome.FileRoller.desktop",
"org.gnome.fonts.desktop",
"org.gnome.Screenshot.desktop",
- "org.gnome.seahorse.Application.desktop",
+ "seahorse.desktop",
"org.gnome.Terminal.desktop",
"org.gnome.tweaks.desktop",
"org.gnome.Usage.desktop",
--
2.18.2

View File

@ -1,69 +0,0 @@
From bc31889bf90e14776e4404cd58e9b0244efc4f2e Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Tue, 9 Jun 2020 21:42:41 +0200
Subject: [PATCH] Improve the heuristic for detecting old-style AppStream
override files
The heuristic was trying to detect old-style AppStream override files
that have the following structure:
<component type=desktop>
<id>org.kde.amarok.desktop</id>
<categories>
<category>AudioVideo</category>
<category>Featured</category>
</categories>
</component>
When it found one, it gave it the wildcard quirk to avoid leaking the
result to the installed apps list.
This however incorrectly tripped on old appdata files that didn't
specify name and relied on filling the missing name/summary/icon from
the desktop file.
Fix this by tightening the heuristic and also look for
<metadata_license> that none of the override files should have.
This fixes RHEL firefox package to correctly show up when clicking on
'Show Details' in GNOME Shell.
---
plugins/core/gs-appstream.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/plugins/core/gs-appstream.c b/plugins/core/gs-appstream.c
index a387f2e0..da9ba970 100644
--- a/plugins/core/gs-appstream.c
+++ b/plugins/core/gs-appstream.c
@@ -746,6 +746,13 @@ gs_appstream_refine_app (GsPlugin *plugin,
gs_app_remove_quirk (app, GS_APP_QUIRK_HIDE_EVERYWHERE);
}
+ /* try to detect old-style AppStream 'override'
+ * files without the merge attribute */
+ if (xb_node_query_text (component, "name", NULL) == NULL &&
+ xb_node_query_text (component, "metadata_license", NULL) == NULL) {
+ gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
+ }
+
/* set id */
tmp = xb_node_query_text (component, "id", NULL);
if (tmp != NULL && gs_app_get_id (app) == NULL)
@@ -770,13 +777,8 @@ gs_appstream_refine_app (GsPlugin *plugin,
/* set name */
tmp = xb_node_query_text (component, "name", NULL);
- if (tmp != NULL) {
+ if (tmp != NULL)
gs_app_set_name (app, GS_APP_QUALITY_HIGHEST, tmp);
- } else {
- /* this is a heuristic, but works even with old-style AppStream
- * files without the merge attribute */
- gs_app_add_quirk (app, GS_APP_QUIRK_IS_WILDCARD);
- }
/* set summary */
tmp = xb_node_query_text (component, "summary", NULL);
--
2.26.2

View File

@ -0,0 +1,198 @@
diff --git a/lib/gs-fedora-third-party.c b/lib/gs-fedora-third-party.c
index e79bba8..9e7115a 100644
--- a/lib/gs-fedora-third-party.c
+++ b/lib/gs-fedora-third-party.c
@@ -11,6 +11,10 @@
#include "gs-fedora-third-party.h"
+#if !GLIB_CHECK_VERSION(2, 70, 0)
+#define g_spawn_check_wait_status g_spawn_check_exit_status
+#endif
+
struct _GsFedoraThirdParty
{
GObject parent_instance;
diff --git a/lib/gs-icon-downloader.c b/lib/gs-icon-downloader.c
index a1a669c..577fda2 100644
--- a/lib/gs-icon-downloader.c
+++ b/lib/gs-icon-downloader.c
@@ -41,7 +41,7 @@ struct _GsIconDownloader
GCancellable *cancellable; /* (owned) */
};
-G_DEFINE_FINAL_TYPE (GsIconDownloader, gs_icon_downloader, G_TYPE_OBJECT)
+G_DEFINE_TYPE (GsIconDownloader, gs_icon_downloader, G_TYPE_OBJECT)
typedef enum {
PROP_MAXIMUM_SIZE = 1,
diff --git a/lib/gs-job-manager.c b/lib/gs-job-manager.c
index 98d79a7..694a157 100644
--- a/lib/gs-job-manager.c
+++ b/lib/gs-job-manager.c
@@ -100,7 +100,9 @@ watch_data_unref (WatchData *data)
watch_free_data_cb,
g_steal_pointer (&data),
(GDestroyNotify) watch_data_unref);
+ #if GLIB_CHECK_VERSION(2, 70, 0)
g_source_set_static_name (idle_source, G_STRFUNC);
+ #endif
g_source_attach (idle_source, callback_context);
/* Freeing will eventually happen in watch_free_data_cb(). */
@@ -359,7 +361,9 @@ gs_job_manager_add_job (GsJobManager *self,
watch_call_handler_cb,
g_steal_pointer (&idle_data),
(GDestroyNotify) watch_call_handler_data_free);
+ #if GLIB_CHECK_VERSION(2, 70, 0)
g_source_set_static_name (idle_source, G_STRFUNC);
+ #endif
g_source_attach (idle_source, data->callback_context);
}
}
@@ -420,7 +424,9 @@ gs_job_manager_remove_job (GsJobManager *self,
watch_call_handler_cb,
g_steal_pointer (&idle_data),
(GDestroyNotify) watch_call_handler_data_free);
+ #if GLIB_CHECK_VERSION(2, 70, 0)
g_source_set_static_name (idle_source, G_STRFUNC);
+ #endif
g_source_attach (idle_source, data->callback_context);
}
}
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
index 93b33f3..204d55f 100644
--- a/lib/gs-plugin-loader.c
+++ b/lib/gs-plugin-loader.c
@@ -1965,7 +1965,7 @@ get_session_bus_cb (GObject *object,
plugin_loader->session_bus_connection = g_bus_get_finish (result, &local_error);
if (plugin_loader->session_bus_connection == NULL) {
notify_setup_complete (plugin_loader);
- g_prefix_error_literal (&local_error, "Error getting session bus: ");
+ g_prefix_error (&local_error, "%s", "Error getting session bus: ");
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
@@ -1987,7 +1987,7 @@ get_system_bus_cb (GObject *object,
plugin_loader->system_bus_connection = g_bus_get_finish (result, &local_error);
if (plugin_loader->system_bus_connection == NULL) {
notify_setup_complete (plugin_loader);
- g_prefix_error_literal (&local_error, "Error getting system bus: ");
+ g_prefix_error (&local_error, "%s", "Error getting system bus: ");
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
@@ -2753,12 +2753,21 @@ gs_plugin_loader_init (GsPluginLoader *plugin_loader)
/* Set up a thread pool for running old-style jobs
* FIXME: This will eventually disappear when all jobs are ported to
* be subclasses of #GsPluginJob. */
+ #if GLIB_CHECK_VERSION(2, 70, 0)
plugin_loader->old_api_thread_pool = g_thread_pool_new_full (gs_plugin_loader_process_old_api_job_cb,
plugin_loader,
(GDestroyNotify) g_object_unref,
20,
FALSE,
NULL);
+ #else
+ /* pre-glib 2.70.0 - The items will leak when the thread pool is freed before all jobs are finished */
+ plugin_loader->old_api_thread_pool = g_thread_pool_new (gs_plugin_loader_process_old_api_job_cb,
+ plugin_loader,
+ 20,
+ FALSE,
+ NULL);
+ #endif
/* get the job manager */
plugin_loader->job_manager = gs_job_manager_new ();
diff --git a/meson.build b/meson.build
index da9e7ac..4c847c9 100644
--- a/meson.build
+++ b/meson.build
@@ -156,7 +156,7 @@ gtk = dependency('gtk4',
'demos=false',
]
)
-glib = dependency('glib-2.0', version : '>= 2.70.0')
+glib = dependency('glib-2.0', version : '>= 2.68.0')
json_glib = dependency('json-glib-1.0', version : '>= 1.6.0')
libm = cc.find_library('m', required: false)
if get_option('soup2')
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
index c84db84..009a425 100644
--- a/plugins/flatpak/gs-flatpak.c
+++ b/plugins/flatpak/gs-flatpak.c
@@ -4738,7 +4738,7 @@ gs_flatpak_purge_sync (GsFlatpak *self,
g_autoptr(FlatpakTransaction) transaction = NULL;
transaction = gs_flatpak_transaction_new (installation, GS_FLATPAK_ERROR_MODE_STOP_ON_FIRST_ERROR, cancellable, error);
if (transaction == NULL) {
- g_prefix_error_literal (error, "failed to build transaction: ");
+ g_prefix_error (error, "%s", "failed to build transaction: ");
return FALSE;
}
flatpak_transaction_set_no_interaction (transaction, TRUE);
diff --git a/plugins/fwupd/gs-plugin-fwupd.c b/plugins/fwupd/gs-plugin-fwupd.c
index e931b2b..43c4e9f 100644
--- a/plugins/fwupd/gs-plugin-fwupd.c
+++ b/plugins/fwupd/gs-plugin-fwupd.c
@@ -1653,7 +1653,7 @@ finish_update_apps_op (GTask *task,
g_autoptr(GsPluginEvent) event = NULL;
event_error = g_error_copy (error_owned);
- g_prefix_error_literal (&event_error, _("Firmware update could not be applied: "));
+ g_prefix_error (&event_error, "%s", _("Firmware update could not be applied: "));
gs_plugin_fwupd_error_convert (&event_error);
event = gs_plugin_event_new ("app", self->app_current,
diff --git a/plugins/packagekit/gs-plugin-packagekit.c b/plugins/packagekit/gs-plugin-packagekit.c
index 3c5f926..409e831 100644
--- a/plugins/packagekit/gs-plugin-packagekit.c
+++ b/plugins/packagekit/gs-plugin-packagekit.c
@@ -2040,7 +2040,7 @@ search_files_cb (GObject *source_object,
results = pk_client_generic_finish (client, result, &local_error);
if (!gs_plugin_packagekit_results_valid (results, g_task_get_cancellable (refine_task), &local_error)) {
- g_prefix_error_literal (&local_error, "failed to search files: ");
+ g_prefix_error (&local_error, "%s", "failed to search files: ");
refine_task_complete_operation_with_error (refine_task, g_steal_pointer (&local_error));
return;
}
@@ -3071,7 +3071,7 @@ gs_plugin_packagekit_convert_error (GError **error,
break;
}
if (prefix != NULL)
- g_prefix_error_literal (error, prefix);
+ g_prefix_error (error, "%s", prefix);
return FALSE;
}
diff --git a/src/gs-common.c b/src/gs-common.c
index 997025a..d665c98 100644
--- a/src/gs-common.c
+++ b/src/gs-common.c
@@ -1027,7 +1027,7 @@ gs_utils_invoke_reboot_ready2_got_session_bus_cb (GObject *source_object,
bus = g_bus_get_finish (result, &local_error);
if (bus == NULL) {
g_dbus_error_strip_remote_error (local_error);
- g_prefix_error_literal (&local_error, "Failed to get D-Bus session bus: ");
+ g_prefix_error (&local_error, "%s", "Failed to get D-Bus session bus: ");
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
@@ -1098,7 +1098,7 @@ gs_utils_invoke_reboot_ready1_got_system_bus_cb (GObject *source_object,
bus = g_bus_get_finish (result, &local_error);
if (bus == NULL) {
g_dbus_error_strip_remote_error (local_error);
- g_prefix_error_literal (&local_error, "Failed to get D-Bus system bus: ");
+ g_prefix_error (&local_error, "%s", "Failed to get D-Bus system bus: ");
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
@@ -1171,7 +1171,7 @@ gs_utils_invoke_reboot_got_session_bus_cb (GObject *source_object,
bus = g_bus_get_finish (result, &local_error);
if (bus == NULL) {
g_dbus_error_strip_remote_error (local_error);
- g_prefix_error_literal (&local_error, "Failed to get D-Bus session bus: ");
+ g_prefix_error (&local_error, "%s", "Failed to get D-Bus session bus: ");
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}

View File

@ -1,104 +0,0 @@
From de3afc6463aeb0e2d637a0360d1b96acffdf4e6d Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Tue, 19 May 2020 14:28:10 +0200
Subject: [PATCH 2/2] Add webflow auth support to flatpak plugin
This is just the minimal support, launching the auth page in the default
web browser when libflatpak signals that we need to do the webflow auth.
Possible improvements could include doing either a webkitgtk dialog, or
maybe asking for confirmation before launching the web browser.
---
plugins/flatpak/gs-plugin-flatpak.c | 69 +++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/plugins/flatpak/gs-plugin-flatpak.c b/plugins/flatpak/gs-plugin-flatpak.c
index 2518025d..a453cec8 100644
--- a/plugins/flatpak/gs-plugin-flatpak.c
+++ b/plugins/flatpak/gs-plugin-flatpak.c
@@ -503,6 +503,71 @@ _basic_auth_start (FlatpakTransaction *transaction,
gs_plugin_basic_auth_start (plugin, remote, realm, G_CALLBACK (_basic_auth_cb), data);
return TRUE;
}
+
+static gboolean
+_webflow_start (FlatpakTransaction *transaction,
+ const char *remote,
+ const char *url,
+ GVariant *options,
+ guint id,
+ GsPlugin *plugin)
+{
+ const char *browser;
+ g_autoptr(GError) error_local = NULL;
+
+ if (!gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE))
+ return FALSE;
+
+ g_debug ("Authentication required for remote '%s'", remote);
+
+ /* Allow hard overrides with $BROWSER */
+ browser = g_getenv ("BROWSER");
+ if (browser != NULL) {
+ const char *args[3] = { NULL, url, NULL };
+ args[0] = browser;
+ if (!g_spawn_async (NULL, (char **)args, NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, &error_local)) {
+ g_autoptr(GsPluginEvent) event = NULL;
+
+ g_warning ("Failed to start browser %s: %s", browser, error_local->message);
+
+ event = gs_plugin_event_new ();
+ gs_flatpak_error_convert (&error_local);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (plugin, event);
+
+ return FALSE;
+ }
+ } else {
+ if (!g_app_info_launch_default_for_uri (url, NULL, &error_local)) {
+ g_autoptr(GsPluginEvent) event = NULL;
+
+ g_warning ("Failed to show url: %s", error_local->message);
+
+ event = gs_plugin_event_new ();
+ gs_flatpak_error_convert (&error_local);
+ gs_plugin_event_set_error (event, error_local);
+ gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
+ gs_plugin_report_event (plugin, event);
+
+ return FALSE;
+ }
+ }
+
+ g_debug ("Waiting for browser...");
+
+ return TRUE;
+}
+
+static void
+_webflow_done (FlatpakTransaction *transaction,
+ GVariant *options,
+ guint id,
+ GsPlugin *plugin)
+{
+ g_debug ("Browser done");
+}
#endif
static FlatpakTransaction *
@@ -543,6 +608,10 @@ _build_transaction (GsPlugin *plugin, GsFlatpak *flatpak,
#if FLATPAK_CHECK_VERSION(1,6,0)
g_signal_connect (transaction, "basic-auth-start",
G_CALLBACK (_basic_auth_start), plugin);
+ g_signal_connect (transaction, "webflow-start",
+ G_CALLBACK (_webflow_start), plugin);
+ g_signal_connect (transaction, "webflow-done",
+ G_CALLBACK (_webflow_done), plugin);
#endif
/* use system installations as dependency sources for user installations */
--
2.26.2

View File

@ -0,0 +1,42 @@
diff -up gnome-software-45.2/src/gs-origin-popover-row.ui.2 gnome-software-45.2/src/gs-origin-popover-row.ui
--- gnome-software-45.2/src/gs-origin-popover-row.ui.2 2023-12-08 10:14:07.848934874 +0100
+++ gnome-software-45.2/src/gs-origin-popover-row.ui 2023-12-08 10:14:10.045961688 +0100
@@ -79,7 +79,7 @@
<property name="margin-end">2</property>
<attributes>
<attribute name="weight" value="bold"/>
- <attribute name="variant" value="all-small-caps"/>
+ <!--<attribute name="variant" value="all-small-caps"/>-->
</attributes>
</object>
</child>
@@ -110,7 +110,7 @@
<property name="margin-end">2</property>
<attributes>
<attribute name="weight" value="bold"/>
- <attribute name="variant" value="all-small-caps"/>
+ <!--<attribute name="variant" value="all-small-caps"/>-->
</attributes>
</object>
</child>
@@ -140,7 +140,7 @@
<property name="margin-end">2</property>
<attributes>
<attribute name="weight" value="bold"/>
- <attribute name="variant" value="all-small-caps"/>
+ <!--<attribute name="variant" value="all-small-caps"/>-->
</attributes>
</object>
</child>
diff -up gnome-software-45.2/src/gs-review-histogram.ui.2 gnome-software-45.2/src/gs-review-histogram.ui
--- gnome-software-45.2/src/gs-review-histogram.ui.2 2023-12-08 10:15:28.246916110 +0100
+++ gnome-software-45.2/src/gs-review-histogram.ui 2023-12-01 09:58:33.000000000 +0100
@@ -18,7 +18,7 @@
<attributes>
<attribute name="scale" value="5.0"/>
<attribute name="weight" value="light"/>
- <attribute name="line-height" value="0.75"/>
+ <!--<attribute name="line-height" value="0.75"/>-->
</attributes>
<layout>
<property name="column">0</property>

View File

@ -0,0 +1,335 @@
From f7e394840ff84ae8b55f13ff9692d6b02e8e6ea5 Mon Sep 17 00:00:00 2001
Date: Wed, 20 Dec 2023 12:21:24 +0100
Subject: [PATCH 1/3] gs-appstream: Increase limit to category apps lookup
The Overview page currently checks for 100 apps in all categories.
Lookup for the same count per category.
Note: The counts are not accurate, same apps can be in multiple
sub-categories, thus the parent category count suffers of duplicity,
which the following commit will correct in a different way than
checking for id duplicity.
---
lib/gs-appstream.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/gs-appstream.c b/lib/gs-appstream.c
index f110e3c47..d600cac53 100644
--- a/lib/gs-appstream.c
+++ b/lib/gs-appstream.c
@@ -1836,7 +1836,8 @@ static guint
gs_appstream_count_component_for_groups (XbSilo *silo,
const gchar *desktop_group)
{
- guint limit = 10;
+ /* the overview page checks for 100 apps, then try to get them */
+ const guint limit = 100;
g_autofree gchar *xpath = NULL;
g_auto(GStrv) split = g_strsplit (desktop_group, "::", -1);
g_autoptr(GPtrArray) array = NULL;
@@ -1896,7 +1897,6 @@ gs_appstream_refine_category_sizes (XbSilo *silo,
}
}
}
- continue;
}
return TRUE;
}
--
GitLab
From 617af44a56f6f62e07fd3fc13ae43d688aa3b85f Mon Sep 17 00:00:00 2001
Date: Wed, 20 Dec 2023 12:24:25 +0100
Subject: [PATCH 2/3] gs-overview-page: Add debug prints about discovered
categories
For easier debugging, to see what the plugins returned.
---
src/gs-overview-page.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/gs-overview-page.c b/src/gs-overview-page.c
index 6ef5079e9..72000e257 100644
--- a/src/gs-overview-page.c
+++ b/src/gs-overview-page.c
@@ -496,6 +496,7 @@ gs_overview_page_get_categories_cb (GObject *source_object,
if (gs_category_get_icon_name (cat) != NULL) {
found_apps_cnt += gs_category_get_size (cat);
+ g_debug ("overview page found category '%s' which claims %u apps", gs_category_get_name (cat), gs_category_get_size (cat));
flowbox = GTK_FLOW_BOX (self->flowbox_categories);
} else
flowbox = GTK_FLOW_BOX (self->flowbox_iconless_categories);
@@ -524,6 +525,7 @@ out:
* See https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2053 */
gtk_widget_set_visible (self->flowbox_categories, found_apps_cnt >= MIN_CATEGORIES_APPS);
+ g_debug ("overview page found %u category apps", found_apps_cnt);
if (found_apps_cnt < MIN_CATEGORIES_APPS && found_apps_cnt > 0) {
GsPluginListAppsFlags flags = GS_PLUGIN_LIST_APPS_FLAGS_INTERACTIVE;
GatherAppsData *gather_apps_data = g_new0 (GatherAppsData, 1);
--
GitLab
From 98086eca23dbd46284039722887852e8c760a0fe Mon Sep 17 00:00:00 2001
Date: Wed, 20 Dec 2023 12:32:21 +0100
Subject: [PATCH 3/3] gs-overview-page: Verify category sizes
The "list-categories" job can set inaccurate sizes for the categories,
thus check the actual category content to operate with proper numbers.
For example the appstream data can have information about apps, which
no plugin can provide due to disabled repository.
---
src/gs-overview-page.c | 176 +++++++++++++++++++++++++++++++++++------
1 file changed, 153 insertions(+), 23 deletions(-)
diff --git a/src/gs-overview-page.c b/src/gs-overview-page.c
index 72000e257..3ec689ac1 100644
--- a/src/gs-overview-page.c
+++ b/src/gs-overview-page.c
@@ -440,6 +440,7 @@ category_activated_cb (GsOverviewPage *self, GsCategoryTile *tile)
typedef struct {
GsOverviewPage *page; /* (unowned) */
GsPluginJobListCategories *job; /* (owned) */
+ guint n_pending_ops;
} GetCategoriesData;
static void
@@ -451,31 +452,18 @@ get_categories_data_free (GetCategoriesData *data)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GetCategoriesData, get_categories_data_free)
-static void
-gs_overview_page_get_categories_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
+static guint
+update_categories_sections (GsOverviewPage *self,
+ GPtrArray *list) /* (element-type GsCategory) */
{
- g_autoptr(GetCategoriesData) data = g_steal_pointer (&user_data);
- GsOverviewPage *self = GS_OVERVIEW_PAGE (data->page);
- GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
- guint i;
GsCategory *cat;
GtkFlowBox *flowbox;
GtkWidget *tile;
guint added_cnt = 0;
guint found_apps_cnt = 0;
- g_autoptr(GError) error = NULL;
- GPtrArray *list = NULL; /* (element-type GsCategory) */
- if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
- if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) &&
- !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_warning ("failed to get categories: %s", error->message);
- goto out;
- }
-
- list = gs_plugin_job_list_categories_get_result_list (data->job);
+ if (g_cancellable_is_cancelled (self->cancellable))
+ return found_apps_cnt;
gs_widget_remove_all (self->flowbox_categories, (GsRemoveFunc) gtk_flow_box_remove);
gs_widget_remove_all (self->flowbox_iconless_categories, (GsRemoveFunc) gtk_flow_box_remove);
@@ -488,7 +476,7 @@ gs_overview_page_get_categories_cb (GObject *source_object,
* be visually important, and are listed near the top of the page.
* Categories without icons are listed in a separate flowbox at the
* bottom of the page. Typically they are addons. */
- for (i = 0; i < list->len; i++) {
+ for (guint i = 0; list != NULL && i < list->len; i++) {
cat = GS_CATEGORY (g_ptr_array_index (list, i));
if (gs_category_get_size (cat) == 0)
continue;
@@ -510,7 +498,6 @@ gs_overview_page_get_categories_cb (GObject *source_object,
g_object_ref (cat));
}
-out:
/* Show the heading for the iconless categories iff there are any. */
gtk_widget_set_visible (self->iconless_categories_heading,
gtk_flow_box_get_child_at_index (GTK_FLOW_BOX (self->flowbox_iconless_categories), 0) != NULL);
@@ -525,6 +512,27 @@ out:
* See https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2053 */
gtk_widget_set_visible (self->flowbox_categories, found_apps_cnt >= MIN_CATEGORIES_APPS);
+ return found_apps_cnt;
+}
+
+static void
+finish_verify_category_op (GetCategoriesData *op_data)
+{
+ g_autoptr(GetCategoriesData) data = g_steal_pointer (&op_data);
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (data->page);
+ guint i, found_apps_cnt;
+ GPtrArray *list; /* (element-type GsCategory) */
+
+ data->n_pending_ops--;
+ if (data->n_pending_ops > 0) {
+ /* to not be freed */
+ g_steal_pointer (&data);
+ return;
+ }
+
+ list = gs_plugin_job_list_categories_get_result_list (data->job);
+ found_apps_cnt = update_categories_sections (self, list);
+
g_debug ("overview page found %u category apps", found_apps_cnt);
if (found_apps_cnt < MIN_CATEGORIES_APPS && found_apps_cnt > 0) {
GsPluginListAppsFlags flags = GS_PLUGIN_LIST_APPS_FLAGS_INTERACTIVE;
@@ -534,10 +542,10 @@ out:
gather_apps_data->self = g_object_ref (self);
gather_apps_data->list = gs_app_list_new ();
- for (i = 0; i < list->len; i++) {
+ for (i = 0; list != NULL && i < list->len; i++) {
g_autoptr(GsPluginJob) plugin_job = NULL;
g_autoptr(GsAppQuery) query = NULL;
- GsCategory *subcat;
+ GsCategory *cat, *subcat;
cat = GS_CATEGORY (g_ptr_array_index (list, i));
if (gs_category_get_size (cat) == 0 ||
@@ -578,6 +586,128 @@ out:
gs_overview_page_decrement_action_cnt (self);
}
+typedef struct {
+ GsOverviewPage *page; /* (unowned) */
+ GetCategoriesData *op_data; /* (unowned) */
+ GsCategory *category; /* (owned) */
+} VerifyCategoryData;
+
+static void
+verify_category_data_free (VerifyCategoryData *data)
+{
+ g_clear_object (&data->category);
+ g_free (data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (VerifyCategoryData, verify_category_data_free)
+
+static void
+gs_overview_page_verify_category_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ g_autoptr(VerifyCategoryData) data = user_data;
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) local_error = NULL;
+ g_autoptr(GsAppList) list = NULL;
+
+ list = gs_plugin_loader_job_process_finish (plugin_loader, res, &local_error);
+ if (list == NULL) {
+ if (!g_error_matches (local_error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) &&
+ !g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("failed to get apps for category: %s", local_error->message);
+ g_debug ("Failed to get category content '%s' for overview page: %s", gs_category_get_id (data->category), local_error->message);
+ } else {
+ GsCategory *all_subcat = gs_category_find_child (data->category, "all");
+ guint size = gs_app_list_length (list);
+ g_debug ("overview page verify category '%s' size:%u~>%u subcat:'%s' size:%u~>%u",
+ gs_category_get_id (data->category), gs_category_get_size (data->category), size,
+ gs_category_get_id (all_subcat), gs_category_get_size (all_subcat), size);
+ gs_category_set_size (data->category, size);
+ gs_category_set_size (all_subcat, size);
+ }
+
+ finish_verify_category_op (data->op_data);
+}
+
+static void
+gs_overview_page_get_categories_list_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ g_autoptr(GetCategoriesData) data = g_steal_pointer (&user_data);
+ GsOverviewPage *self = GS_OVERVIEW_PAGE (data->page);
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source_object);
+ g_autoptr(GError) error = NULL;
+
+ g_assert (data->n_pending_ops == 0);
+
+ data->n_pending_ops++;
+
+ /* The apps can be mentioned in the appstream data, but no plugin may provide actual app,
+ thus try to get the content as the Categories page and fine tune the numbers appropriately. */
+ if (!gs_plugin_loader_job_action_finish (plugin_loader, res, &error)) {
+ if (!g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED) &&
+ !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("failed to get categories: %s", error->message);
+ } else {
+ g_autoptr(GPtrArray) verify_categories = NULL; /* (element-type GsCategory) */
+ GPtrArray *list = NULL; /* (element-type GsCategory) */
+ guint found_apps_cnt;
+
+ list = gs_plugin_job_list_categories_get_result_list (data->job);
+ found_apps_cnt = update_categories_sections (self, list);
+
+ if (found_apps_cnt >= MIN_CATEGORIES_APPS) {
+ verify_categories = g_ptr_array_new_full (list != NULL ? list->len : 0, g_object_unref);
+ for (guint i = 0; list != NULL && i < list->len; i++) {
+ GsCategory *category = g_ptr_array_index (list, i);
+ if (gs_category_get_size (category) > 0 &&
+ gs_category_find_child (category, "all") != NULL) {
+ g_ptr_array_add (verify_categories, g_object_ref (category));
+ }
+ }
+ }
+
+ if (verify_categories != NULL && verify_categories->len > 0 && !g_cancellable_is_cancelled (self->cancellable)) {
+ for (guint i = 0; i < verify_categories->len; i++) {
+ GsCategory *category = g_ptr_array_index (verify_categories, i);
+ GsCategory *all_subcat = gs_category_find_child (category, "all");
+ g_autoptr(GsAppQuery) query = NULL;
+ g_autoptr(GsPluginJob) plugin_job = NULL;
+ VerifyCategoryData *ver_data;
+
+ g_assert (all_subcat != NULL);
+
+ data->n_pending_ops++;
+
+ ver_data = g_new0 (VerifyCategoryData, 1);
+ ver_data->page = self;
+ ver_data->op_data = data;
+ ver_data->category = g_object_ref (category);
+
+ query = gs_app_query_new ("category", all_subcat,
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID,
+ "dedupe-flags", GS_APP_LIST_FILTER_FLAG_KEY_ID_PROVIDES,
+ "license-type", gs_page_get_query_license_type (GS_PAGE (self)),
+ /*"developer-verified-type", gs_page_get_query_developer_verified_type (GS_PAGE (self)),*/
+ NULL);
+ plugin_job = gs_plugin_job_list_apps_new (query, GS_PLUGIN_LIST_APPS_FLAGS_NONE);
+ gs_plugin_loader_job_process_async (plugin_loader,
+ plugin_job,
+ self->cancellable,
+ gs_overview_page_verify_category_cb,
+ ver_data);
+ }
+
+ finish_verify_category_op (g_steal_pointer (&data));
+ return;
+ }
+ }
+
+ finish_verify_category_op (g_steal_pointer (&data));
+}
+
static void
third_party_destroy_cb (GtkWindow *window,
GsOverviewPage *self)
@@ -967,7 +1097,7 @@ gs_overview_page_load (GsOverviewPage *self)
data->job = g_object_ref (GS_PLUGIN_JOB_LIST_CATEGORIES (plugin_job));
gs_plugin_loader_job_process_async (self->plugin_loader, plugin_job,
- self->cancellable, gs_overview_page_get_categories_cb,
+ self->cancellable, gs_overview_page_get_categories_list_cb,
g_steal_pointer (&data));
self->action_cnt++;
}
--
GitLab

View File

@ -1,61 +0,0 @@
diff -up gnome-software-3.36.1/lib/gs-plugin-loader.c.12 gnome-software-3.36.1/lib/gs-plugin-loader.c
--- gnome-software-3.36.1/lib/gs-plugin-loader.c.12 2022-09-22 12:17:59.367881179 +0200
+++ gnome-software-3.36.1/lib/gs-plugin-loader.c 2022-09-22 12:17:59.392881205 +0200
@@ -333,10 +333,17 @@ gs_plugin_job_to_failed_event (GsPluginJ
/* invalid */
if (error->domain != GS_PLUGIN_ERROR) {
- g_warning ("not GsPlugin error %s:%i: %s",
- g_quark_to_string (error->domain),
- error->code,
- error->message);
+ if (g_strcmp0 (BUILD_TYPE, "debug") == 0) {
+ g_warning ("not GsPlugin error %s:%i: %s",
+ g_quark_to_string (error->domain),
+ error->code,
+ error->message);
+ } else {
+ g_debug ("not GsPlugin error %s:%i: %s",
+ g_quark_to_string (error->domain),
+ error->code,
+ error->message);
+ }
g_set_error_literal (&error_copy,
GS_PLUGIN_ERROR,
GS_PLUGIN_ERROR_FAILED,
diff -up gnome-software-3.36.1/meson.build.12 gnome-software-3.36.1/meson.build
--- gnome-software-3.36.1/meson.build.12 2022-09-22 12:18:09.900892043 +0200
+++ gnome-software-3.36.1/meson.build 2022-09-22 12:18:19.311901744 +0200
@@ -9,6 +9,7 @@ conf = configuration_data()
conf.set_quoted('VERSION', meson.project_version())
conf.set_quoted('PACKAGE_NAME', meson.project_name())
conf.set_quoted('PACKAGE_VERSION', meson.project_version())
+conf.set_quoted('BUILD_TYPE', get_option('buildtype'))
# this refers to the gnome-software plugin API version
# this is not in any way related to a package or soname version
diff -up gnome-software-3.36.1/src/gs-shell.c.12 gnome-software-3.36.1/src/gs-shell.c
--- gnome-software-3.36.1/src/gs-shell.c.12 2022-09-22 12:17:59.301881111 +0200
+++ gnome-software-3.36.1/src/gs-shell.c 2022-09-22 12:17:59.392881205 +0200
@@ -2044,10 +2044,17 @@ gs_shell_rescan_events (GsShell *shell)
!g_error_matches (error,
G_IO_ERROR,
G_IO_ERROR_CANCELLED)) {
- g_warning ("not handling error %s for action %s: %s",
- gs_plugin_error_to_string (error->code),
- gs_plugin_action_to_string (action),
- error->message);
+ if (g_strcmp0 (BUILD_TYPE, "debug") == 0) {
+ g_warning ("not handling error %s for action %s: %s",
+ gs_plugin_error_to_string (error->code),
+ gs_plugin_action_to_string (action),
+ error->message);
+ } else {
+ g_debug ("not handling error %s for action %s: %s",
+ gs_plugin_error_to_string (error->code),
+ gs_plugin_action_to_string (action),
+ error->message);
+ }
}
gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_INVALID);
return;

View File

@ -0,0 +1,151 @@
diff --git a/lib/gs-app.c b/lib/gs-app.c
index fa266cdc1..66a5acad7 100644
--- a/lib/gs-app.c
+++ b/lib/gs-app.c
@@ -6319,8 +6319,11 @@ gs_app_dup_origin_ui (GsApp *app,
if (gs_app_has_quirk (app, GS_APP_QUIRK_PROVENANCE) &&
gs_app_get_kind (app) != AS_COMPONENT_KIND_REPOSITORY) {
os_release = gs_os_release_new (NULL);
- if (os_release != NULL)
- origin_str = gs_os_release_get_name (os_release);
+ if (os_release != NULL) {
+ origin_str = gs_os_release_get_vendor_name (os_release);
+ if (origin_str == NULL)
+ origin_str = gs_os_release_get_name (os_release);
+ }
}
priv = gs_app_get_instance_private (app);
diff --git a/lib/gs-os-release.c b/lib/gs-os-release.c
index 85ea24e2e..380c9c84e 100644
--- a/lib/gs-os-release.c
+++ b/lib/gs-os-release.c
@@ -37,6 +37,7 @@ struct _GsOsRelease
gchar *distro_codename;
gchar *home_url;
gchar *logo;
+ gchar *vendor_name;
};
static void gs_os_release_initable_iface_init (GInitableIface *iface);
@@ -44,6 +45,18 @@ static void gs_os_release_initable_iface_init (GInitableIface *iface);
G_DEFINE_TYPE_WITH_CODE (GsOsRelease, gs_os_release, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE(G_TYPE_INITABLE, gs_os_release_initable_iface_init))
+static void
+gs_os_release_set_string_nonempty (gchar **inout_string,
+ const gchar *value)
+{
+ if (*inout_string == value)
+ return;
+
+ g_clear_pointer (inout_string, g_free);
+ if (value != NULL && *value != '\0')
+ *inout_string = g_strdup (value);
+}
+
static gboolean
gs_os_release_initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -89,43 +102,49 @@ gs_os_release_initable_init (GInitable *initable,
/* match fields we're interested in */
if (g_strcmp0 (lines[i], "NAME") == 0) {
- os_release->name = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->name, tmp);
continue;
}
if (g_strcmp0 (lines[i], "VERSION") == 0) {
- os_release->version = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->version, tmp);
continue;
}
if (g_strcmp0 (lines[i], "ID") == 0) {
- os_release->id = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->id, tmp);
continue;
}
if (g_strcmp0 (lines[i], "ID_LIKE") == 0) {
+ if (os_release->id_like != NULL)
+ g_strfreev (os_release->id_like);
os_release->id_like = g_strsplit (tmp, " ", 0);
continue;
}
if (g_strcmp0 (lines[i], "VERSION_ID") == 0) {
- os_release->version_id = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->version_id, tmp);
continue;
}
if (g_strcmp0 (lines[i], "PRETTY_NAME") == 0) {
- os_release->pretty_name = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->pretty_name, tmp);
continue;
}
if (g_strcmp0 (lines[i], "CPE_NAME") == 0) {
- os_release->cpe_name = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->cpe_name, tmp);
continue;
}
if (g_strcmp0 (lines[i], "UBUNTU_CODENAME") == 0) {
- os_release->distro_codename = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->distro_codename, tmp);
continue;
}
if (g_strcmp0 (lines[i], "HOME_URL") == 0) {
- os_release->home_url = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->home_url, tmp);
continue;
}
if (g_strcmp0 (lines[i], "LOGO") == 0) {
- os_release->logo = g_strdup (tmp);
+ gs_os_release_set_string_nonempty (&os_release->logo, tmp);
+ continue;
+ }
+ if (g_strcmp0 (lines[i], "VENDOR_NAME") == 0) {
+ gs_os_release_set_string_nonempty (&os_release->vendor_name, tmp);
continue;
}
}
@@ -304,6 +323,23 @@ gs_os_release_get_logo (GsOsRelease *os_release)
return os_release->logo;
}
+/**
+ * gs_os_release_get_vendor_name:
+ * @os_release: A #GsOsRelease
+ *
+ * Gets the vendor name from the os-release parser.
+ *
+ * Returns: (nullable): a string, or %NULL
+ *
+ * Since: 46.3
+ **/
+const gchar *
+gs_os_release_get_vendor_name (GsOsRelease *os_release)
+{
+ g_return_val_if_fail (GS_IS_OS_RELEASE (os_release), NULL);
+ return os_release->vendor_name;
+}
+
static void
gs_os_release_finalize (GObject *object)
{
@@ -318,6 +354,7 @@ gs_os_release_finalize (GObject *object)
g_free (os_release->distro_codename);
g_free (os_release->home_url);
g_free (os_release->logo);
+ g_free (os_release->vendor_name);
G_OBJECT_CLASS (gs_os_release_parent_class)->finalize (object);
}
diff --git a/lib/gs-os-release.h b/lib/gs-os-release.h
index e219e5c96..6d52ecdd2 100644
--- a/lib/gs-os-release.h
+++ b/lib/gs-os-release.h
@@ -30,5 +30,6 @@ const gchar *gs_os_release_get_cpe_name (GsOsRelease *os_release);
const gchar *gs_os_release_get_distro_codename (GsOsRelease *os_release);
const gchar *gs_os_release_get_home_url (GsOsRelease *os_release);
const gchar *gs_os_release_get_logo (GsOsRelease *os_release);
+const gchar *gs_os_release_get_vendor_name (GsOsRelease *os_release);
G_END_DECLS

View File

@ -1,197 +0,0 @@
diff -up gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit.c.13 gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit.c
--- gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit.c.13 2023-04-25 17:12:24.676551145 +0200
+++ gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit.c 2023-04-25 17:13:54.026626204 +0200
@@ -38,6 +38,7 @@ gs_plugin_initialize (GsPlugin *plugin)
priv->task = pk_task_new ();
pk_client_set_background (PK_CLIENT (priv->task), FALSE);
pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
}
void
@@ -71,6 +72,7 @@ gs_plugin_add_sources_related (GsPlugin
PK_FILTER_ENUM_NOT_COLLECTIONS,
-1);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_get_packages (PK_CLIENT(priv->task),
filter,
cancellable,
@@ -134,6 +136,7 @@ gs_plugin_add_sources (GsPlugin *plugin,
PK_FILTER_ENUM_NOT_SUPPORTED,
-1);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_get_repo_list (PK_CLIENT(priv->task),
filter,
cancellable,
@@ -195,6 +198,7 @@ gs_plugin_app_origin_repo_enable (GsPlug
/* do sync call */
gs_plugin_status_update (plugin, app, GS_PLUGIN_STATUS_WAITING);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_repo_enable (PK_CLIENT (priv->task),
repo_id,
TRUE,
@@ -229,6 +233,7 @@ gs_plugin_repo_enable (GsPlugin *plugin,
gs_app_set_state (app, AS_APP_STATE_INSTALLING);
gs_packagekit_helper_add_app (helper, app);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_repo_enable (PK_CLIENT (priv->task),
gs_app_get_id (app),
TRUE,
@@ -462,6 +467,7 @@ gs_plugin_repo_disable (GsPlugin *plugin
gs_app_set_state (app, AS_APP_STATE_REMOVING);
gs_packagekit_helper_add_app (helper, app);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_repo_enable (PK_CLIENT (priv->task),
gs_app_get_id (app),
FALSE,
@@ -594,6 +600,7 @@ gs_plugin_add_updates (GsPlugin *plugin,
/* do sync call */
gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_get_updates (PK_CLIENT (priv->task),
pk_bitfield_value (PK_FILTER_ENUM_NONE),
cancellable,
@@ -632,6 +639,7 @@ gs_plugin_add_search_files (GsPlugin *pl
PK_FILTER_ENUM_ARCH,
-1);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_search_files (PK_CLIENT (priv->task),
filter,
search,
@@ -664,6 +672,7 @@ gs_plugin_add_search_what_provides (GsPl
PK_FILTER_ENUM_ARCH,
-1);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_what_provides (PK_CLIENT (priv->task),
filter,
search,
diff -up gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-local.c.13 gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-local.c
--- gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-local.c.13 2020-05-22 16:51:19.876380400 +0200
+++ gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-local.c 2023-04-25 17:12:24.756551212 +0200
@@ -29,6 +29,7 @@ gs_plugin_initialize (GsPlugin *plugin)
g_mutex_init (&priv->task_mutex);
priv->task = pk_task_new ();
pk_client_set_background (PK_CLIENT (priv->task), FALSE);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
}
void
@@ -189,6 +190,7 @@ gs_plugin_file_to_app (GsPlugin *plugin,
files = g_strsplit (filename, "\t", -1);
g_mutex_lock (&priv->task_mutex);
pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_get_details_local (PK_CLIENT (priv->task),
files,
cancellable,
diff -up gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine.c.13 gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine.c
--- gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine.c.13 2020-05-22 16:51:19.877380400 +0200
+++ gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine.c 2023-04-25 17:12:24.756551212 +0200
@@ -56,6 +56,7 @@ gs_plugin_initialize (GsPlugin *plugin)
G_CALLBACK (gs_plugin_packagekit_repo_list_changed_cb), plugin);
pk_client_set_background (priv->client, FALSE);
pk_client_set_cache_age (priv->client, G_MAXUINT);
+ pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
/* need pkgname and ID */
gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
@@ -587,6 +588,7 @@ gs_plugin_packagekit_refine_distro_upgra
g_mutex_lock (&priv->client_mutex);
cache_age_save = pk_client_get_cache_age (priv->client);
pk_client_set_cache_age (priv->client, 60 * 60 * 24 * 7); /* once per week */
+ pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_upgrade_system (priv->client,
pk_bitfield_from_enums (PK_TRANSACTION_FLAG_ENUM_SIMULATE, -1),
gs_app_get_version (app),
diff -up gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine-repos.c.13 gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine-repos.c
--- gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine-repos.c.13 2020-05-22 16:51:19.877380400 +0200
+++ gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refine-repos.c 2023-04-25 17:12:24.756551212 +0200
@@ -36,6 +36,7 @@ gs_plugin_initialize (GsPlugin *plugin)
priv->client = pk_client_new ();
pk_client_set_background (priv->client, FALSE);
pk_client_set_cache_age (priv->client, G_MAXUINT);
+ pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
/* need repos::repo-filename */
gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "repos");
@@ -65,6 +66,7 @@ gs_plugin_packagekit_refine_repo_from_fi
to_array[0] = filename;
gs_packagekit_helper_add_app (helper, app);
g_mutex_lock (&priv->client_mutex);
+ pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_search_files (priv->client,
pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, -1),
(gchar **) to_array,
diff -up gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refresh.c.13 gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refresh.c
--- gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refresh.c.13 2020-05-22 16:51:19.877380400 +0200
+++ gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-refresh.c 2023-04-25 17:12:24.756551212 +0200
@@ -35,6 +35,7 @@ gs_plugin_initialize (GsPlugin *plugin)
priv->task = pk_task_new ();
pk_task_set_only_download (priv->task, TRUE);
pk_client_set_background (PK_CLIENT (priv->task), TRUE);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
/* we can return better results than dpkg directly */
gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_CONFLICTS, "dpkg");
@@ -67,6 +68,7 @@ _download_only (GsPlugin *plugin, GsAppL
* we end up downloading a different set of packages than what was
* shown to the user */
pk_client_set_cache_age (PK_CLIENT (priv->task), G_MAXUINT);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_get_updates (PK_CLIENT (priv->task),
pk_bitfield_value (PK_FILTER_ENUM_NONE),
cancellable,
@@ -165,6 +167,7 @@ gs_plugin_refresh (GsPlugin *plugin,
g_mutex_lock (&priv->task_mutex);
/* cache age of 1 is user-initiated */
pk_client_set_background (PK_CLIENT (priv->task), cache_age > 1);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
pk_client_set_cache_age (PK_CLIENT (priv->task), cache_age);
/* refresh the metadata */
results = pk_client_refresh_cache (PK_CLIENT (priv->task),
diff -up gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-upgrade.c.13 gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-upgrade.c
--- gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-upgrade.c.13 2020-05-22 16:51:19.877380400 +0200
+++ gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-upgrade.c 2023-04-25 17:14:16.586645156 +0200
@@ -30,6 +30,7 @@ gs_plugin_initialize (GsPlugin *plugin)
pk_task_set_only_download (priv->task, TRUE);
pk_client_set_background (PK_CLIENT (priv->task), TRUE);
pk_client_set_cache_age (PK_CLIENT (priv->task), 60 * 60 * 24);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
}
void
@@ -69,6 +70,7 @@ gs_plugin_app_upgrade_download (GsPlugin
gs_app_set_state (app, AS_APP_STATE_INSTALLING);
gs_packagekit_helper_set_progress_app (helper, app);
g_mutex_lock (&priv->task_mutex);
+ pk_client_set_interactive (PK_CLIENT (priv->task), gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_task_upgrade_system_sync (priv->task,
gs_app_get_version (app),
PK_UPGRADE_KIND_ENUM_COMPLETE,
diff -up gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-url-to-app.c.13 gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
--- gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-url-to-app.c.13 2020-05-22 16:51:19.878380300 +0200
+++ gnome-software-3.36.1/plugins/packagekit/gs-plugin-packagekit-url-to-app.c 2023-04-25 17:12:24.756551212 +0200
@@ -28,6 +28,7 @@ gs_plugin_initialize (GsPlugin *plugin)
pk_client_set_background (priv->client, FALSE);
pk_client_set_cache_age (priv->client, G_MAXUINT);
+ pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
}
void
@@ -87,6 +88,7 @@ gs_plugin_url_to_app (GsPlugin *plugin,
package_ids[0] = g_strdup (path);
g_mutex_lock (&priv->client_mutex);
+ pk_client_set_interactive (priv->client, gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE));
results = pk_client_resolve (priv->client,
pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, PK_FILTER_ENUM_ARCH, -1),
package_ids,

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
From b50003ed83cab2c6cf6654e5972d6ee3e2303eb6 Mon Sep 17 00:00:00 2001
From: Milan Crha <mcrha@redhat.com>
Date: Tue, 16 Feb 2021 16:09:08 +0100
Subject: [PATCH] odrs: Cannot be disabled by filling empty 'review-server'
setting
Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1143
---
plugins/odrs/gs-plugin-odrs.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/plugins/odrs/gs-plugin-odrs.c b/plugins/odrs/gs-plugin-odrs.c
index f0c0c3b91..2c9bd878d 100644
--- a/plugins/odrs/gs-plugin-odrs.c
+++ b/plugins/odrs/gs-plugin-odrs.c
@@ -175,6 +175,8 @@ gs_plugin_initialize (GsPlugin *plugin)
/* set name of MetaInfo file */
gs_plugin_set_appstream_id (plugin, "org.gnome.Software.Plugin.Odrs");
+
+ gs_plugin_set_enabled (plugin, priv->review_server && *priv->review_server);
}
static GArray *
--
GitLab

View File

@ -1,57 +0,0 @@
From 98dbef8b5a547d3d920d377022e20d2e63519b2f Mon Sep 17 00:00:00 2001
From: Milan Crha <mcrha@redhat.com>
Date: Tue, 16 Feb 2021 12:58:19 +0100
Subject: [PATCH 1/2] GsApplication: Crash when run as root
The `search_provider` is not initialized in this case, leading
to NULL dereference. Skip the call in such cases, because the search
provider is not that important.
Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1142
---
src/gs-application.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/gs-application.c b/src/gs-application.c
index 48f0c6aac..fdb5f55c4 100644
--- a/src/gs-application.c
+++ b/src/gs-application.c
@@ -912,7 +912,8 @@ static void
gs_application_setup_search_provider (GsApplication *app)
{
gs_application_initialize_plugins (app);
- gs_shell_search_provider_setup (app->search_provider, app->plugin_loader);
+ if (app->search_provider)
+ gs_shell_search_provider_setup (app->search_provider, app->plugin_loader);
}
static void
--
GitLab
From 0055bfa8535bb7c5ccd9ace244d71b2885a47daa Mon Sep 17 00:00:00 2001
From: Philip Withnall <philip@tecnocode.co.uk>
Date: Mon, 22 Feb 2021 11:41:05 +0000
Subject: [PATCH 2/2] Apply 1 suggestion(s) to 1 file(s)
---
src/gs-application.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/gs-application.c b/src/gs-application.c
index fdb5f55c4..f05f6f718 100644
--- a/src/gs-application.c
+++ b/src/gs-application.c
@@ -49,7 +49,7 @@ struct _GsApplication {
#ifdef HAVE_PACKAGEKIT
GsDbusHelper *dbus_helper;
#endif
- GsShellSearchProvider *search_provider;
+ GsShellSearchProvider *search_provider; /* (nullable) (owned) */
GSettings *settings;
GSimpleActionGroup *action_map;
guint shell_loaded_handler_id;
--
GitLab

View File

@ -1,36 +0,0 @@
From 5b0e476a17129be0d8b451467aded9c8ae861218 Mon Sep 17 00:00:00 2001
From: Rasmus Thomsen <oss@cogitri.dev>
Date: Fri, 17 Apr 2020 18:55:21 +0200
Subject: [PATCH] build: install more headers
These are required for building out of tree plugins
---
lib/meson.build | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/meson.build b/lib/meson.build
index 1c00d4f3e..6a2e803e5 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -4,12 +4,18 @@ cargs += ['-DLOCALPLUGINDIR=""']
install_headers([
'gnome-software.h',
'gs-app.h',
+ 'gs-app-collation.h',
'gs-app-list.h',
+ 'gs-autocleanups.h',
'gs-category.h',
+ 'gs-ioprio.h',
'gs-metered.h',
'gs-os-release.h',
'gs-plugin.h',
'gs-plugin-event.h',
+ 'gs-plugin-job.h',
+ 'gs-plugin-loader.h',
+ 'gs-plugin-loader-sync.h',
'gs-plugin-types.h',
'gs-plugin-vfuncs.h',
'gs-utils.h'
--
GitLab

View File

@ -1,117 +0,0 @@
diff -up gnome-software-3.36.1/plugins/flatpak/gs-flatpak.c.10 gnome-software-3.36.1/plugins/flatpak/gs-flatpak.c
--- gnome-software-3.36.1/plugins/flatpak/gs-flatpak.c.10 2020-05-22 16:51:19.868380300 +0200
+++ gnome-software-3.36.1/plugins/flatpak/gs-flatpak.c 2021-06-21 21:24:00.233689928 +0200
@@ -1844,12 +1844,13 @@ gs_flatpak_refine_app_state (GsFlatpak *
}
static GsApp *
-gs_flatpak_create_runtime (GsFlatpak *self, GsApp *parent, const gchar *runtime)
+gs_flatpak_create_runtime (GsFlatpak *self, GsApp *parent, const gchar *runtime, GCancellable *cancellable)
{
g_autofree gchar *source = NULL;
g_auto(GStrv) split = NULL;
g_autoptr(GsApp) app_cache = NULL;
g_autoptr(GsApp) app = NULL;
+ const gchar *origin;
/* get the name/arch/branch */
split = g_strsplit (runtime, "/", -1);
@@ -1864,6 +1865,24 @@ gs_flatpak_create_runtime (GsFlatpak *se
gs_app_set_kind (app, AS_APP_KIND_RUNTIME);
gs_app_set_branch (app, split[2]);
+ origin = gs_app_get_origin (parent);
+ if (origin != NULL) {
+ g_autoptr(FlatpakRemoteRef) xref = NULL;
+
+ xref = flatpak_installation_fetch_remote_ref_sync (self->installation,
+ origin,
+ FLATPAK_REF_KIND_RUNTIME,
+ gs_app_get_id (app),
+ gs_flatpak_app_get_ref_arch (parent),
+ gs_app_get_branch (app),
+ cancellable,
+ NULL);
+
+ /* Prefer runtime from the same origin as the parent application */
+ if (xref)
+ gs_app_set_origin (app, origin);
+ }
+
/* search in the cache */
app_cache = gs_plugin_cache_lookup (self->plugin, gs_app_get_unique_id (app));
if (app_cache != NULL) {
@@ -1898,6 +1917,7 @@ gs_flatpak_set_app_metadata (GsFlatpak *
GsApp *app,
const gchar *data,
gsize length,
+ GCancellable *cancellable,
GError **error)
{
gboolean secure = TRUE;
@@ -1951,7 +1971,7 @@ gs_flatpak_set_app_metadata (GsFlatpak *
gs_app_add_kudo (app, GS_APP_KUDO_SANDBOXED_SECURE);
/* create runtime */
- app_runtime = gs_flatpak_create_runtime (self, app, runtime);
+ app_runtime = gs_flatpak_create_runtime (self, app, runtime, cancellable);
if (app_runtime != NULL) {
gs_plugin_refine_item_scope (self, app_runtime);
gs_app_set_runtime (app, app_runtime);
@@ -2046,7 +2066,7 @@ gs_plugin_refine_item_metadata (GsFlatpa
}
/* parse key file */
- if (!gs_flatpak_set_app_metadata (self, app, str, len, error))
+ if (!gs_flatpak_set_app_metadata (self, app, str, len, cancellable, error))
return FALSE;
return TRUE;
}
@@ -2506,6 +2526,7 @@ gs_flatpak_file_to_app_bundle (GsFlatpak
if (!gs_flatpak_set_app_metadata (self, app,
g_bytes_get_data (metadata, NULL),
g_bytes_get_size (metadata),
+ cancellable,
error))
return NULL;
diff -up gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c.10 gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c
--- gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c.10 2021-06-21 20:38:42.585590510 +0200
+++ gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c 2021-06-21 21:23:00.977665979 +0200
@@ -852,6 +852,36 @@ gs_plugin_app_install (GsPlugin *plugin,
ref, NULL, error)) {
gs_flatpak_error_convert (error);
return FALSE;
+ } else {
+ GsApp *runtime;
+
+ runtime = gs_app_get_runtime (app);
+ if (runtime != NULL && gs_app_get_origin (runtime) != NULL) {
+ g_autoptr(FlatpakInstalledRef) runtime_ref = NULL;
+
+ runtime_ref = flatpak_installation_get_installed_ref (gs_flatpak_get_installation (flatpak),
+ gs_flatpak_app_get_ref_kind (runtime),
+ gs_flatpak_app_get_ref_name (runtime),
+ gs_flatpak_app_get_ref_arch (runtime),
+ gs_app_get_branch (runtime),
+ cancellable,
+ NULL);
+ if (runtime_ref == NULL) {
+ g_autoptr(GError) error_local = NULL;
+
+ g_clear_pointer (&ref, g_free);
+ ref = gs_flatpak_app_get_ref_display (runtime);
+ if (!flatpak_transaction_add_install (transaction, gs_app_get_origin (runtime), ref, NULL, &error_local)) {
+ if (g_error_matches (error_local, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED)) {
+ g_clear_error (&error_local);
+ } else {
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ gs_flatpak_error_convert (error);
+ return FALSE;
+ }
+ }
+ }
+ }
}
}

View File

@ -1,26 +0,0 @@
diff -up gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c.unrelated-refs gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c
--- gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c.unrelated-refs 2020-10-09 14:07:16.407235531 -0400
+++ gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c 2020-10-09 14:08:48.775544689 -0400
@@ -696,6 +696,11 @@ gs_plugin_app_remove (GsPlugin *plugin,
gs_flatpak_error_convert (error);
return FALSE;
}
+
+ /* add to the transaction cache for quick look up -- other unrelated
+ * refs will be matched using gs_plugin_flatpak_find_app_by_ref() */
+ gs_flatpak_transaction_add_app (transaction, app);
+
ref = gs_flatpak_app_get_ref_display (app);
if (!flatpak_transaction_add_uninstall (transaction, ref, error)) {
gs_flatpak_error_convert (error);
@@ -899,6 +904,10 @@ gs_plugin_flatpak_update (GsPlugin *plug
gs_flatpak_error_convert (error);
return FALSE;
}
+
+ /* add to the transaction cache for quick look up -- other unrelated
+ * refs will be matched using gs_plugin_flatpak_find_app_by_ref() */
+ gs_flatpak_transaction_add_app (transaction, app);
}
/* run transaction */

View File

@ -1,97 +0,0 @@
diff -up gnome-software-3.36.1/lib/gs-plugin.c.1888404 gnome-software-3.36.1/lib/gs-plugin.c
--- gnome-software-3.36.1/lib/gs-plugin.c.1888404 2021-05-24 13:50:34.302612057 +0200
+++ gnome-software-3.36.1/lib/gs-plugin.c 2021-05-24 13:50:39.160609728 +0200
@@ -1398,6 +1398,44 @@ gs_plugin_cache_lookup (GsPlugin *plugin
}
/**
+ * gs_plugin_cache_lookup_by_state:
+ * @plugin: a #GsPlugin
+ * @list: a #GsAppList to add applications to
+ * @state: a #AsAppState
+ *
+ * Adds each cached #GsApp with state @state into the @list.
+ * When the state is %AS_APP_STATE_UNKNOWN, then adds all
+ * cached applications.
+ *
+ * Since: 3.36.1-8
+ **/
+void
+gs_plugin_cache_lookup_by_state (GsPlugin *plugin,
+ GsAppList *list,
+ AsAppState state)
+{
+ GsPluginPrivate *priv;
+ GHashTableIter iter;
+ gpointer value;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ g_return_if_fail (GS_IS_PLUGIN (plugin));
+ g_return_if_fail (GS_IS_APP_LIST (list));
+
+ priv = gs_plugin_get_instance_private (plugin);
+ locker = g_mutex_locker_new (&priv->cache_mutex);
+
+ g_hash_table_iter_init (&iter, priv->cache);
+ while (g_hash_table_iter_next (&iter, NULL, &value)) {
+ GsApp *app = value;
+
+ if (state == AS_APP_STATE_UNKNOWN ||
+ state == gs_app_get_state (app))
+ gs_app_list_add (list, app);
+ }
+}
+
+/**
* gs_plugin_cache_remove:
* @plugin: a #GsPlugin
* @key: a key which matches
diff -up gnome-software-3.36.1/lib/gs-plugin.h.1888404 gnome-software-3.36.1/lib/gs-plugin.h
--- gnome-software-3.36.1/lib/gs-plugin.h.1888404 2021-05-24 13:50:34.302612057 +0200
+++ gnome-software-3.36.1/lib/gs-plugin.h 2021-05-24 13:50:39.160609728 +0200
@@ -102,6 +102,9 @@ gboolean gs_plugin_check_distro_id (Gs
const gchar *distro_id);
GsApp *gs_plugin_cache_lookup (GsPlugin *plugin,
const gchar *key);
+void gs_plugin_cache_lookup_by_state (GsPlugin *plugin,
+ GsAppList *list,
+ AsAppState state);
void gs_plugin_cache_add (GsPlugin *plugin,
const gchar *key,
GsApp *app);
diff -up gnome-software-3.36.1/lib/gs-plugin-loader.c.1888404 gnome-software-3.36.1/lib/gs-plugin-loader.c
--- gnome-software-3.36.1/lib/gs-plugin-loader.c.1888404 2021-05-24 13:50:34.302612057 +0200
+++ gnome-software-3.36.1/lib/gs-plugin-loader.c 2021-05-24 13:50:39.159609728 +0200
@@ -1273,7 +1273,7 @@ static gboolean
gs_plugin_loader_app_is_valid_updatable (GsApp *app, gpointer user_data)
{
return gs_plugin_loader_app_is_valid (app, user_data) &&
- gs_app_is_updatable (app);
+ (gs_app_is_updatable (app) || gs_app_get_state (app) == AS_APP_STATE_INSTALLING);
}
static gboolean
diff -up gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c.1888404 gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c
--- gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c.1888404 2021-05-24 13:50:34.310612054 +0200
+++ gnome-software-3.36.1/plugins/flatpak/gs-plugin-flatpak.c 2021-05-24 13:50:39.161609727 +0200
@@ -218,6 +218,7 @@ gs_plugin_add_updates (GsPlugin *plugin,
if (!gs_flatpak_add_updates (flatpak, list, cancellable, error))
return FALSE;
}
+ gs_plugin_cache_lookup_by_state (plugin, list, AS_APP_STATE_INSTALLING);
return TRUE;
}
diff -up gnome-software-3.36.1/src/gs-updates-page.c.1888404 gnome-software-3.36.1/src/gs-updates-page.c
--- gnome-software-3.36.1/src/gs-updates-page.c.1888404 2021-05-24 13:50:39.161609727 +0200
+++ gnome-software-3.36.1/src/gs-updates-page.c 2021-05-24 13:51:00.211599638 +0200
@@ -139,7 +139,8 @@ gs_updates_page_invalidate (GsUpdatesPag
static GsUpdatesSectionKind
_get_app_section (GsApp *app)
{
- if (gs_app_get_state (app) == AS_APP_STATE_UPDATABLE_LIVE) {
+ if (gs_app_get_state (app) == AS_APP_STATE_UPDATABLE_LIVE ||
+ gs_app_get_state (app) == AS_APP_STATE_INSTALLING) {
if (gs_app_get_kind (app) == AS_APP_KIND_FIRMWARE)
return GS_UPDATES_SECTION_KIND_ONLINE_FIRMWARE;
return GS_UPDATES_SECTION_KIND_ONLINE;

View File

@ -1,107 +1,97 @@
%global glib2_version 2.56.0
%global gtk3_version 3.22.4
%global json_glib_version 1.2.0
%global packagekit_version 1.1.12-7
%global appstream_glib_version 0.7.14-3
%global libsoup_version 2.52.0
%global gsettings_desktop_schemas_version 3.12.0
%global gnome_desktop_version 3.18.0
%global fwupd_version 1.0.7
%global flatpak_version 0.9.4
%global appstream_version 0.14.0
%global flatpak_version 1.9.1
%global fwupd_version 1.5.6
%global glib2_version 2.68.0
%global gtk4_version 4.10.0
%global json_glib_version 1.6.0
%global libadwaita_version 1.3.alpha
%global libxmlb_version 0.1.7
%global packagekit_version 1.2.5
%global fwupd_arches aarch64 ppc64le s390x x86_64
Name: gnome-software
Version: 3.36.1
Release: 12%{?dist}
Summary: A software center for GNOME
License: GPLv2+
URL: https://wiki.gnome.org/Apps/Software
Source0: https://download.gnome.org/sources/gnome-software/3.36/%{name}-%{version}.tar.xz
# Add support for basic auth and webflow auth in flatpak plugin
# https://gitlab.gnome.org/GNOME/gnome-software/-/merge_requests/467
Patch0: 0001-Add-basic-auth-support-to-flatpak-plugin.patch
Patch1: 0002-Add-webflow-auth-support-to-flatpak-plugin.patch
# Add back shell extensions support as we don't have the extensions app in RHEL 8.3
# https://bugzilla.redhat.com/show_bug.cgi?id=1839774
Patch2: add-back-shell-extensions-support.patch
# Fix hardcoded desktop and appdata names to match what's in RHEL 8.3
Patch3: 0001-Fix-hardcoded-desktop-and-appdata-names-to-match-wha.patch
# Fix 'Show Details' to correctly work for rpm-installed firefox
Patch4: 0001-Improve-the-heuristic-for-detecting-old-style-AppStr.patch
# Fix flatpak updates and removals when same ref occurs in multiple remotes
Patch5: gnome-software-3.36.1-unrelated-refs.patch
Patch6: be-able-to-disable-odrs.patch
Patch7: crash-when-run-as-root.patch
Patch8: gs-updates-page-keep-showing-installing-apps.patch
Patch9: flatpak-same-runtime-origin.patch
Patch10: devel-install-headers.patch
Patch11: 0003-hide-some-errors.patch
Patch12: 0004-set-interactive-flag-on-PkClient.patch
BuildRequires: gcc
BuildRequires: gettext
BuildRequires: libxslt
BuildRequires: docbook-style-xsl
BuildRequires: desktop-file-utils
%ifarch %{fwupd_arches}
BuildRequires: fwupd-devel >= %{fwupd_version}
%endif
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: gnome-desktop3-devel
BuildRequires: gnome-online-accounts-devel
BuildRequires: gsettings-desktop-schemas-devel >= %{gsettings_desktop_schemas_version}
BuildRequires: gspell-devel
BuildRequires: gtk3-devel >= %{gtk3_version}
BuildRequires: gtk-doc
BuildRequires: json-glib-devel >= %{json_glib_version}
BuildRequires: libappstream-glib-devel >= %{appstream_glib_version}
BuildRequires: libsoup-devel
BuildRequires: libxmlb-devel >= %{libxmlb_version}
BuildRequires: meson
BuildRequires: PackageKit-glib-devel >= %{packagekit_version}
BuildRequires: polkit-devel
BuildRequires: flatpak-devel >= %{flatpak_version}
%if 0%{?fedora}
BuildRequires: libdnf-devel
BuildRequires: ostree-devel
BuildRequires: rpm-devel
BuildRequires: rpm-ostree-devel
%endif
BuildRequires: libgudev1-devel
%ifarch %{valgrind_arches}
BuildRequires: valgrind-devel
%endif
Requires: appstream-data
Requires: flatpak%{?_isa} >= %{flatpak_version}
Requires: flatpak-libs%{?_isa} >= %{flatpak_version}
%ifarch %{fwupd_arches}
Requires: fwupd%{?_isa} >= %{fwupd_version}
%endif
Requires: glib2%{?_isa} >= %{glib2_version}
Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
# gnome-menus is needed for app folder .directory entries
Requires: gnome-menus%{?_isa}
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
Requires: gtk3%{?_isa} >= %{gtk3_version}
Requires: json-glib%{?_isa} >= %{json_glib_version}
Requires: iso-codes
Requires: libappstream-glib%{?_isa} >= %{appstream_glib_version}
# librsvg2 is needed for gdk-pixbuf svg loader
Requires: librsvg2%{?_isa}
Requires: libsoup%{?_isa} >= %{libsoup_version}
Requires: PackageKit%{?_isa} >= %{packagekit_version}
Requires: libxmlb%{?_isa} >= %{libxmlb_version}
Obsoletes: gnome-software-editor < 3.35.1
# Disable WebApps for RHEL builds
%bcond webapps %[!0%{?rhel}]
# Disable parental control for RHEL builds
%bcond malcontent %[!0%{?rhel}]
# Disable rpm-ostree support for RHEL builds
%bcond rpmostree %[!0%{?rhel}]
# this is not a library version
%define gs_plugin_version 13
%define gs_plugin_version 20
%global tarball_version %%(echo %{version} | tr '~' '.')
%global __provides_exclude_from ^%{_libdir}/%{name}/plugins-%{gs_plugin_version}/.*\\.so.*$
Name: gnome-software
Version: 45.3
Release: 3%{?dist}
Summary: A software center for GNOME
License: GPL-2.0-or-later
URL: https://wiki.gnome.org/Apps/Software
Source0: https://download.gnome.org/sources/gnome-software/45/%{name}-%{tarball_version}.tar.xz
Patch01: 0001-Lower_glib_dependency_to_2_68.patch
Patch02: 0002-Lower-pango-attributes.patch
Patch03: 0003-Verify-category-sizes.patch
Patch04: 0004-prefer-vendor-name.patch
BuildRequires: docbook-style-xsl
BuildRequires: desktop-file-utils
BuildRequires: gcc
BuildRequires: gettext
BuildRequires: gtk-doc
BuildRequires: libxslt
BuildRequires: meson
BuildRequires: pkgconfig(appstream) >= %{appstream_version}
BuildRequires: pkgconfig(flatpak) >= %{flatpak_version}
BuildRequires: pkgconfig(fwupd) >= %{fwupd_version}
BuildRequires: pkgconfig(gdk-pixbuf-2.0)
BuildRequires: pkgconfig(gio-unix-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(gmodule-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(gsettings-desktop-schemas)
BuildRequires: pkgconfig(gtk4) >= %{gtk4_version}
BuildRequires: pkgconfig(gudev-1.0)
BuildRequires: pkgconfig(json-glib-1.0) >= %{json_glib_version}
BuildRequires: pkgconfig(libadwaita-1) >= %{libadwaita_version}
BuildRequires: pkgconfig(libdnf)
BuildRequires: pkgconfig(libsoup-2.4)
%if %{with malcontent}
BuildRequires: pkgconfig(malcontent-0)
%endif
BuildRequires: pkgconfig(ostree-1)
BuildRequires: pkgconfig(packagekit-glib2) >= %{packagekit_version}
BuildRequires: pkgconfig(polkit-gobject-1)
BuildRequires: pkgconfig(rpm)
%if %{with rpmostree}
BuildRequires: pkgconfig(rpm-ostree-1)
%endif
#BuildRequires: pkgconfig(sysprof-capture-4)
BuildRequires: pkgconfig(xmlb) >= %{libxmlb_version}
Requires: appstream-data
Requires: appstream%{?_isa} >= %{appstream_version}
%if %{with webapps}
Requires: epiphany-runtime%{?_isa}
%endif
Requires: flatpak%{?_isa} >= %{flatpak_version}
Requires: flatpak-libs%{?_isa} >= %{flatpak_version}
Requires: fwupd%{?_isa} >= %{fwupd_version}
Requires: glib2%{?_isa} >= %{glib2_version}
# gnome-menus is needed for app folder .directory entries
Requires: gnome-menus%{?_isa}
Requires: gsettings-desktop-schemas%{?_isa}
Requires: json-glib%{?_isa} >= %{json_glib_version}
Requires: iso-codes
# librsvg2 is needed for gdk-pixbuf svg loader
Requires: librsvg2%{?_isa}
Requires: libxmlb%{?_isa} >= %{libxmlb_version}
Recommends: PackageKit%{?_isa} >= %{packagekit_version}
Obsoletes: gnome-software-snap < 3.33.1
Obsoletes: gnome-software-editor < 3.35.1
%description
gnome-software is an application that makes it easy to add, remove
@ -115,23 +105,50 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
These development files are for building gnome-software plugins outside
the source tree. Most users do not need this subpackage installed.
%if %{with rpmostree}
%package rpm-ostree
Summary: rpm-ostree backend for gnome-software
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: rpm-ostree%{?_isa}
Supplements: (gnome-software%{?_isa} and rpm-ostree%{?_isa})
%description rpm-ostree
gnome-software is an application that makes it easy to add, remove
and update software in the GNOME desktop.
This package includes the rpm-ostree backend.
%endif
%prep
%autosetup -p1 -S gendiff
%autosetup -p1 -S gendiff -n %{name}-%{tarball_version}
%build
%meson \
-Dsoup2=true \
-Dsnap=false \
%ifnarch %{valgrind_arches}
-Dvalgrind=false \
%endif
%ifnarch %{fwupd_arches}
-Dfwupd=false \
%if %{with malcontent}
-Dmalcontent=true \
%else
-Dmalcontent=false \
%endif
-Dgudev=true \
-Dpackagekit=true \
-Dpackagekit_autoremove=true \
-Dexternal_appstream=false \
-Dmalcontent=false \
%if %{with rpmostree}
-Drpm_ostree=true \
%else
-Drpm_ostree=false \
%endif
%if %{with webapps}
-Dwebapps=true \
-Dhardcoded_foss_webapps=true \
-Dhardcoded_proprietary_webapps=false \
%else
-Dwebapps=false \
-Dhardcoded_foss_webapps=false \
-Dhardcoded_proprietary_webapps=false \
%endif
-Dtests=false
%meson_build
@ -139,7 +156,7 @@ the source tree. Most users do not need this subpackage installed.
%meson_install
# remove unneeded dpkg plugin
rm %{buildroot}%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_dpkg.so
rm %{buildroot}%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_dpkg.so
# make the software center load faster
desktop-file-edit %{buildroot}%{_datadir}/applications/org.gnome.Software.desktop \
@ -148,7 +165,13 @@ desktop-file-edit %{buildroot}%{_datadir}/applications/org.gnome.Software.deskto
# set up for Fedora
cat >> %{buildroot}%{_datadir}/glib-2.0/schemas/org.gnome.software-fedora.gschema.override << FOE
[org.gnome.software]
official-repos = [ 'rhel-7' ]
%if 0%{?rhel}
official-repos = [ 'rhel-%{?rhel}' ]
%else
official-repos = [ 'anaconda', 'fedora', 'fedora-debuginfo', 'fedora-source', 'koji-override-0', 'koji-override-1', 'rawhide', 'rawhide-debuginfo', 'rawhide-source', 'updates', 'updates-debuginfo', 'updates-source', 'updates-testing', 'updates-testing-debuginfo', 'updates-testing-source', 'fedora-modular', 'fedora-modular-debuginfo', 'fedora-modular-source', 'rawhide-modular', 'rawhide-modular-debuginfo', 'rawhide-modular-source', 'fedora-cisco-openh264', 'fedora-cisco-openh264-debuginfo' ]
required-repos = [ 'fedora', 'updates' ]
packaging-format-preference = [ 'flatpak:fedora-testing', 'flatpak:fedora', 'rpm' ]
%endif
FOE
%find_lang %name --with-gnome
@ -160,60 +183,51 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%doc AUTHORS README.md
%license COPYING
%{_bindir}/gnome-software
%{_datadir}/applications/gnome-software-local-file.desktop
%{_datadir}/applications/gnome-software-local-file-flatpak.desktop
%{_datadir}/applications/gnome-software-local-file-fwupd.desktop
%{_datadir}/applications/gnome-software-local-file-packagekit.desktop
%{_datadir}/applications/org.gnome.Software.desktop
%dir %{_datadir}/gnome-software
%{_datadir}/gnome-software/*.png
%{_mandir}/man1/gnome-software.1.gz
%{_mandir}/man1/gnome-software.1*
%{_datadir}/icons/hicolor/*/apps/org.gnome.Software.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Software-symbolic.svg
%{_datadir}/icons/hicolor/scalable/status/software-installed-symbolic.svg
%{_datadir}/gnome-software/featured-*.svg
%{_datadir}/gnome-software/featured-*.jpg
%{_datadir}/metainfo/org.gnome.Software.appdata.xml
%{_datadir}/icons/hicolor/scalable/actions/app-remove-symbolic.svg
%{_datadir}/metainfo/org.gnome.Software.metainfo.xml
%if %{with webapps}
%{_datadir}/metainfo/org.gnome.Software.Plugin.Epiphany.metainfo.xml
%endif
%{_datadir}/metainfo/org.gnome.Software.Plugin.Flatpak.metainfo.xml
%ifarch %{fwupd_arches}
%{_datadir}/metainfo/org.gnome.Software.Plugin.Fwupd.metainfo.xml
%dir %{_libdir}/gnome-software/plugins-%{gs_plugin_version}
%{_libdir}/gnome-software/libgnomesoftware.so.%{gs_plugin_version}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_appstream.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_dummy.so
%if %{with webapps}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_epiphany.so
%endif
%{_datadir}/metainfo/org.gnome.Software.Plugin.Odrs.metainfo.xml
%dir %{_libdir}/gs-plugins-%{gs_plugin_version}
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_appstream.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_desktop-categories.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_desktop-menu-path.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_dummy.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fedora-langpacks.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fedora-pkgdb-collections.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_flatpak.so
%ifarch %{fwupd_arches}
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fwupd.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_fedora-langpacks.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_fedora-pkgdb-collections.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_flatpak.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_fwupd.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_generic-updates.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-blocklist.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_icons.so
%if %{with malcontent}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_malcontent.so
%endif
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_generic-updates.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-blacklist.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-popular.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_icons.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_key-colors-metadata.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_key-colors.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_modalias.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_odrs.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_os-release.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-history.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-local.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-offline.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-proxy.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refine-repos.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refine.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refresh.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-upgrade.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-url-to-app.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_provenance-license.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_provenance.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_repos.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_rewrite-resource.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_shell-extensions.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_systemd-updates.so
%{_sysconfdir}/xdg/autostart/gnome-software-service.desktop
%{_datadir}/app-info/xmls/org.gnome.Software.Featured.xml
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_modalias.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_os-release.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_packagekit.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_provenance-license.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_provenance.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_repos.so
%{_sysconfdir}/xdg/autostart/org.gnome.Software.desktop
%dir %{_datadir}/swcatalog
%dir %{_datadir}/swcatalog/xml
%if %{with webapps}
%{_datadir}/swcatalog/xml/gnome-pwa-list-foss.xml
%endif
%{_datadir}/swcatalog/xml/org.gnome.Software.Curated.xml
%{_datadir}/swcatalog/xml/org.gnome.Software.Featured.xml
%{_datadir}/dbus-1/services/org.freedesktop.PackageKit.service
%{_datadir}/dbus-1/services/org.gnome.Software.service
%{_datadir}/gnome-shell/search-providers/org.gnome.Software-search-provider.ini
@ -222,75 +236,302 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%{_libexecdir}/gnome-software-cmd
%{_libexecdir}/gnome-software-restarter
%if %{with rpmostree}
%files rpm-ostree
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_rpm-ostree.so
%endif
%files devel
%{_libdir}/pkgconfig/gnome-software.pc
%dir %{_includedir}/gnome-software
%{_includedir}/gnome-software/*.h
%{_datadir}/gtk-doc/html/gnome-software
%{_libdir}/gnome-software/libgnomesoftware.so
%dir %{_datadir}/gtk-doc
%dir %{_datadir}/gtk-doc/html
%{_datadir}/gtk-doc/html/gnome-software/
%changelog
* Tue Apr 25 2023 Milan Crha <mcrha@redhat.com> - 3.36.1-12
- Resolves: #1857654 (packagekit: Set interactive flag on PkClient)
* Mon May 27 2024 Milan Crha <mcrha@redhat.com> - 45.3-3
- Resolves: RHEL-22268 (Prefer VENDOR_NAME in app origin)
* Thu Sep 22 2022 Milan Crha <mcrha@redhat.com> - 3.36.1-11
- Resolves: #2124772 (Hide some errors in non-debug builds)
* Mon May 06 2024 Milan Crha <mcrha@redhat.com> - 45.3-2
- Resolves: RHEL-843 (Rebase GNOME Software to its GNOME 45 version)
* Thu Jul 08 2021 Milan Crha <mcrha@redhat.com> - 3.36.1-10
- Resolves: #1978505 (Development package is missing important header files)
* Thu Aug 03 2023 Milan Crha <mcrha@redhat.com> - 41.5-3
- Resolves: #2228374 (Rebuild to move gnome-software-devel into CRB)
* Mon Jun 21 2021 Milan Crha <mcrha@redhat.com> - 3.36.1-9
- Resolves: #1972545 (flatpak: Prefer runtime from the same origin as the application)
* Thu Sep 22 2022 Milan Crha <mcrha@redhat.com> - 41.5-2
- Resolves: #2128812 (Correct property name in GsRemovalDialog .ui file)
- Resolves: #2129021 (Hide some errors in non-debug builds)
* Mon May 24 2021 Milan Crha <mcrha@redhat.com> - 3.36.1-8
- Resolves: #1888404 (Updates page hides ongoing updates on refresh)
* Mon Mar 21 2022 Milan Crha <mcrha@redhat.com> - 41.5-1
- Resolves: #2066164 (Update to 41.5)
* Mon May 24 2021 Milan Crha <mcrha@redhat.com> - 3.36.1-7
- Resolves: #1873297 (Crash when run as root)
* Mon Feb 14 2022 Milan Crha <mcrha@redhat.com> - 41.4-1
- Resolves: #2054082 (Update to 41.4)
* Mon May 24 2021 Milan Crha <mcrha@redhat.com> - 3.36.1-6
- Resolves: #1791478 (Cannot completely disable ODRS (GNOME Ratings))
* Mon Jan 31 2022 Milan Crha <mcrha@redhat.com> - 41.3-2
- Resolves: #2048397 (Optional software repos can't be disabled)
* Wed Feb 17 2021 Milan Crha <mcrha@redhat.com> - 3.36.1-5
- Fix flatpak updates and removals when same ref occurs in multiple remotes
- Resolves: #1888407
* Mon Jan 10 2022 Milan Crha <mcrha@redhat.com> - 41.3-1
- Resolves: #2038805 (Update to 41.3)
* Thu Jun 11 2020 Kalev Lember <klember@redhat.com> - 3.36.1-4
- Fix 'Show Details' to correctly work for rpm-installed firefox
- Resolves: #1845714
* Mon Dec 06 2021 Milan Crha <mcrha@redhat.com> - 41.2-1
- Resolves: #2029323 (Update to 41.2)
* Wed Jun 03 2020 Kalev Lember <klember@redhat.com> - 3.36.1-3
- Upload correct 3.36.1 tarball
- Fix hardcoded desktop and appdata names to match what's in RHEL 8.3
- Add back shell extensions support
- Resolves: #1839774
* Mon Nov 01 2021 Milan Crha <mcrha@redhat.com> - 41.1-1
- Resolves: #2018871 (Update to 41.1)
* Tue Jun 02 2020 Kalev Lember <klember@redhat.com> - 3.36.1-2
- Add support for basic auth and webflow auth in flatpak plugin
- Resolves: #1815502
* Tue Oct 12 2021 Milan Crha <mcrha@redhat.com> - 41.0-2
- Resolves: #2012699 (Backport changes from Fedora 35)
- Add patch to mark compulsory only repos, not apps from it
- Resolves: #2011176 (flathub repo can't be added through gnome-software)
- Resolves: #2010660 (gs-repos-dialog: Can show also desktop applications)
- Resolves: #2010353 (Optional repos cannot be disabled)
- Resolves: #2010740 (Refresh on repository setup change)
- Resolves: #2009063 (Correct update notifications)
* Mon Sep 20 2021 Milan Crha <mcrha@redhat.com> - 41.0-1
- Resolves: #2005770 (Update to 41.0)
* Mon Aug 23 2021 Kalev Lember <klember@redhat.com> - 41~beta-1
- Resolves: #1995567 (Update to 41.beta)
* Fri Aug 13 2021 Milan Crha <mcrha@redhat.com> - 40.4-1
- Resolves: #1992452 (Update to 40.4)
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 40.3-3
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Mon Jul 19 2021 Milan Crha <mcrha@redhat.com> - 40.3-2
- Resolves: #1983553
- Add rpm-ostree patch to hide packages from the search results
- Add patch to implement what-provides search in the Flatpak plugin
* Mon Jul 12 2021 Milan Crha <mcrha@redhat.com> - 40.3-1
- Related: #1981296 (Update to 40.3)
* Tue Jun 22 2021 Mohan Boddu <mboddu@redhat.com> - 40.2-2
- Rebuilt for RHEL 9 BETA for openssl 3.0
Related: rhbz#1971065
* Fri Jun 04 2021 Milan Crha <mcrha@redhat.com> - 40.2-1
- Related: #1967855 (Update to 40.2)
* Mon May 03 2021 Milan Crha <mcrha@redhat.com> - 40.1-2
- Related: #1952776 (Add patch for crash under gs_details_page_refresh_all() (i#1227))
* Mon May 03 2021 Milan Crha <mcrha@redhat.com> - 40.1-1
- Related: #1952776 (Update to 40.1)
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 40.0-3
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Fri Mar 26 2021 Kalev Lember <klember@redhat.com> - 40.0-2
- Rebuild to fix sysprof-capture symbols leaking into libraries consuming it
* Mon Mar 22 2021 Kalev Lember <klember@redhat.com> - 40.0-1
- Update to 40.0
* Thu Mar 18 2021 Adam Williamson <awilliam@redhat.com> - 40~rc-2
- Backport a couple of bug fixes from upstream (icon display, crash bug)
* Mon Mar 15 2021 Kalev Lember <klember@redhat.com> - 40~rc-1
- Update to 40.rc
* Wed Mar 10 2021 Adam Williamson <awilliam@redhat.com> - 40~beta-2
- Backport MR #643 to fix update notifications on first run (#1930401)
* Tue Feb 16 2021 Kalev Lember <klember@redhat.com> - 40~beta-1
- Update to 40.beta
* Mon Feb 08 2021 Richard Hughes <richard@hughsie.com> - 3.38.1-1
- New upstream version
- Fix package details not found for some packages
- Ignore harmless warnings when using unusual fwupd versions
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.38.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Sep 14 2020 Kalev Lember <klember@redhat.com> - 3.38.0-2
- Revert an optimization that broke packagekit updates
* Fri Sep 11 2020 Kalev Lember <klember@redhat.com> - 3.38.0-1
- Update to 3.38.0
* Tue Sep 01 2020 Kalev Lember <klember@redhat.com> - 3.37.92-1
- Update to 3.37.92
* Tue Aug 18 2020 Richard Hughes <richard@hughsie.com> - 3.36.1-4
- Rebuild for the libxmlb API bump.
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.36.1-3
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.36.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri May 22 2020 Richard Hughes <rhughes@redhat.com> - 3.36.1-1
- Update to 3.36.1
- Resolves: #1797932
* Wed Jan 29 2020 Kalev Lember <klember@redhat.com> - 3.30.6-3
- Fix issues with installing Cockpit
- Resolves: #1759913
* Tue May 12 2020 Kalev Lember <klember@redhat.com> - 3.36.0-2
- Backport various rpm-ostree backend fixes
* Fri Jul 12 2019 Kalev Lember <klember@redhat.com> - 3.30.6-2
- Hide addons that are not available in repos
- Resolves: #1719779
* Wed Mar 11 2020 Kalev Lember <klember@redhat.com> - 3.36.0-1
- Update to 3.36.0
* Tue Dec 18 2018 Kalev Lember <klember@redhat.com> - 3.30.6-1
- Update to 3.30.6
* Wed Mar 04 2020 Kalev Lember <klember@redhat.com> - 3.35.92-1
- Update to 3.35.92
* Fri Aug 3 2018 Florian Weimer <fweimer@redhat.com> - 3.28.2-3
- Honor %%{valgrind_arches}
* Fri Feb 21 2020 Richard Hughes <rhughes@redhat.com> - 3.35.91-2
- Backport a patch to fix a crash when looking at the application details.
* Wed Jul 18 2018 Richard Hughes <rhughes@redhat.com> - 3.28.2-2
- Do not build the snapd plugin on RHEL.
* Wed Feb 19 2020 Richard Hughes <rhughes@redhat.com> - 3.35.91-1
- Update to 3.35.91.
* Thu Jul 12 2018 Richard Hughes <rhughes@redhat.com> - 3.28.2-1
- Update to 3.28.2
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.35.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Mon Nov 25 2019 Richard Hughes <rhughes@redhat.com> - 3.35.2-1
- Update to 3.35.2.
* Fri Oct 18 2019 Kalev Lember <klember@redhat.com> - 3.34.1-6
- Backport patches to fix a crash in gs_flatpak_get_installation (#1762689)
* Mon Oct 14 2019 Kalev Lember <klember@redhat.com> - 3.34.1-5
- Update renamed appstream ids for GNOME 3.34
* 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
- Backport a better patch to correct the installed applications
- Resolves #1759193
* Thu Oct 10 2019 Richard Hughes <rhughes@redhat.com> - 3.34.1-2
- Backport a patch to correct the applications shown in the installed list
- Resolves #1759193
* Mon Oct 07 2019 Kalev Lember <klember@redhat.com> - 3.34.1-1
- Update to 3.34.1
* Wed Sep 25 2019 Kalev Lember <klember@redhat.com> - 3.34.0-2
- Fix third party repo enabling not working (#1749566)
* Mon Sep 09 2019 Kalev Lember <klember@redhat.com> - 3.34.0-1
- Update to 3.34.0
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.32.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jul 11 2019 Kalev Lember <klember@redhat.com> - 3.32.4-1
- Update to 3.32.4
* Thu Jul 11 2019 Richard Hughes <rhughes@redhat.com> - 3.32.3-5
- Disable the snap plugin. Canonical upstream are not going to be installing
gnome-software in the next LTS, prefering instead to ship a "Snap Store"
rather than GNOME Software.
- Enabling the snap plugin also enables the Snap Store which violated the same
rules which prevented us installing Flathub by default.
- The existing plugin is barely maintained and I don't want to be the one
responsible when it breaks.
* Thu Jun 13 2019 Kalev Lember <klember@redhat.com> - 3.32.3-4
- Rebuild for accidental libflatpak ABI break
* Mon Jun 10 22:13:19 CET 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 3.32.3-3
- Rebuild for RPM 4.15
* Mon Jun 10 15:42:01 CET 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 3.32.3-2
- Rebuild for RPM 4.15
* Fri May 24 2019 Kalev Lember <klember@redhat.com> - 3.32.3-1
- Update to 3.32.3
* Tue May 07 2019 Kalev Lember <klember@redhat.com> - 3.32.2-1
- Update to 3.32.2
* Fri May 03 2019 Kalev Lember <klember@redhat.com> - 3.32.1-4
- Update a patch to final upstream version
* Tue Apr 30 2019 Kalev Lember <klember@redhat.com> - 3.32.1-3
- Backport a number of rpm-ostree fixes
* Tue Apr 16 2019 Adam Williamson <awilliam@redhat.com> - 3.32.1-2
- Rebuild with Meson fix for #1699099
* Mon Apr 15 2019 Kalev Lember <klember@redhat.com> - 3.32.1-1
- Update to 3.32.1
* Fri Apr 05 2019 Neal Gompa <ngompa13@gmail.com> - 3.32.0-6
- Require snapd instead of the obsolete snapd-login-service for snap subpackage
* Wed Apr 03 2019 Kalev Lember <klember@redhat.com> - 3.32.0-5
- Switch to system libdnf
* Fri Mar 29 2019 Kalev Lember <klember@redhat.com> - 3.32.0-4
- Rebuild for new rpm-ostree
* Fri Mar 15 2019 Kalev Lember <klember@redhat.com> - 3.32.0-3
- Add nm-connection-editor.desktop to Utilities folder (#1686851)
* Tue Mar 12 2019 Kalev Lember <klember@redhat.com> - 3.32.0-2
- Backport a patch to add shadows to app icons
* Mon Mar 11 2019 Kalev Lember <klember@redhat.com> - 3.32.0-1
- Update to 3.32.0
* Tue Mar 05 2019 Kalev Lember <klember@redhat.com> - 3.31.92-1
- Update to 3.31.92
* Thu Feb 28 2019 Kalev Lember <klember@redhat.com> - 3.31.90-4
- Change PackageKit requires to recommends
* Wed Feb 27 2019 Kalev Lember <klember@redhat.com> - 3.31.90-3
- Remove unneeded dpkg plugin
* Mon Feb 25 2019 Kalev Lember <klember@redhat.com> - 3.31.90-2
- Split rpm-ostree backend to its own subpackage
* Sun Feb 24 2019 Kalev Lember <klember@redhat.com> - 3.31.90-1
- Update to 3.31.90
- Add "anaconda" repo to official repos list (#1679693)
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.31.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Jan 16 2019 Kalev Lember <klember@redhat.com> - 3.31.2-1
- Update to 3.31.2
* Fri Dec 14 2018 Kalev Lember <klember@redhat.com> - 3.31.1-2
- Fix offline update notifications to show up (#1659231)
* Tue Oct 09 2018 Kalev Lember <klember@redhat.com> - 3.31.1-1
- Update to 3.31.1
* Fri Oct 05 2018 Kalev Lember <klember@redhat.com> - 3.30.2-1
- Update to 3.30.2
* Wed Sep 26 2018 Kalev Lember <klember@redhat.com> - 3.30.1-2
- Add modular repos to official repos list
* Tue Sep 25 2018 Kalev Lember <klember@redhat.com> - 3.30.1-1
- Update to 3.30.1
* Thu Sep 06 2018 Kalev Lember <klember@redhat.com> - 3.30.0-1
- Update to 3.30.0
* Tue Aug 28 2018 Richard Hughes <rhughes@redhat.com> - 3.29.92-1
- Update to 3.29.92
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.29.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Wed May 09 2018 Kalev Lember <klember@redhat.com> - 3.29.1-1
- Update to 3.29.1
* Mon Apr 09 2018 Kalev Lember <klember@redhat.com> - 3.28.1-1
- Update to 3.28.1