From 1504f7bd7f276a8bc2f0e2762f44c1141ba5054a Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Fri, 13 May 2016 16:23:43 +0200 Subject: system-helper: Support add/modify/delete of remotes --- common/flatpak-dir.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ common/flatpak-dir.h | 7 ++++++ 2 files changed, 67 insertions(+) (limited to 'common') diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 023dd23..545a3cc 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -4163,6 +4163,30 @@ flatpak_dir_remove_remote (FlatpakDir *self, GHashTableIter hash_iter; gpointer key; + if (flatpak_dir_use_system_helper (self)) + { + FlatpakSystemHelper *system_helper; + g_autoptr(GVariant) gpg_data_v = NULL; + FlatpakHelperConfigureRemoteFlags flags = 0; + + gpg_data_v = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("ay"), "", 0, TRUE, NULL, NULL)); + + system_helper = flatpak_dir_get_system_helper (self); + g_assert (system_helper != NULL); + + if (force_remove) + flags |= FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE; + + if (!flatpak_system_helper_call_configure_remote_sync (system_helper, + flags, remote_name, + "", + gpg_data_v, + cancellable, error)) + return FALSE; + + return TRUE; + } + if (!flatpak_dir_ensure_repo (self, cancellable, error)) return FALSE; @@ -4222,6 +4246,17 @@ flatpak_dir_remove_remote (FlatpakDir *self, return TRUE; } +static GVariant * +variant_new_ay_bytes (GBytes *bytes) +{ + gsize size; + gconstpointer data; + data = g_bytes_get_data (bytes, &size); + g_bytes_ref (bytes); + return g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("ay"), data, size, + TRUE, (GDestroyNotify)g_bytes_unref, bytes)); +} + gboolean flatpak_dir_modify_remote (FlatpakDir *self, const char *remote_name, @@ -4246,6 +4281,31 @@ flatpak_dir_modify_remote (FlatpakDir *self, return flatpak_fail (error, "No configuration for remote %s specified", remote_name); + + if (flatpak_dir_use_system_helper (self)) + { + FlatpakSystemHelper *system_helper; + g_autofree char *config_data = g_key_file_to_data (config, NULL, NULL); + g_autoptr(GVariant) gpg_data_v = NULL; + + if (gpg_data != NULL) + gpg_data_v = variant_new_ay_bytes (gpg_data); + else + gpg_data_v = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("ay"), "", 0, TRUE, NULL, NULL)); + + system_helper = flatpak_dir_get_system_helper (self); + g_assert (system_helper != NULL); + + if (!flatpak_system_helper_call_configure_remote_sync (system_helper, + 0, remote_name, + config_data, + gpg_data_v, + cancellable, error)) + return FALSE; + + return TRUE; + } + metalink = g_key_file_get_string (config, group, "metalink", NULL); if (metalink != NULL && *metalink != 0) url = g_strconcat ("metalink=", metalink, NULL); diff --git a/common/flatpak-dir.h b/common/flatpak-dir.h index eaceee8..385139a 100644 --- a/common/flatpak-dir.h +++ b/common/flatpak-dir.h @@ -55,6 +55,13 @@ typedef enum { #define FLATPAK_HELPER_UNINSTALL_FLAGS_ALL (FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF | FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE) +typedef enum { + FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_NONE = 0, + FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE = 1 << 0, +} FlatpakHelperConfigureRemoteFlags; + +#define FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_ALL (FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE) + GQuark flatpak_dir_error_quark (void); /** -- cgit v1.2.1