diff --git a/_service b/_service new file mode 100644 index 0000000..4594d71 --- /dev/null +++ b/_service @@ -0,0 +1,19 @@ + + + + git + https://gitlab.gnome.org/GNOME/gnome-software.git + 46.0 + @PARENT_TAG@+@TAG_OFFSET@ + (.*)\+0 + \1 + + + + + *.tar + zst + + + + diff --git a/gnome-software-45.2.tar.xz b/gnome-software-45.2.tar.xz deleted file mode 100644 index de4e263..0000000 --- a/gnome-software-45.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0bdd8fc0caecd6eb013c6010dbca93077397118a6ef5eaf264e2a820a292f5b7 -size 2475796 diff --git a/gnome-software-46.0.obscpio b/gnome-software-46.0.obscpio new file mode 100644 index 0000000..411f874 --- /dev/null +++ b/gnome-software-46.0.obscpio @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92117bf4ebd23b8bc215644d061ebf48b36d22128e223442263fedc4458210e4 +size 19801613 diff --git a/gnome-software-plugin-opensuse-distro-upgrade.patch b/gnome-software-plugin-opensuse-distro-upgrade.patch deleted file mode 100644 index 7404fa8..0000000 --- a/gnome-software-plugin-opensuse-distro-upgrade.patch +++ /dev/null @@ -1,697 +0,0 @@ -From 98ba5798c34db0f683312a5424489efa40fea426 Mon Sep 17 00:00:00 2001 -From: Jonathan Kang -Date: Tue, 22 Nov 2022 09:21:19 +0800 -Subject: [PATCH] plugins: add opensuse-distro-upgrade plugin - ---- - plugins/meson.build | 1 + - .../gs-plugin-opensuse-distro-upgrade.c | 616 ++++++++++++++++++ - .../gs-plugin-opensuse-distro-upgrade.h | 19 + - plugins/opensuse-distro-upgrade/meson.build | 14 + - 4 files changed, 650 insertions(+) - create mode 100644 plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.c - create mode 100644 plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.h - create mode 100644 plugins/opensuse-distro-upgrade/meson.build - -diff --git a/plugins/meson.build b/plugins/meson.build -index 711b488e2..16c1eb753 100644 ---- a/plugins/meson.build -+++ b/plugins/meson.build -@@ -12,6 +12,7 @@ subdir('dpkg') - subdir('dummy') - subdir('fedora-langpacks') - subdir('fedora-pkgdb-collections') -+subdir('opensuse-distro-upgrade') - - if get_option('eos_updater') - subdir('eos-updater') -diff --git a/plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.c b/plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.c -new file mode 100644 -index 000000000..46de82d02 ---- /dev/null -+++ b/plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.c -@@ -0,0 +1,616 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- -+ * -+ * Copyright (C) 2020 Jonathan Kang -+ * -+ * SPDX-License-Identifier: GPL-2.0+ -+ */ -+ -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include "gs-plugin-opensuse-distro-upgrade.h" -+ -+#define OPENSUSE_DISTRO_UPGRADE_API_URI "https://get.opensuse.org/api/v0/distributions.json" -+ -+struct _GsPluginOpensuseDistroUpgrade { -+ GsPlugin Parent; -+ -+ gchar *os_name; -+ gchar *os_version; -+ guint64 upgrade_weight; -+ -+ gchar *cachefn; -+ GFileMonitor *cachefn_monitor; -+ GsApp *cached_origin; -+ gboolean is_valid; -+ GPtrArray *distros; -+}; -+ -+typedef enum { -+ DISTRO_UPGRADE_ITEM_STATE_ALPHA, -+ DISTRO_UPGRADE_ITEM_STATE_BETA, -+ DISTRO_UPGRADE_ITEM_STATE_STABLE, -+ DISTRO_UPGRADE_ITEM_STATE_EOL, -+ DISTRO_UPGRADE_ITEM_STATE_LAST, -+} DistroUpgradeItemState; -+ -+typedef struct { -+ gchar *name; -+ gchar *version; -+ DistroUpgradeItemState state; -+ guint upgrade_weight; -+} DistroUpgradeItem; -+ -+G_DEFINE_TYPE (GsPluginOpensuseDistroUpgrade, gs_plugin_opensuse_distro_upgrade, GS_TYPE_PLUGIN) -+ -+static gboolean -+_is_valid_upgrade (GsPluginOpensuseDistroUpgrade *self, -+ DistroUpgradeItem *item) -+{ -+ guint diff; -+ -+ if (item->state != DISTRO_UPGRADE_ITEM_STATE_STABLE) -+ return FALSE; -+ -+ diff = item->upgrade_weight - self->upgrade_weight; -+ if (diff == 1) -+ return TRUE; -+ else -+ return FALSE; -+} -+ -+static GsApp * -+_create_upgrade_app (GsPluginOpensuseDistroUpgrade *self, -+ DistroUpgradeItem *item) -+{ -+ GsApp *app; -+ g_autofree gchar *app_id = NULL; -+ g_autofree gchar *app_version = NULL; -+ g_autofree gchar *background = NULL; -+ g_autofree gchar *cache_key = NULL; -+ g_autofree gchar *css = NULL; -+ g_autofree gchar *url = NULL; -+ g_autoptr(GFile) icon_file = NULL; -+ g_autoptr(GIcon) ic = NULL; -+ -+ cache_key = g_strdup_printf ("leap-%s", item->version); -+ app = gs_plugin_cache_lookup (GS_PLUGIN (self), cache_key); -+ -+ app_id = g_strdup_printf ("org.openSUSE.Leap-%s", item->version); -+ app_version = g_strdup (item->version); -+ -+ /* icon from disk */ -+ icon_file = g_file_new_for_path ("/usr/share/pixmaps/distribution-logos/square-symbolic.svg"); -+ ic = g_file_icon_new (icon_file); -+ -+ app = gs_app_new (app_id); -+ gs_app_set_state (app, GS_APP_STATE_AVAILABLE); -+ gs_app_set_kind (app, AS_COMPONENT_KIND_OPERATING_SYSTEM); -+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE); -+ gs_app_set_name (app, GS_APP_QUALITY_LOWEST, item->name); -+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, -+ _("Upgrade for the latest features, performance and stability improvements.")); -+ gs_app_set_version (app, app_version); -+ gs_app_set_size_installed (app, GS_SIZE_TYPE_UNKNOWABLE, 0); -+ gs_app_set_size_download (app, GS_SIZE_TYPE_UNKNOWABLE, 0); -+ gs_app_set_license (app, GS_APP_QUALITY_LOWEST, "LicenseRef-free"); -+ gs_app_add_quirk (app, GS_APP_QUIRK_NEEDS_REBOOT); -+ gs_app_add_quirk (app, GS_APP_QUIRK_PROVENANCE); -+ gs_app_add_quirk (app, GS_APP_QUIRK_NOT_REVIEWABLE); -+ gs_app_add_icon (app, ic); -+ -+ /* Save it in the cache. */ -+ gs_plugin_cache_add (GS_PLUGIN (self), cache_key, app); -+ -+ return app; -+} -+ -+static void -+_distro_upgrade_item_destroy (DistroUpgradeItem *item) -+{ -+ g_free (item->name); -+ g_free (item->version); -+ g_slice_free (DistroUpgradeItem, item); -+} -+ -+static GPtrArray * -+load_json (GsPluginOpensuseDistroUpgrade *self, -+ GError **error) -+{ -+ JsonArray *distros; -+ JsonNode *root_node; -+ JsonObject *root = NULL; -+ g_autoptr(JsonParser) parser = NULL; -+ g_autoptr(GPtrArray) new_distros = NULL; -+ -+ new_distros = g_ptr_array_new_with_free_func ((GDestroyNotify) _distro_upgrade_item_destroy); -+ parser = json_parser_new_immutable (); -+ -+ if (!json_parser_load_from_mapped_file (parser, self->cachefn, error)) -+ return NULL; -+ -+ root_node = json_parser_get_root (parser); -+ if (root_node != NULL && JSON_NODE_HOLDS_OBJECT (root_node)) -+ root = json_node_get_object (root_node); -+ if (root == NULL) { -+ g_set_error (error, -+ GS_PLUGIN_ERROR, -+ GS_PLUGIN_ERROR_INVALID_FORMAT, -+ "no root object"); -+ return NULL; -+ } -+ -+ distros = json_object_get_array_member (root, "Leap"); -+ if (distros == NULL) { -+ g_set_error (error, -+ GS_PLUGIN_ERROR, -+ GS_PLUGIN_ERROR_INVALID_FORMAT, -+ "No array member named \"Leap\"."); -+ return NULL; -+ } -+ -+ for (guint i = 0; i < json_array_get_length (distros); i++) { -+ DistroUpgradeItem *item; -+ DistroUpgradeItemState state; -+ JsonObject *distro; -+ const gchar *name; -+ const gchar *version; -+ const gchar *state_str; -+ guint upgrade_weight; -+ -+ distro = json_array_get_object_element (distros, i); -+ if (distro == NULL) -+ continue; -+ -+ name = json_object_get_string_member (distro, "name"); -+ if (name == NULL) -+ continue; -+ -+ version = json_object_get_string_member (distro, "version"); -+ if (version == NULL) -+ continue; -+ -+ state_str = json_object_get_string_member (distro, "state"); -+ if (state_str == NULL) -+ continue; -+ if (g_strcmp0 (state_str, "Alpha") == 0) -+ state = DISTRO_UPGRADE_ITEM_STATE_ALPHA; -+ else if (g_strcmp0 (state_str, "Beta") == 0) -+ state = DISTRO_UPGRADE_ITEM_STATE_BETA; -+ else if (g_strcmp0 (state_str, "Stable") == 0) -+ state = DISTRO_UPGRADE_ITEM_STATE_STABLE; -+ else if (g_strcmp0 (state_str, "EOL") == 0) -+ state = DISTRO_UPGRADE_ITEM_STATE_EOL; -+ else -+ continue; -+ -+ upgrade_weight = json_object_get_int_member (distro, "upgrade-weight"); -+ -+ /* Set upgrade weight for current OS. */ -+ if (g_strcmp0 (self->os_version, version) == 0) -+ self->upgrade_weight = upgrade_weight; -+ -+ /* add item */ -+ item = g_slice_new0 (DistroUpgradeItem); -+ item->name = g_strdup (name); -+ item->version = g_strdup (version); -+ item->state = state; -+ item->upgrade_weight = upgrade_weight; -+ g_ptr_array_add (self->distros, item); -+ } -+ -+ /* success */ -+ g_clear_pointer (&self->distros, g_ptr_array_unref); -+ self->distros = g_ptr_array_ref (new_distros); -+ self->is_valid = TRUE; -+ -+ return g_steal_pointer (&new_distros); -+} -+ -+static void -+download_cb (GObject *source_object, -+ GAsyncResult *result, -+ gpointer user_data) -+{ -+ SoupSession *soup_session = SOUP_SESSION (source_object); -+ g_autoptr(GTask) task = g_steal_pointer (&user_data); -+ GsPluginOpensuseDistroUpgrade *self = g_task_get_source_object (task); -+ g_autoptr(GError) local_error = NULL; -+ -+ if (!gs_download_file_finish (soup_session, result, &local_error) && -+ !g_error_matches (local_error, GS_DOWNLOAD_ERROR, GS_DOWNLOAD_ERROR_NOT_MODIFIED)) { -+ g_autoptr(GError) wrapped_error = NULL; -+ -+ /* Wrap in a GsPluginError. */ -+ g_set_error_literal (&wrapped_error, -+ GS_PLUGIN_ERROR, -+ GS_PLUGIN_ERROR_DOWNLOAD_FAILED, -+ local_error->message); -+ -+ gs_utils_error_add_origin_id (&wrapped_error, self->cached_origin); -+ g_task_return_error (task, g_steal_pointer (&wrapped_error)); -+ return; -+ } -+ -+ /* success */ -+ self->is_valid = FALSE; -+ -+ g_task_return_boolean (task, TRUE); -+} -+ -+static void -+_refresh_cache_async (GsPluginOpensuseDistroUpgrade *self, -+ guint64 cache_age_secs, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ GsPlugin *plugin = GS_PLUGIN (self); -+ g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin)); -+ g_autoptr(GTask) task = NULL; -+ g_autoptr(GFile) output_file = g_file_new_for_path (self->cachefn); -+ g_autoptr(SoupSession) soup_session = NULL; -+ -+ task = g_task_new (self, cancellable, callback, user_data); -+ g_task_set_source_tag (task, _refresh_cache_async); -+ -+ /* check cache age */ -+ if (cache_age_secs > 0) { -+ guint64 tmp = gs_utils_get_file_age (output_file); -+ if (tmp < cache_age_secs) { -+ g_debug ("%s is only %" G_GUINT64_FORMAT " seconds old", -+ self->cachefn, tmp); -+ g_task_return_boolean (task, TRUE); -+ return; -+ } -+ } -+ -+ /* download new file */ -+ gs_app_set_summary_missing (app_dl, -+ /* TRANSLATORS: status text when downloading */ -+ _("Downloading upgrade information…")); -+ -+ soup_session = gs_build_soup_session (); -+ -+ gs_download_file_async (soup_session, -+ OPENSUSE_DISTRO_UPGRADE_API_URI, -+ output_file, -+ G_PRIORITY_LOW, -+ NULL, NULL, /* FIXME: progress reporting */ -+ cancellable, -+ download_cb, -+ g_steal_pointer (&task)); -+} -+ -+static gboolean -+_refresh_cache_finish (GsPluginOpensuseDistroUpgrade *self, -+ GAsyncResult *result, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (result), error); -+} -+ -+static void -+ensure_refresh_cb (GObject *source_object, -+ GAsyncResult *result, -+ gpointer user_data) -+{ -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (source_object); -+ g_autoptr(GTask) task = g_steal_pointer (&user_data); -+ g_autoptr(GPtrArray) distros = NULL; -+ g_autoptr(GError) local_error = NULL; -+ -+ if (!_refresh_cache_finish (self, result, &local_error)) { -+ g_task_return_error (task, g_steal_pointer (&local_error)); -+ return; -+ } -+ -+ distros = load_json (self, &local_error); -+ if (distros == NULL) { -+ g_autoptr(GFile) cache_file = g_file_new_for_path (self->cachefn); -+ -+ g_debug ("Failed to load cache file ‘%s’, deleting it", self->cachefn); -+ g_file_delete (cache_file, NULL, NULL); -+ -+ g_task_return_error (task, g_steal_pointer (&local_error)); -+ return; -+ } -+ -+ g_task_return_pointer (task, g_steal_pointer (&distros), (GDestroyNotify) g_ptr_array_unref); -+} -+ -+/* This will return a strong reference to the latest distros -+ * #GPtrArray. The caller should use this in their computation. */ -+static void -+_ensure_cache_async (GsPluginOpensuseDistroUpgrade *self, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ g_autoptr(GTask) task = NULL; -+ -+ task = g_task_new (self, cancellable, callback, user_data); -+ g_task_set_source_tag (task, _ensure_cache_async); -+ -+ /* already done */ -+ if (self->is_valid) { -+ g_task_return_pointer (task, g_ptr_array_ref (self->distros), (GDestroyNotify) g_ptr_array_unref); -+ return; -+ } -+ -+ /* Ensure there is any data, no matter how old. This can download from -+ * the network if needed. */ -+ _refresh_cache_async (self, G_MAXUINT, cancellable, -+ ensure_refresh_cb, g_steal_pointer (&task)); -+} -+ -+static GPtrArray * -+_ensure_cache_finish (GsPluginOpensuseDistroUpgrade *self, -+ GAsyncResult *result, -+ GError **error) -+{ -+ return g_task_propagate_pointer (G_TASK (result), error); -+} -+ -+static void -+list_distro_upgrades_cb (GObject *source_object, -+ GAsyncResult *result, -+ gpointer user_data) -+{ -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (source_object); -+ g_autoptr(GTask) task = g_steal_pointer (&user_data); -+ g_autoptr(GPtrArray) distros = NULL; -+ g_autoptr(GsAppList) list = NULL; -+ g_autoptr(GError) local_error = NULL; -+ -+ distros = _ensure_cache_finish (self, result, &local_error); -+ if (distros == NULL) { -+ g_task_return_error (task, g_steal_pointer (&local_error)); -+ return; -+ } -+ -+ /* are any distros upgradable */ -+ list = gs_app_list_new (); -+ -+ for (guint i = 0; i < distros->len; i++) { -+ DistroUpgradeItem *item; -+ -+ item = g_ptr_array_index (self->distros, i); -+ if (_is_valid_upgrade (self, item)) { -+ g_autoptr(GsApp) app = NULL; -+ -+ app = _create_upgrade_app (self, item); -+ gs_app_list_add (list, app); -+ -+ break; -+ } -+ } -+ -+ g_task_return_pointer (task, g_steal_pointer (&list), g_object_unref); -+} -+ -+static void -+gs_plugin_opensuse_distro_upgrade_list_distro_upgrades_async (GsPlugin *plugin, -+ GsPluginListDistroUpgradesFlags flags, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ g_autoptr(GTask) task = NULL; -+ g_autoptr(GsAppList) list = gs_app_list_new (); -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (plugin); -+ -+ task = g_task_new (plugin, cancellable, callback, user_data); -+ g_task_set_source_tag (task, gs_plugin_opensuse_distro_upgrade_list_distro_upgrades_async); -+ -+ /* Ensure valid data is loaded. */ -+ _ensure_cache_async (self, cancellable, list_distro_upgrades_cb, g_steal_pointer (&task)); -+ -+ g_task_return_pointer (task, g_steal_pointer (&list), g_object_unref); -+} -+ -+static GsAppList * -+gs_plugin_opensuse_distro_upgrade_list_distro_upgrades_finish (GsPlugin *plugin, -+ GAsyncResult *result, -+ GError **error) -+{ -+ return g_task_propagate_pointer (G_TASK (result), error); -+} -+ -+static void -+gs_plugin_opensuse_distro_upgrade_dispose (GObject *object) -+{ -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (object); -+ -+ g_clear_object (&self->cachefn_monitor); -+ g_clear_object (&self->cached_origin); -+ -+ G_OBJECT_CLASS (gs_plugin_opensuse_distro_upgrade_parent_class)->dispose (object); -+} -+ -+static void -+gs_plugin_opensuse_distro_upgrade_finalize (GObject *object) -+{ -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (object); -+ -+ g_clear_pointer (&self->distros, g_ptr_array_unref); -+ g_clear_pointer (&self->os_name, g_free); -+ g_clear_pointer (&self->os_version, g_free); -+ g_clear_pointer (&self->cachefn, g_free); -+ -+ G_OBJECT_CLASS (gs_plugin_opensuse_distro_upgrade_parent_class)->finalize (object); -+} -+ -+static void -+_file_changed_cb (GFileMonitor *monitor, -+ GFile *file, -+ GFile *other_file, -+ GFileMonitorEvent event_type, -+ gpointer user_data) -+{ -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (user_data); -+ -+ g_debug ("cache file changed, so reloading upgrades list"); -+ gs_plugin_updates_changed (GS_PLUGIN (self)); -+ -+ self->is_valid = FALSE; -+} -+ -+static void -+gs_plugin_opensuse_distro_upgrade_setup_async (GsPlugin *plugin, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (plugin); -+ g_autoptr(GFile) file = NULL; -+ g_autoptr(GsOsRelease) os_release = NULL; -+ g_autoptr(GTask) task = NULL; -+ g_autoptr(GError) local_error = NULL; -+ -+ task = g_task_new (plugin, cancellable, callback, user_data); -+ g_task_set_source_tag (task, gs_plugin_opensuse_distro_upgrade_setup_async); -+ -+ /* get the file to cache */ -+ self->cachefn = gs_utils_get_cache_filename ("opensuse-distro-upgrade", -+ "distributions.json", -+ GS_UTILS_CACHE_FLAG_WRITEABLE | -+ GS_UTILS_CACHE_FLAG_CREATE_DIRECTORY, -+ &local_error); -+ if (self->cachefn == NULL) { -+ g_task_return_error (task, g_steal_pointer (&local_error)); -+ return; -+ } -+ -+ /* watch this in case it is changed by the user */ -+ file = g_file_new_for_path (self->cachefn); -+ self->cachefn_monitor = g_file_monitor (file, -+ G_FILE_MONITOR_NONE, -+ cancellable, -+ &local_error); -+ if (self->cachefn_monitor == NULL) { -+ g_task_return_error (task, g_steal_pointer (&local_error)); -+ return; -+ } -+ -+ g_signal_connect (self->cachefn_monitor, "changed", -+ G_CALLBACK (_file_changed_cb), plugin); -+ -+ /* read os-release for the current versions */ -+ os_release = gs_os_release_new (&local_error); -+ if (os_release == NULL) { -+ g_task_return_error (task, g_steal_pointer (&local_error)); -+ return; -+ } -+ -+ self->os_name = g_strdup (gs_os_release_get_name (os_release)); -+ if (self->os_name == NULL) { -+ g_task_return_new_error (task, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, -+ "OS release had no name"); -+ return; -+ } -+ self->os_version = g_strdup (gs_os_release_get_version_id (os_release)); -+ if (self->os_version == NULL) { -+ g_task_return_new_error (task, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, -+ "OS release had no version ID"); -+ return; -+ } -+ -+ /* add source */ -+ self->cached_origin = gs_app_new (gs_plugin_get_name (plugin)); -+ gs_app_set_kind (self->cached_origin, AS_COMPONENT_KIND_REPOSITORY); -+ gs_app_set_origin_hostname (self->cached_origin, -+ OPENSUSE_DISTRO_UPGRADE_API_URI); -+ gs_app_set_management_plugin (self->cached_origin, plugin); -+ -+ /* add the source to the plugin cache which allows us to match the -+ * unique ID to a GsApp when creating an event */ -+ gs_plugin_cache_add (plugin, -+ gs_app_get_unique_id (self->cached_origin), -+ self->cached_origin); -+ -+ /* success */ -+ g_task_return_boolean (task, TRUE); -+} -+ -+static gboolean -+gs_plugin_opensuse_distro_upgrade_setup_finish (GsPlugin *plugin, -+ GAsyncResult *result, -+ GError **error) -+{ -+ return g_task_propagate_boolean (G_TASK (result), error); -+} -+ -+static void -+gs_plugin_opensuse_distro_upgrade_refresh_metadata_async (GsPlugin *plugin, -+ guint64 cache_age_secs, -+ GsPluginRefreshMetadataFlags flags, -+ GCancellable *cancellable, -+ GAsyncReadyCallback callback, -+ gpointer user_data) -+{ -+ GsPluginOpensuseDistroUpgrade *self = GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (plugin); -+ _refresh_cache_async (self, cache_age_secs, cancellable, callback, user_data); -+} -+ -+static gboolean -+gs_plugin_opensuse_distro_upgrade_refresh_metadata_finish (GsPlugin *plugin, -+ GAsyncResult *result, -+ GError **error) -+{ -+ return _refresh_cache_finish (GS_PLUGIN_OPENSUSE_DISTRO_UPGRADE (plugin), -+ result, -+ error); -+} -+ -+static void -+gs_plugin_opensuse_distro_upgrade_init (GsPluginOpensuseDistroUpgrade *self) -+{ -+ GsPlugin *plugin = GS_PLUGIN (self); -+ -+ /* We don't need distribution upgrade banner for Tumbleweed. */ -+ if (gs_plugin_check_distro_id (plugin, "opensuse-tumbleweed")) { -+ gs_plugin_set_enabled (plugin, FALSE); -+ g_debug ("Disabeling '%s' as this is not needed in Tumbleweed.", gs_plugin_get_name (plugin)); -+ return; -+ } -+ -+ /* Check if we are running openSUSE Leap. */ -+ if (!gs_plugin_check_distro_id (plugin, "opensuse-leap")) { -+ gs_plugin_set_enabled (plugin, FALSE); -+ g_debug ("Disabling '%s' as it's only supported in openSUSE Leap", gs_plugin_get_name (plugin)); -+ return; -+ } -+ -+ self->distros = g_ptr_array_new_with_free_func ((GDestroyNotify) _distro_upgrade_item_destroy); -+ -+ /* require the GnomeSoftware::CpeName metadata */ -+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "os-release"); -+} -+ -+static void -+gs_plugin_opensuse_distro_upgrade_class_init (GsPluginOpensuseDistroUpgradeClass *klass) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS (klass); -+ GsPluginClass *plugin_class = GS_PLUGIN_CLASS (klass); -+ -+ object_class->dispose = gs_plugin_opensuse_distro_upgrade_dispose; -+ object_class->finalize = gs_plugin_opensuse_distro_upgrade_finalize; -+ -+ plugin_class->setup_async = gs_plugin_opensuse_distro_upgrade_setup_async; -+ plugin_class->setup_finish = gs_plugin_opensuse_distro_upgrade_setup_finish; -+ plugin_class->refresh_metadata_async = gs_plugin_opensuse_distro_upgrade_refresh_metadata_async; -+ plugin_class->refresh_metadata_finish = gs_plugin_opensuse_distro_upgrade_refresh_metadata_finish; -+ plugin_class->list_distro_upgrades_async = gs_plugin_opensuse_distro_upgrade_list_distro_upgrades_async; -+ plugin_class->list_distro_upgrades_finish = gs_plugin_opensuse_distro_upgrade_list_distro_upgrades_finish; -+} -+ -+GType -+gs_plugin_query_type (void) -+{ -+ return GS_TYPE_PLUGIN_OPENSUSE_DISTRO_UPGRADE; -+} -diff --git a/plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.h b/plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.h -new file mode 100644 -index 000000000..5b1763c05 ---- /dev/null -+++ b/plugins/opensuse-distro-upgrade/gs-plugin-opensuse-distro-upgrade.h -@@ -0,0 +1,19 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- -+ * -+ * Copyright (C) 2020 Jonathan Kang -+ * -+ * SPDX-License-Identifier: GPL-2.0+ -+ */ -+ -+#pragma once -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+ -+#define GS_TYPE_PLUGIN_OPENSUSE_DISTRO_UPGRADE (gs_plugin_opensuse_distro_upgrade_get_type ()) -+ -+G_DECLARE_FINAL_TYPE (GsPluginOpensuseDistroUpgrade, gs_plugin_opensuse_distro_upgrade, GS, PLUGIN_OPENSUSE_DISTRO_UPGRADE, GsPlugin) -+ -+G_END_DECLS -diff --git a/plugins/opensuse-distro-upgrade/meson.build b/plugins/opensuse-distro-upgrade/meson.build -new file mode 100644 -index 000000000..bc09af9b4 ---- /dev/null -+++ b/plugins/opensuse-distro-upgrade/meson.build -@@ -0,0 +1,14 @@ -+cargs = ['-DG_LOG_DOMAIN="GsPluginOpensuseDistroUpgrade"'] -+ -+shared_module( -+ 'gs_plugin_opensuse-distro-upgrade', -+ sources : 'gs-plugin-opensuse-distro-upgrade.c', -+ include_directories : [ -+ include_directories('../..'), -+ include_directories('../../lib') -+ ], -+ install : true, -+ install_dir : plugin_dir, -+ c_args : cargs, -+ dependencies : plugin_libs, -+) --- -2.37.3 - diff --git a/gnome-software-support-appstream-1_0.patch b/gnome-software-support-appstream-1_0.patch deleted file mode 100644 index 2aa36ab..0000000 --- a/gnome-software-support-appstream-1_0.patch +++ /dev/null @@ -1,511 +0,0 @@ -Support building with appstream 0.16 and 1.0 -Origin: https://gitlab.gnome.org/GNOME/gnome-software/-/merge_requests/1810 - https://gitlab.gnome.org/GNOME/gnome-software/-/merge_requests/1830 - ---- - lib/gs-app.c | 4 ++ - lib/gs-appstream.c | 63 +++++++++++++++++++----- - lib/gs-utils.c | 8 +-- - meson.build | 22 +-------- - plugins/core/gs-plugin-appstream.c | 8 --- - plugins/fwupd/gs-fwupd-app.c | 8 +++ - plugins/fwupd/gs-plugin-fwupd.c | 4 ++ - src/gs-hardware-support-context-dialog.c | 6 +++ - src/gs-repos-dialog.c | 4 ++ - src/gs-screenshot-carousel.c | 4 +- - src/gs-screenshot-image.c | 41 +++++++++++---- - src/gs-screenshot-image.h | 7 +++ - subprojects/appstream.wrap | 2 +- - 13 files changed, 122 insertions(+), 59 deletions(-) - -diff --git a/lib/gs-app.c b/lib/gs-app.c -index 048a061..e269405 100644 ---- a/lib/gs-app.c -+++ b/lib/gs-app.c -@@ -609,7 +609,11 @@ gs_app_to_string_append (GsApp *app, GString *str) - AsScreenshot *ss = g_ptr_array_index (priv->screenshots, i); - g_autofree gchar *key = NULL; - tmp = as_screenshot_get_caption (ss); -+#if AS_CHECK_VERSION(1, 0, 0) -+ im = as_screenshot_get_image (ss, 0, 0, 1); -+#else - im = as_screenshot_get_image (ss, 0, 0); -+#endif - if (im == NULL) - continue; - key = g_strdup_printf ("screenshot-%02u", i); -diff --git a/lib/gs-appstream.c b/lib/gs-appstream.c -index deca176..4fd7f53 100644 ---- a/lib/gs-appstream.c -+++ b/lib/gs-appstream.c -@@ -587,8 +587,6 @@ gs_appstream_refine_add_provides (GsApp *app, XbNode *component, GError **error) - kind = AS_PROVIDED_KIND_FIRMWARE_RUNTIME; - else if (g_strcmp0 (fw_type, "flashed") == 0) - kind = AS_PROVIDED_KIND_FIRMWARE_FLASHED; -- } else if (g_strcmp0 (element_name, "python2") == 0) { -- kind = AS_PROVIDED_KIND_PYTHON_2; - } else if (g_strcmp0 (element_name, "python3") == 0) { - kind = AS_PROVIDED_KIND_PYTHON; - } else if (g_strcmp0 (element_name, "dbus") == 0) { -@@ -1011,8 +1009,11 @@ gs_appstream_refine_app_relation (GsApp *app, - as_relation_set_item_kind (relation, AS_RELATION_ITEM_KIND_CONTROL); - as_relation_set_value_control_kind (relation, as_control_kind_from_string (xb_node_get_text (child))); - } else if (g_str_equal (item_kind, "display_length")) { -- AsDisplayLengthKind display_length_kind; - const gchar *compare; -+ const gchar *side; -+#if !AS_CHECK_VERSION(1, 0, 0) -+ AsDisplayLengthKind display_length_kind; -+#endif - - /* https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-relations-display_length */ - as_relation_set_item_kind (relation, AS_RELATION_ITEM_KIND_DISPLAY_LENGTH); -@@ -1020,15 +1021,21 @@ gs_appstream_refine_app_relation (GsApp *app, - compare = xb_node_get_attr (child, "compare"); - as_relation_set_compare (relation, (compare != NULL) ? as_relation_compare_from_string (compare) : AS_RELATION_COMPARE_GE); - -+#if AS_CHECK_VERSION(1, 0, 0) -+ side = xb_node_get_attr (child, "side"); -+ as_relation_set_display_side_kind (relation, (side != NULL) ? as_display_side_kind_from_string (side) : AS_DISPLAY_SIDE_KIND_SHORTEST); -+ as_relation_set_value_px (relation, xb_node_get_text_as_uint (child)); -+#else - display_length_kind = as_display_length_kind_from_string (xb_node_get_text (child)); - if (display_length_kind != AS_DISPLAY_LENGTH_KIND_UNKNOWN) { - /* Ignore the `side` attribute */ - as_relation_set_value_display_length_kind (relation, display_length_kind); - } else { -- const gchar *side = xb_node_get_attr (child, "side"); -+ side = xb_node_get_attr (child, "side"); - as_relation_set_display_side_kind (relation, (side != NULL) ? as_display_side_kind_from_string (side) : AS_DISPLAY_SIDE_KIND_SHORTEST); - as_relation_set_value_px (relation, xb_node_get_text_as_uint (child)); - } -+#endif - } else { - g_debug ("Relation type ‘%s’ not currently supported for %s; ignoring", - item_kind, gs_app_get_id (app)); -@@ -1472,7 +1479,7 @@ gs_appstream_refine_app (GsPlugin *plugin, - } - - typedef struct { -- AsSearchTokenMatch match_value; -+ guint16 match_value; - XbQuery *query; - } GsAppstreamSearchHelper; - -@@ -1522,7 +1529,7 @@ gs_appstream_silo_search_component (GPtrArray *array, XbNode *component, const g - } - - typedef struct { -- AsSearchTokenMatch match_value; -+ guint16 match_value; - const gchar *xpath; - } Query; - -@@ -1539,6 +1546,11 @@ gs_appstream_do_search (GsPlugin *plugin, - g_autoptr(GPtrArray) array = g_ptr_array_new_with_free_func ((GDestroyNotify) gs_appstream_search_helper_free); - g_autoptr(GPtrArray) components = NULL; - g_autoptr(GTimer) timer = g_timer_new (); -+#if AS_CHECK_VERSION(1, 0, 0) -+ const guint16 component_id_weight = as_utils_get_tag_search_weight ("id"); -+#else -+ const guint16 component_id_weight = AS_SEARCH_TOKEN_MATCH_ID; -+#endif - - g_return_val_if_fail (GS_IS_PLUGIN (plugin), FALSE); - g_return_val_if_fail (XB_IS_SILO (silo), FALSE); -@@ -1585,7 +1597,7 @@ gs_appstream_do_search (GsPlugin *plugin, - * Drop the ID token from it as it’s the highest - * numeric value but isn’t visible to the user in the - * UI, which leads to confusing results ordering. */ -- gs_app_set_match_value (app, match_value & (~AS_SEARCH_TOKEN_MATCH_ID)); -+ gs_app_set_match_value (app, match_value & (~component_id_weight)); - gs_app_list_add (list, app); - - if (gs_app_get_kind (app) == AS_COMPONENT_KIND_ADDON) { -@@ -1624,18 +1636,32 @@ gs_appstream_search (GsPlugin *plugin, - GCancellable *cancellable, - GError **error) - { -+#if AS_CHECK_VERSION(1, 0, 0) -+ guint16 pkgname_weight = as_utils_get_tag_search_weight ("pkgname"); -+ guint16 name_weight = as_utils_get_tag_search_weight ("name"); -+ guint16 id_weight = as_utils_get_tag_search_weight ("id"); - const Query queries[] = { -- #ifdef HAVE_AS_SEARCH_TOKEN_MATCH_MEDIATYPE -- { AS_SEARCH_TOKEN_MATCH_MEDIATYPE, "mimetypes/mimetype[text()~=stem(?)]" }, -- #else -- { AS_SEARCH_TOKEN_MATCH_MIMETYPE, "mimetypes/mimetype[text()~=stem(?)]" }, -- #endif -+ { as_utils_get_tag_search_weight ("mediatype"), "provides/mediatype[text()~=stem(?)]" }, - /* Search once with a tokenize-and-casefold operator (`~=`) to support casefolded - * full-text search, then again using substring matching (`contains()`), to - * support prefix matching. Only do the prefix matches on a few fields, and at a - * lower priority, otherwise things will get confusing. -- * -+ * - * See https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2277 */ -+ { pkgname_weight, "pkgname[text()~=stem(?)]" }, -+ { pkgname_weight / 2, "pkgname[contains(text(),stem(?))]" }, -+ { as_utils_get_tag_search_weight ("summary"), "summary[text()~=stem(?)]" }, -+ { name_weight, "name[text()~=stem(?)]" }, -+ { name_weight / 2, "name[contains(text(),stem(?))]" }, -+ { as_utils_get_tag_search_weight ("keyword"), "keywords/keyword[text()~=stem(?)]" }, -+ { id_weight, "id[text()~=stem(?)]" }, -+ { id_weight, "launchable[text()~=stem(?)]" }, -+ { as_utils_get_tag_search_weight ("origin"), "../components[@origin~=stem(?)]" }, -+ { 0, NULL } -+ }; -+#else -+ const Query queries[] = { -+ { AS_SEARCH_TOKEN_MATCH_MEDIATYPE, "mimetypes/mimetype[text()~=stem(?)]" }, - { AS_SEARCH_TOKEN_MATCH_PKGNAME, "pkgname[text()~=stem(?)]" }, - { AS_SEARCH_TOKEN_MATCH_PKGNAME / 2, "pkgname[contains(text(),stem(?))]" }, - { AS_SEARCH_TOKEN_MATCH_SUMMARY, "summary[text()~=stem(?)]" }, -@@ -1647,6 +1673,7 @@ gs_appstream_search (GsPlugin *plugin, - { AS_SEARCH_TOKEN_MATCH_ORIGIN, "../components[@origin~=stem(?)]" }, - { AS_SEARCH_TOKEN_MATCH_NONE, NULL } - }; -+#endif - - return gs_appstream_do_search (plugin, silo, values, queries, list, cancellable, error); - } -@@ -1659,11 +1686,21 @@ gs_appstream_search_developer_apps (GsPlugin *plugin, - GCancellable *cancellable, - GError **error) - { -+#if AS_CHECK_VERSION(1, 0, 0) -+ const Query queries[] = { -+ { as_utils_get_tag_search_weight ("pkgname"), "developer/name[text()~=stem(?)]" }, -+ { as_utils_get_tag_search_weight ("summary"), "project_group[text()~=stem(?)]" }, -+ /* for legacy support */ -+ { as_utils_get_tag_search_weight ("pkgname"), "developer_name[text()~=stem(?)]" }, -+ { 0, NULL } -+ }; -+#else - const Query queries[] = { - { AS_SEARCH_TOKEN_MATCH_PKGNAME, "developer_name[text()~=stem(?)]" }, - { AS_SEARCH_TOKEN_MATCH_SUMMARY, "project_group[text()~=stem(?)]" }, - { AS_SEARCH_TOKEN_MATCH_NONE, NULL } - }; -+#endif - - return gs_appstream_do_search (plugin, silo, values, queries, list, cancellable, error); - } -diff --git a/lib/gs-utils.c b/lib/gs-utils.c -index cf90730..19e6ebd 100644 ---- a/lib/gs-utils.c -+++ b/lib/gs-utils.c -@@ -1694,9 +1694,9 @@ gs_utils_gstring_replace (GString *str, - const gchar *find, - const gchar *replace) - { -- #ifdef HAVE_AS_GSTRING_REPLACE_WITH_FOUR_ARGS -+#if AS_CHECK_VERSION(1, 0, 0) - as_gstring_replace (str, find, replace, 0); -- #else -- as_gstring_replace (str, find, replace); -- #endif -+#else -+ as_gstring_replace2 (str, find, replace, 0); -+#endif - } -diff --git a/meson.build b/meson.build -index da9e7ac..2cab9d6 100644 ---- a/meson.build -+++ b/meson.build -@@ -113,7 +113,7 @@ add_project_arguments('-D_GNU_SOURCE', language : 'c') - conf.set('HAVE_LINUX_UNISTD_H', cc.has_header('linux/unistd.h')) - - appstream = dependency('appstream', -- version : '>= 0.14.0', -+ version : '>= 0.16.4', - fallback : ['appstream', 'appstream_dep'], - default_options : [ - 'docs=false', -@@ -121,26 +121,6 @@ appstream = dependency('appstream', - 'install-docs=false' - ] - ) --if appstream.type_name() == 'internal' --else -- if meson.get_compiler('c').has_header_symbol('appstream.h', 'AS_SEARCH_TOKEN_MATCH_MEDIATYPE', dependencies: appstream) -- conf.set('HAVE_AS_SEARCH_TOKEN_MATCH_MEDIATYPE', '1') -- endif -- if meson.get_compiler('c').has_header_symbol('appstream.h', 'AS_FORMAT_STYLE_CATALOG', dependencies: appstream) -- conf.set('HAVE_AS_FORMAT_STYLE_CATALOG', '1') -- endif -- if meson.get_compiler('c').has_function('as_metadata_components_to_catalog', prefix: '#include ', dependencies: appstream) -- conf.set('HAVE_AS_METADATA_COMPONENTS_TO_CATALOG', '1') -- endif -- if meson.get_compiler('c').links('''#include -- int main (void) -- { -- as_gstring_replace (NULL, "a", "b", 0); -- return 0; -- }''', name: 'as_gstring_replace() has four arguments', dependencies: appstream) -- conf.set('HAVE_AS_GSTRING_REPLACE_WITH_FOUR_ARGS', '1') -- endif --endif - - gdk_pixbuf = dependency('gdk-pixbuf-2.0', version : '>= 2.32.0') - libxmlb = dependency('xmlb', version : '>= 0.1.7', fallback : ['libxmlb', 'libxmlb_dep']) -diff --git a/plugins/core/gs-plugin-appstream.c b/plugins/core/gs-plugin-appstream.c -index cf9f302..ef3226a 100644 ---- a/plugins/core/gs-plugin-appstream.c -+++ b/plugins/core/gs-plugin-appstream.c -@@ -414,11 +414,7 @@ gs_plugin_appstream_load_dep11_cb (XbBuilderSource *self, - if (bytes == NULL) - return NULL; - -- #ifdef HAVE_AS_FORMAT_STYLE_CATALOG - as_metadata_set_format_style (mdata, AS_FORMAT_STYLE_CATALOG); -- #else -- as_metadata_set_format_style (mdata, AS_FORMAT_STYLE_COLLECTION); -- #endif - as_metadata_parse_bytes (mdata, - bytes, - AS_FORMAT_KIND_YAML, -@@ -428,11 +424,7 @@ gs_plugin_appstream_load_dep11_cb (XbBuilderSource *self, - return NULL; - } - -- #ifdef HAVE_AS_METADATA_COMPONENTS_TO_CATALOG - xml = as_metadata_components_to_catalog (mdata, AS_FORMAT_KIND_XML, &tmp_error); -- #else -- xml = as_metadata_components_to_collection (mdata, AS_FORMAT_KIND_XML, &tmp_error); -- #endif - if (xml == NULL) { - // This API currently returns NULL if there is nothing to serialize, so we - // have to test if this is an error or not. -diff --git a/plugins/fwupd/gs-fwupd-app.c b/plugins/fwupd/gs-fwupd-app.c -index 6dcda6e..5d3254d 100644 ---- a/plugins/fwupd/gs-fwupd-app.c -+++ b/plugins/fwupd/gs-fwupd-app.c -@@ -164,7 +164,11 @@ gs_fwupd_app_set_from_device (GsApp *app, - gs_app_set_install_date (app, fwupd_device_get_created (dev)); - if (fwupd_device_get_description (dev) != NULL) { - g_autofree gchar *tmp = NULL; -+#if AS_CHECK_VERSION(1, 0, 0) -+ tmp = as_markup_convert (fwupd_device_get_description (dev), AS_MARKUP_KIND_TEXT, NULL); -+#else - tmp = as_markup_convert_simple (fwupd_device_get_description (dev), NULL); -+#endif - if (tmp != NULL) - gs_app_set_description (app, GS_APP_QUALITY_NORMAL, tmp); - } -@@ -402,7 +406,11 @@ gs_fwupd_app_set_from_release (GsApp *app, FwupdRelease *rel) - } - if (fwupd_release_get_description (rel) != NULL) { - g_autofree gchar *tmp = NULL; -+#if AS_CHECK_VERSION(1, 0, 0) -+ tmp = as_markup_convert (fwupd_release_get_description (rel), AS_MARKUP_KIND_TEXT, NULL); -+#else - tmp = as_markup_convert_simple (fwupd_release_get_description (rel), NULL); -+#endif - if (tmp != NULL) - gs_app_set_update_details_text (app, tmp); - } -diff --git a/plugins/fwupd/gs-plugin-fwupd.c b/plugins/fwupd/gs-plugin-fwupd.c -index e931b2b..0747d6e 100644 ---- a/plugins/fwupd/gs-plugin-fwupd.c -+++ b/plugins/fwupd/gs-plugin-fwupd.c -@@ -726,7 +726,11 @@ gs_plugin_add_updates (GsPlugin *plugin, - g_autofree gchar *desc = NULL; - if (fwupd_release_get_description (rel) == NULL) - continue; -+#if AS_CHECK_VERSION(1, 0, 0) -+ desc = as_markup_convert (fwupd_release_get_description (rel), AS_MARKUP_KIND_TEXT, NULL); -+#else - desc = as_markup_convert_simple (fwupd_release_get_description (rel), NULL); -+#endif - if (desc == NULL) - continue; - g_string_append_printf (update_desc, -diff --git a/src/gs-hardware-support-context-dialog.c b/src/gs-hardware-support-context-dialog.c -index 0e48c8c..1465340 100644 ---- a/src/gs-hardware-support-context-dialog.c -+++ b/src/gs-hardware-support-context-dialog.c -@@ -461,6 +461,7 @@ gs_hardware_support_context_dialog_get_display_support (GdkMonitor *monitor, - AsRelationCompare comparator = as_relation_get_compare (relation); - Range current_display_comparand, relation_comparand; - -+#if !AS_CHECK_VERSION(1, 0, 0) - /* From https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-requires-recommends-display_length */ - Range display_lengths[] = { - [AS_DISPLAY_LENGTH_KIND_XSMALL] = { 0, 360 }, -@@ -469,6 +470,7 @@ gs_hardware_support_context_dialog_get_display_support (GdkMonitor *monitor, - [AS_DISPLAY_LENGTH_KIND_LARGE] = { 1024, 3840 }, - [AS_DISPLAY_LENGTH_KIND_XLARGE] = { 3840, G_MAXUINT }, - }; -+#endif - - any_display_relations_set = TRUE; - -@@ -485,11 +487,14 @@ gs_hardware_support_context_dialog_get_display_support (GdkMonitor *monitor, - case AS_DISPLAY_SIDE_KIND_LAST: - default: - current_display_comparand.min = current_display_comparand.max = MAX (current_screen_size.width, current_screen_size.height); -+#if !AS_CHECK_VERSION(1, 0, 0) - relation_comparand.min = display_lengths[as_relation_get_value_display_length_kind (relation)].min; - relation_comparand.max = display_lengths[as_relation_get_value_display_length_kind (relation)].max; -+#endif - break; - } - -+#if !AS_CHECK_VERSION(1, 0, 0) - if (evaluate_display_comparison (display_lengths[AS_DISPLAY_LENGTH_KIND_SMALL], comparator, relation_comparand)) { - *mobile_relation_kind_out = max_relation_kind (*mobile_relation_kind_out, as_relation_get_kind (relation)); - *mobile_match_out = TRUE; -@@ -499,6 +504,7 @@ gs_hardware_support_context_dialog_get_display_support (GdkMonitor *monitor, - *desktop_relation_kind_out = max_relation_kind (*desktop_relation_kind_out, as_relation_get_kind (relation)); - *desktop_match_out = TRUE; - } -+#endif - - if (evaluate_display_comparison (current_display_comparand, comparator, relation_comparand)) { - *current_relation_kind_out = max_relation_kind (*current_relation_kind_out, as_relation_get_kind (relation)); -diff --git a/src/gs-repos-dialog.c b/src/gs-repos-dialog.c -index c41c494..7dac041 100644 ---- a/src/gs-repos-dialog.c -+++ b/src/gs-repos-dialog.c -@@ -154,7 +154,11 @@ enable_repo (GsReposDialog *dialog, - g_autoptr(GError) error = NULL; - - /* convert from AppStream markup */ -+#if AS_CHECK_VERSION(1, 0, 0) -+ message = as_markup_convert (gs_app_get_agreement (repo), AS_MARKUP_KIND_TEXT, &error); -+#else - message = as_markup_convert_simple (gs_app_get_agreement (repo), &error); -+#endif - if (message == NULL) { - /* failed, so just try and show the original markup */ - message = g_strdup (gs_app_get_agreement (repo)); -diff --git a/src/gs-screenshot-carousel.c b/src/gs-screenshot-carousel.c -index 04bbf86..d269af6 100644 ---- a/src/gs-screenshot-carousel.c -+++ b/src/gs-screenshot-carousel.c -@@ -141,8 +141,8 @@ gs_screenshot_carousel_load_screenshots (GsScreenshotCarousel *self, GsApp *app, - gtk_widget_set_can_focus (gtk_widget_get_first_child (ssimg), FALSE); - gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss); - gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg), -- AS_IMAGE_NORMAL_WIDTH, -- AS_IMAGE_NORMAL_HEIGHT); -+ GS_IMAGE_NORMAL_WIDTH, -+ GS_IMAGE_NORMAL_HEIGHT); - gtk_widget_add_css_class (ssimg, "screenshot-image-main"); - gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), cancellable); - -diff --git a/src/gs-screenshot-image.c b/src/gs-screenshot-image.c -index c313a25..b24083b 100644 ---- a/src/gs-screenshot-image.c -+++ b/src/gs-screenshot-image.c -@@ -284,13 +284,13 @@ gs_screenshot_image_save_downloaded_img (GsScreenshotImage *ssimg, - if (images->len > 1) - return TRUE; - -- if (width == AS_IMAGE_THUMBNAIL_WIDTH && -- height == AS_IMAGE_THUMBNAIL_HEIGHT) { -- width = AS_IMAGE_NORMAL_WIDTH; -- height = AS_IMAGE_NORMAL_HEIGHT; -+ if (width == GS_IMAGE_THUMBNAIL_WIDTH && -+ height == GS_IMAGE_THUMBNAIL_HEIGHT) { -+ width = GS_IMAGE_NORMAL_WIDTH; -+ height = GS_IMAGE_NORMAL_HEIGHT; - } else { -- width = AS_IMAGE_THUMBNAIL_WIDTH; -- height = AS_IMAGE_THUMBNAIL_HEIGHT; -+ width = GS_IMAGE_THUMBNAIL_WIDTH; -+ height = GS_IMAGE_THUMBNAIL_HEIGHT; - } - - width *= ssimg->scale; -@@ -582,16 +582,30 @@ gs_screenshot_image_get_url (GsScreenshotImage *ssimg) - } else if (as_screenshot_get_media_kind (ssimg->screenshot) == AS_SCREENSHOT_MEDIA_KIND_IMAGE) { - AsImage *im; - -+#if AS_CHECK_VERSION(1, 0, 0) -+ im = as_screenshot_get_image (ssimg->screenshot, -+ ssimg->width, -+ ssimg->height, -+ ssimg->scale); -+#else - im = as_screenshot_get_image (ssimg->screenshot, - ssimg->width * ssimg->scale, - ssimg->height * ssimg->scale); -+#endif - - /* if we've failed to load a HiDPI image, fallback to LoDPI */ - if (im == NULL && ssimg->scale > 1) { - ssimg->scale = 1; -+#if AS_CHECK_VERSION(1, 0, 0) -+ im = as_screenshot_get_image (ssimg->screenshot, -+ ssimg->width, -+ ssimg->height, -+ 1); -+#else - im = as_screenshot_get_image (ssimg->screenshot, - ssimg->width, - ssimg->height); -+#endif - } - - if (im) -@@ -698,15 +712,22 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg, - * smaller version of it straight away */ - if (!ssimg->showing_image && - as_screenshot_get_media_kind (ssimg->screenshot) == AS_SCREENSHOT_MEDIA_KIND_IMAGE && -- ssimg->width > AS_IMAGE_THUMBNAIL_WIDTH && -- ssimg->height > AS_IMAGE_THUMBNAIL_HEIGHT) { -+ ssimg->width > GS_IMAGE_THUMBNAIL_WIDTH && -+ ssimg->height > GS_IMAGE_THUMBNAIL_HEIGHT) { - const gchar *url_thumb; - g_autofree gchar *basename_thumb = NULL; - g_autofree gchar *cache_kind_thumb = NULL; - AsImage *im; -+#if AS_CHECK_VERSION(1, 0, 0) - im = as_screenshot_get_image (ssimg->screenshot, -- AS_IMAGE_THUMBNAIL_WIDTH * ssimg->scale, -- AS_IMAGE_THUMBNAIL_HEIGHT * ssimg->scale); -+ GS_IMAGE_THUMBNAIL_WIDTH, -+ GS_IMAGE_THUMBNAIL_HEIGHT, -+ ssimg->scale); -+#else -+ im = as_screenshot_get_image (ssimg->screenshot, -+ GS_IMAGE_THUMBNAIL_WIDTH * ssimg->scale, -+ GS_IMAGE_THUMBNAIL_HEIGHT * ssimg->scale); -+#endif - url_thumb = as_image_get_url (im); - basename_thumb = gs_screenshot_get_cachefn_for_url (url_thumb); - cache_kind_thumb = g_build_filename ("screenshots", "112x63", NULL); -diff --git a/src/gs-screenshot-image.h b/src/gs-screenshot-image.h -index 1f6cf81..6e45f5d 100644 ---- a/src/gs-screenshot-image.h -+++ b/src/gs-screenshot-image.h -@@ -21,6 +21,13 @@ G_BEGIN_DECLS - - G_DECLARE_FINAL_TYPE (GsScreenshotImage, gs_screenshot_image, GS, SCREENSHOT_IMAGE, GtkWidget) - -+#define GS_IMAGE_LARGE_HEIGHT 423 -+#define GS_IMAGE_LARGE_WIDTH 752 -+#define GS_IMAGE_NORMAL_HEIGHT 351 -+#define GS_IMAGE_NORMAL_WIDTH 624 -+#define GS_IMAGE_THUMBNAIL_HEIGHT 63 -+#define GS_IMAGE_THUMBNAIL_WIDTH 112 -+ - GtkWidget *gs_screenshot_image_new (SoupSession *session); - - AsScreenshot *gs_screenshot_image_get_screenshot (GsScreenshotImage *ssimg); -diff --git a/subprojects/appstream.wrap b/subprojects/appstream.wrap -index 6f0beb0..b9a9c7d 100644 ---- a/subprojects/appstream.wrap -+++ b/subprojects/appstream.wrap -@@ -1,5 +1,5 @@ - [wrap-git] - directory = appstream - url = https://github.com/ximion/appstream.git --revision = v0.14.1 -+revision = v0.16.4 - depth = 1 --- -2.43.0 - diff --git a/gnome-software.changes b/gnome-software.changes index 0c558b4..9ab35f5 100644 --- a/gnome-software.changes +++ b/gnome-software.changes @@ -1,3 +1,54 @@ +------------------------------------------------------------------- +Fri Mar 15 20:58:09 UTC 2024 - Dominique Leuenberger + +- Update to version 46.0: + + Improvements for screen readers. + + Stop ‘loading updates’ in a loop on Debian. + + Updated translations. + +------------------------------------------------------------------- +Fri Mar 1 14:09:54 UTC 2024 - Dominique Leuenberger + +- Update to version 46.rc: + + Various UI text improvements. + + Fix launch of some apps. + + Fix invalid app state after it's uninstalled. + + Fix read of app description text. + + Do not ask to reboot after failed firmware update. + + Updated translations. + +------------------------------------------------------------------- +Mon Feb 12 15:10:04 UTC 2024 - Dominique Leuenberger + +- Update to version 46.beta: + + Show feedback for all conditions that pause automatic updates. + + Various UI improvements and move to new libadwaita widgets. + + Fix loading OS AppStream catalog data if it is available as + YAML. + + Add openSUSE Leap distro upgrade plugin. +- Pass -D opensuse-distro-upgrade=true to meson: we are openSUSE, + so we want the plugin. +- Drop gnome-software-plugin-opensuse-distro-upgrade.patch: fixed + upstream. + +------------------------------------------------------------------- +Tue Jan 16 13:19:59 UTC 2024 - Dominique Leuenberger + +- Update to version 46.alpha: + + Recognize links in package update descriptions. + + Expose package names discreetly in the UI. + + Increase speed of load of the category pages. + + Improve search match with multiple words. + + Recognize verified apps by Flathub. + + Correct message when installing firmware updates. + + Improve application safety checks. + + Improve update preferences dialog. + + Fix deadlock when cancelling app update. + + Support user installation of local flatpak files. + * Fix apps appearing unsorted and without tiles in category page. +- Convert to source service for easier updating. +- Drop gnome-software-support-appstream-1_0.patch: fixed upstream. + ------------------------------------------------------------------- Thu Dec 28 02:27:35 UTC 2023 - Yifan Jiang @@ -13,7 +64,7 @@ Fri Dec 15 09:33:16 UTC 2023 - Christophe Marin Fri Dec 1 10:46:39 UTC 2023 - Dominique Leuenberger - Update to version 45.2: - + Updated translations. + + Updated translations. ------------------------------------------------------------------- Fri Oct 27 05:40:09 UTC 2023 - Jonathan Kang diff --git a/gnome-software.obsinfo b/gnome-software.obsinfo new file mode 100644 index 0000000..c39a114 --- /dev/null +++ b/gnome-software.obsinfo @@ -0,0 +1,4 @@ +name: gnome-software +version: 46.0 +mtime: 1710515704 +commit: 9dec134914268d135a6f5251ddd624fef2de3c10 diff --git a/gnome-software.spec b/gnome-software.spec index ef0e956..230c89b 100644 --- a/gnome-software.spec +++ b/gnome-software.spec @@ -20,23 +20,19 @@ %bcond_with profiling Name: gnome-software -Version: 45.2 +Version: 46.0 Release: 0 Summary: GNOME Software Store License: GPL-2.0-or-later Group: System/GUI/GNOME URL: https://wiki.gnome.org/Apps/Software -Source0: https://download.gnome.org/sources/gnome-software/45/%{name}-%{version}.tar.xz +Source0: %{name}-%{version}.tar.zst %if 0%{?sle_version} # PATCH-FIX-OPENSUSE gnome-software-launch-gpk-update-viewer-for-updates.patch bsc#1077332 boo#1090042 sckang@suse.com -- Don't launch gnome-software when clicking the updates notification. Launch gpk-update-viewer instead. Patch0: gnome-software-launch-gpk-update-viewer-for-updates.patch # PATCH-FIX-OPENSUSE gnome-software-disable-offline-update.patch bsc#944832 sckang@suse.com -- Disable offline update in SLE and openSUSE Leap Patch1: gnome-software-disable-offline-update.patch %endif -# PATCH-FIX-UPSTREAM gnome-software-plugin-opensuse-distro-upgrade.patch glgo#GNOME/gnome-software!1557 sckang@suse.com -- plugins: add opensuse-distro-upgrade plugin -Patch2: gnome-software-plugin-opensuse-distro-upgrade.patch -# PATCH-FIX-UPSTREAM gnome-software-support-appstream-1_0.patch boo#1217047 -- Apply upstream changes to support appstream 1.0 -Patch3: gnome-software-support-appstream-1_0.patch BuildRequires: gtk-doc BuildRequires: meson >= 0.58.0 BuildRequires: pkgconfig @@ -57,7 +53,7 @@ BuildRequires: pkgconfig(libadwaita-1) BuildRequires: pkgconfig(libhandy-1) >= 1.2.0 BuildRequires: pkgconfig(libsecret-1) BuildRequires: pkgconfig(libsoup-3.0) -BuildRequires: pkgconfig(malcontent-0) >= 0.3.0 +BuildRequires: pkgconfig(malcontent-0) >= 0.5.0 BuildRequires: pkgconfig(ostree-1) BuildRequires: pkgconfig(packagekit-glib2) >= 1.1.0 BuildRequires: pkgconfig(polkit-gobject-1) @@ -110,6 +106,7 @@ the GNOME software store. -D malcontent=true \ -D soup2=false \ -D sysprof=%{?with_profiling:enabled}%{!?with_profiling:disabled} \ + -D opensuse-distro-upgrade=true \ %{nil} %meson_build @@ -142,6 +139,7 @@ FOE %{_datadir}/applications/gnome-software-local-file-fwupd.desktop %{_datadir}/applications/gnome-software-local-file-packagekit.desktop %{_datadir}/applications/org.gnome.Software.desktop +%{_datadir}/bash-completion/completions/gnome-software %{_datadir}/dbus-1/services/org.gnome.Software.service %{_datadir}/dbus-1/services/org.freedesktop.PackageKit.service %{_datadir}/glib-2.0/schemas/org.gnome.software.gschema.xml