diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/flatpak-dir.c | 60 | ||||
-rw-r--r-- | common/flatpak-dir.h | 7 |
2 files changed, 67 insertions, 0 deletions
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); /** |