[gnome-software/gnome-3-22] snap: Install classic snap
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/gnome-3-22] snap: Install classic snap
- Date: Wed, 13 Dec 2017 21:35:38 +0000 (UTC)
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]