summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2016-05-13 16:23:43 +0200
committerAlexander Larsson <alexl@redhat.com>2016-05-13 16:23:43 +0200
commit1504f7bd7f276a8bc2f0e2762f44c1141ba5054a (patch)
treefb7a90088581a5994779b24763369872dc52dc56 /common
parent4a8a225447139b5df3cf7759f56d5ca7462fc8aa (diff)
downloadxdg-app-1504f7bd7f276a8bc2f0e2762f44c1141ba5054a.tar.gz
system-helper: Support add/modify/delete of remotes
Diffstat (limited to 'common')
-rw-r--r--common/flatpak-dir.c60
-rw-r--r--common/flatpak-dir.h7
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);
/**