[gnome-software] snap: Refactor how metadata is merged between installed and store snaps
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] snap: Refactor how metadata is merged between installed and store snaps
- Date: Thu, 15 Feb 2018 01:28:27 +0000 (UTC)
commit dac0237b3c8590c3e4256a632b5db8d04a7fee51
Author: Robert Ancell <robert ancell canonical com>
Date: Thu Feb 15 14:27:47 2018 +1300
snap: Refactor how metadata is merged between installed and store snaps
plugins/snap/gs-plugin-snap.c | 87 ++++++++++++++++++++-----------------------
1 file changed, 41 insertions(+), 46 deletions(-)
---
diff --git a/plugins/snap/gs-plugin-snap.c b/plugins/snap/gs-plugin-snap.c
index 8c022805..c8463e1a 100644
--- a/plugins/snap/gs-plugin-snap.c
+++ b/plugins/snap/gs-plugin-snap.c
@@ -737,9 +737,11 @@ gs_plugin_refine_app (GsPlugin *plugin,
{
GsPluginData *priv = gs_plugin_get_data (plugin);
g_autoptr(SnapdClient) client = NULL;
- const gchar *id, *icon_url = NULL;
+ const gchar *id, *name;
g_autoptr(SnapdSnap) local_snap = NULL;
g_autoptr(SnapdSnap) store_snap = NULL;
+ SnapdSnap *snap;
+ g_autofree gchar *description = NULL;
/* not us */
if (g_strcmp0 (gs_app_get_management_plugin (app), "snap") != 0)
@@ -755,60 +757,45 @@ gs_plugin_refine_app (GsPlugin *plugin,
if (id == NULL)
return TRUE;
- /* get information from installed snaps */
+ /* get information from local snaps and store */
local_snap = snapd_client_list_one_sync (client, id, cancellable, NULL);
+ store_snap = get_store_snap (plugin, id, cancellable, NULL);
+
+ if (local_snap != NULL)
+ gs_app_set_state (app, AS_APP_STATE_INSTALLED);
+ else
+ gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
+
+ /* use store information for basic metadata over local information */
+ snap = store_snap != NULL ? store_snap : local_snap;
+ name = snapd_snap_get_title (snap);
+ if (name == NULL || g_strcmp0 (name, "") == 0)
+ name = snapd_snap_get_name (snap);
+ gs_app_set_name (app, GS_APP_QUALITY_NORMAL, name);
+ gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_summary (snap));
+ description = gs_plugin_snap_get_description_safe (snap);
+ if (description != NULL)
+ gs_app_set_description (app, GS_APP_QUALITY_NORMAL, description);
+ gs_app_set_license (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_license (snap));
+ gs_app_set_developer_name (app, snapd_snap_get_developer (snap));
+
+ snap = local_snap != NULL ? local_snap : store_snap;
+ gs_app_set_version (app, snapd_snap_get_version (snap));
+
+ /* add information specific to installed snaps */
if (local_snap != NULL) {
- const gchar *name;
- g_autofree gchar *description = NULL;
- if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
- gs_app_set_state (app, AS_APP_STATE_INSTALLED);
- name = snapd_snap_get_title (local_snap);
- if (name == NULL || g_strcmp0 (name, "") == 0)
- name = snapd_snap_get_name (local_snap);
- gs_app_set_name (app, GS_APP_QUALITY_NORMAL, name);
- gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_summary (local_snap));
- description = gs_plugin_snap_get_description_safe (local_snap);
- if (description != NULL)
- gs_app_set_description (app, GS_APP_QUALITY_NORMAL, description);
- gs_app_set_license (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_license (local_snap));
- gs_app_set_version (app, snapd_snap_get_version (local_snap));
gs_app_set_size_installed (app, snapd_snap_get_installed_size (local_snap));
gs_app_set_install_date (app, g_date_time_to_unix (snapd_snap_get_install_date (local_snap)));
- gs_app_set_developer_name (app, snapd_snap_get_developer (local_snap));
- icon_url = snapd_snap_get_icon (local_snap);
- if (g_strcmp0 (icon_url, "") == 0)
- icon_url = NULL;
find_launch_app (app, local_snap);
}
- /* get information from snap store */
- store_snap = get_store_snap (plugin, id, cancellable, NULL);
+ /* add information specific to store snaps */
if (store_snap != NULL) {
GPtrArray *screenshots;
- const gchar *name;
- g_autofree gchar *description = NULL;
-
- if (gs_app_get_state (app) == AS_APP_STATE_UNKNOWN)
- gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
-
- name = snapd_snap_get_title (store_snap);
- if (name == NULL || g_strcmp0 (name, "") == 0)
- name = snapd_snap_get_name (store_snap);
- gs_app_set_name (app, GS_APP_QUALITY_NORMAL, name);
- gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_summary (store_snap));
- description = gs_plugin_snap_get_description_safe (store_snap);
- if (description != NULL)
- gs_app_set_description (app, GS_APP_QUALITY_NORMAL, description);
- gs_app_set_license (app, GS_APP_QUALITY_NORMAL, snapd_snap_get_license (store_snap));
- gs_app_set_version (app, snapd_snap_get_version (store_snap));
+
+ gs_app_set_origin (app, priv->store_name);
gs_app_set_size_download (app, snapd_snap_get_download_size (store_snap));
- gs_app_set_developer_name (app, snapd_snap_get_developer (store_snap));
- if (icon_url == NULL) {
- icon_url = snapd_snap_get_icon (store_snap);
- if (g_strcmp0 (icon_url, "") == 0)
- icon_url = NULL;
- }
screenshots = snapd_snap_get_screenshots (store_snap);
if (screenshots != NULL && gs_app_get_screenshots (app)->len == 0) {
@@ -838,12 +825,20 @@ gs_plugin_refine_app (GsPlugin *plugin,
gs_app_add_screenshot (app, ss);
}
}
-
- gs_app_set_origin (app, priv->store_name);
}
/* load icon if requested */
if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON) {
+ const gchar *icon_url = NULL;
+
+ if (local_snap != NULL)
+ icon_url = snapd_snap_get_icon (local_snap);
+ if (g_strcmp0 (icon_url, "") == 0)
+ icon_url = NULL;
+ if (icon_url == NULL && store_snap != NULL)
+ icon_url = snapd_snap_get_icon (store_snap);
+ if (g_strcmp0 (icon_url, "") == 0)
+ icon_url = NULL;
if (!load_icon (plugin, client, app, icon_url, cancellable, error)) {
snapd_error_convert (error);
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]