[gnome-software/gnome-3-22] snap: Install classic snap



commit 5bef0c82741ae40af855b09336d48f606b5a1061
Author: Robert Ancell <robert ancell canonical com>
Date:   Thu Dec 14 10:34:53 2017 +1300

    snap: Install classic snap

 src/plugins/gs-plugin-snap.c |   11 ++++++++---
 src/plugins/gs-snapd.c       |   18 ++++++++++++------
 src/plugins/gs-snapd.h       |    1 +
 3 files changed, 21 insertions(+), 9 deletions(-)
---
diff --git a/src/plugins/gs-plugin-snap.c b/src/plugins/gs-plugin-snap.c
index 32a440e..e83b2d4 100644
--- a/src/plugins/gs-plugin-snap.c
+++ b/src/plugins/gs-plugin-snap.c
@@ -200,7 +200,7 @@ snap_to_app (GsPlugin *plugin, JsonObject *snap)
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
        GsApp *app;
-       const gchar *type;
+       const gchar *type, *confinement;
 
        /* create a unique ID for deduplication, TODO: branch? */
        app = gs_app_new (json_object_get_string_member (snap, "name"));
@@ -218,7 +218,9 @@ snap_to_app (GsPlugin *plugin, JsonObject *snap)
        gs_app_set_name (app, GS_APP_QUALITY_HIGHEST, get_snap_title (snap));
        if (gs_plugin_check_distro_id (plugin, "ubuntu"))
                gs_app_add_quirk (app, AS_APP_QUIRK_PROVENANCE);
-       if (priv->system_is_confined && g_strcmp0 (json_object_get_string_member (snap, "confinement"), 
"strict") == 0)
+       confinement = json_object_get_string_member (snap, "confinement");
+       gs_app_set_metadata (app, "snap::confinement", confinement);
+       if (priv->system_is_confined && g_strcmp0 (confinement, "strict") == 0)
                gs_app_add_kudo (app, GS_APP_KUDO_SANDBOXED);
 
        return app;
@@ -529,6 +531,7 @@ gs_plugin_app_install (GsPlugin *plugin,
 {
        g_autofree gchar *macaroon = NULL;
        g_auto(GStrv) discharges = NULL;
+       gboolean classic = FALSE;
 
        /* We can only install apps we know of */
        if (g_strcmp0 (gs_app_get_management_plugin (app), "snap") != 0)
@@ -538,7 +541,9 @@ gs_plugin_app_install (GsPlugin *plugin,
 
        gs_app_set_state (app, AS_APP_STATE_INSTALLING);
        get_macaroon (plugin, &macaroon, &discharges);
-       if (!gs_snapd_install (macaroon, discharges, gs_app_get_id (app), progress_cb, app, cancellable, 
error)) {
+       if (g_strcmp0 (gs_app_get_metadata_item (app, "snap::confinement"), "classic") == 0)
+               classic = TRUE;
+       if (!gs_snapd_install (macaroon, discharges, gs_app_get_id (app), classic, progress_cb, app, 
cancellable, error)) {
                gs_app_set_state_recover (app);
                return FALSE;
        }
diff --git a/src/plugins/gs-snapd.c b/src/plugins/gs-snapd.c
index ebc7775..c8b9392 100644
--- a/src/plugins/gs-snapd.c
+++ b/src/plugins/gs-snapd.c
@@ -666,12 +666,14 @@ send_package_action (const gchar *macaroon,
                     gchar **discharges,
                     const gchar *name,
                     const gchar *action,
+                    gboolean classic,
                     GsSnapdProgressCallback callback,
                     gpointer user_data,
                     GCancellable *cancellable,
                     GError **error)
 {
-       g_autofree gchar *content = NULL, *path = NULL;
+       g_autoptr(GString) content = NULL;
+       g_autofree gchar *path = NULL;
        guint status_code;
        g_autofree gchar *reason_phrase = NULL;
        g_autofree gchar *response_type = NULL;
@@ -683,9 +685,13 @@ send_package_action (const gchar *macaroon,
        const gchar *change_id;
        gboolean aborted = FALSE;
 
-       content = g_strdup_printf ("{\"action\": \"%s\"}", action);
+       content = g_string_new ("{");
+       g_string_append_printf (content, "\"action\": \"%s\"", action);
+       if (classic)
+               g_string_append (content, ", \"classic\": true");
+       g_string_append (content, "}");
        path = g_strdup_printf ("/v2/snaps/%s", name);
-       if (!send_request ("POST", path, content,
+       if (!send_request ("POST", path, content->str,
                           macaroon, discharges,
                           &status_code, &reason_phrase,
                           &response_type, &response, NULL,
@@ -767,12 +773,12 @@ send_package_action (const gchar *macaroon,
 
 gboolean
 gs_snapd_install (const gchar *macaroon, gchar **discharges,
-                 const gchar *name,
+                 const gchar *name, gboolean classic,
                  GsSnapdProgressCallback callback, gpointer user_data,
                  GCancellable *cancellable,
                  GError **error)
 {
-       return send_package_action (macaroon, discharges, name, "install", callback, user_data, cancellable, 
error);
+       return send_package_action (macaroon, discharges, name, "install", classic, callback, user_data, 
cancellable, error);
 }
 
 gboolean
@@ -781,7 +787,7 @@ gs_snapd_remove (const gchar *macaroon, gchar **discharges,
                 GsSnapdProgressCallback callback, gpointer user_data,
                 GCancellable *cancellable, GError **error)
 {
-       return send_package_action (macaroon, discharges, name, "remove", callback, user_data, cancellable, 
error);
+       return send_package_action (macaroon, discharges, name, "remove", FALSE, callback, user_data, 
cancellable, error);
 }
 
 gchar *
diff --git a/src/plugins/gs-snapd.h b/src/plugins/gs-snapd.h
index b0cf834..5275a00 100644
--- a/src/plugins/gs-snapd.h
+++ b/src/plugins/gs-snapd.h
@@ -59,6 +59,7 @@ JsonObject *gs_snapd_get_interfaces   (const gchar    *macaroon,
 gboolean gs_snapd_install              (const gchar    *macaroon,
                                         gchar          **discharges,
                                         const gchar    *name,
+                                        gboolean        classic,
                                         GsSnapdProgressCallback callback,
                                         gpointer        user_data,
                                         GCancellable   *cancellable,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]