[gnome-builder] flatpak: add helper to check for system dependencies
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] flatpak: add helper to check for system dependencies
- Date: Fri, 10 Mar 2017 23:29:30 +0000 (UTC)
commit 152a72cd93e7cd3ef18020266991247cca9c52b2
Author: Christian Hergert <chergert redhat com>
Date: Fri Mar 10 15:28:57 2017 -0800
flatpak: add helper to check for system dependencies
This will check for flatpak-builder on the host by using:
which flatpak-builder
as that is more reliable than checking the package manager. We will still
use pkcon to install the package, but we don't need the D-Bus service to
check for it.
plugins/flatpak/gbp-flatpak-application-addin.c | 81 +++++++++++++++++++++++
plugins/flatpak/gbp-flatpak-application-addin.h | 7 ++
plugins/flatpak/gbp-flatpak-workbench-addin.c | 51 ++++++---------
3 files changed, 108 insertions(+), 31 deletions(-)
---
diff --git a/plugins/flatpak/gbp-flatpak-application-addin.c b/plugins/flatpak/gbp-flatpak-application-addin.c
index ec86d93..8e68613 100644
--- a/plugins/flatpak/gbp-flatpak-application-addin.c
+++ b/plugins/flatpak/gbp-flatpak-application-addin.c
@@ -1069,3 +1069,84 @@ gbp_flatpak_application_addin_get_deploy_dir (GbpFlatpakApplicationAddin *self,
return NULL;
}
+
+static void
+gbp_flatpak_application_addin_check_sysdeps_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ IdeSubprocess *subprocess = (IdeSubprocess *)object;
+ g_autoptr(GTask) task = user_data;
+ g_autoptr(GError) error = NULL;
+
+ IDE_ENTRY;
+
+ g_return_if_fail (IDE_IS_SUBPROCESS (subprocess));
+ g_return_if_fail (G_IS_ASYNC_RESULT (result));
+ g_return_if_fail (G_IS_TASK (task));
+
+ if (!ide_subprocess_wait_check_finish (subprocess, result, &error))
+ g_task_return_error (task, g_steal_pointer (&error));
+ else
+ g_task_return_boolean (task, TRUE);
+
+ IDE_EXIT;
+}
+
+void
+gbp_flatpak_application_addin_check_sysdeps_async (GbpFlatpakApplicationAddin *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_autoptr(IdeSubprocessLauncher) launcher = NULL;
+ g_autoptr(IdeSubprocess) subprocess = NULL;
+ g_autoptr(GTask) task = NULL;
+ g_autoptr(GError) error = NULL;
+
+ IDE_ENTRY;
+
+ g_return_if_fail (GBP_IS_FLATPAK_APPLICATION_ADDIN (self));
+ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+ task = g_task_new (self, cancellable, callback, user_data);
+ g_task_set_source_tag (task, gbp_flatpak_application_addin_check_sysdeps_async);
+
+ launcher = ide_subprocess_launcher_new (0);
+ ide_subprocess_launcher_set_run_on_host (launcher, TRUE);
+ ide_subprocess_launcher_push_argv (launcher, "which");
+ ide_subprocess_launcher_push_argv (launcher, "flatpak-builder");
+
+ subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error);
+
+ if (subprocess == NULL)
+ {
+ g_task_return_error (task, g_steal_pointer (&error));
+ IDE_GOTO (failure);
+ }
+
+ ide_subprocess_wait_check_async (subprocess,
+ cancellable,
+ gbp_flatpak_application_addin_check_sysdeps_cb,
+ g_steal_pointer (&task));
+
+failure:
+ IDE_EXIT;
+}
+
+gboolean
+gbp_flatpak_application_addin_check_sysdeps_finish (GbpFlatpakApplicationAddin *self,
+ GAsyncResult *result,
+ GError **error)
+{
+ gboolean ret;
+
+ IDE_ENTRY;
+
+ g_return_val_if_fail (GBP_IS_FLATPAK_APPLICATION_ADDIN (self), FALSE);
+ g_return_val_if_fail (G_IS_TASK (result), FALSE);
+
+ ret = g_task_propagate_boolean (G_TASK (result), error);
+
+ IDE_RETURN (ret);
+}
diff --git a/plugins/flatpak/gbp-flatpak-application-addin.h b/plugins/flatpak/gbp-flatpak-application-addin.h
index 1e5cd27..d429945 100644
--- a/plugins/flatpak/gbp-flatpak-application-addin.h
+++ b/plugins/flatpak/gbp-flatpak-application-addin.h
@@ -34,6 +34,13 @@ gboolean gbp_flatpak_application_addin_has_runtime
const gchar
*id,
const gchar
*arch,
const gchar
*branch);
+void gbp_flatpak_application_addin_check_sysdeps_async (GbpFlatpakApplicationAddin
*self,
+ GCancellable
*cancellable,
+ GAsyncReadyCallback
callback,
+ gpointer
user_data);
+gboolean gbp_flatpak_application_addin_check_sysdeps_finish (GbpFlatpakApplicationAddin
*self,
+ GAsyncResult
*result,
+ GError
**error);
void gbp_flatpak_application_addin_install_runtime_async (GbpFlatpakApplicationAddin
*self,
const gchar
*runtime_id,
const gchar
*arch,
diff --git a/plugins/flatpak/gbp-flatpak-workbench-addin.c b/plugins/flatpak/gbp-flatpak-workbench-addin.c
index cd39f0e..dce99b0 100644
--- a/plugins/flatpak/gbp-flatpak-workbench-addin.c
+++ b/plugins/flatpak/gbp-flatpak-workbench-addin.c
@@ -20,6 +20,7 @@
#include <glib/gi18n.h>
+#include "gbp-flatpak-application-addin.h"
#include "gbp-flatpak-workbench-addin.h"
struct _GbpFlatpakWorkbenchAddin
@@ -32,27 +33,27 @@ struct _GbpFlatpakWorkbenchAddin
};
static void
-query_packages_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
+check_sysdeps_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- GDBusConnection *bus = (GDBusConnection *)object;
+ GbpFlatpakApplicationAddin *app_addin = (GbpFlatpakApplicationAddin *)object;
g_autoptr(IdeWorkbenchMessage) message = user_data;
- g_autoptr(GVariant) reply = NULL;
g_autoptr(GError) error = NULL;
+ gboolean has_sysdeps;
- g_assert (G_IS_DBUS_CONNECTION (bus));
+ g_assert (GBP_IS_FLATPAK_APPLICATION_ADDIN (app_addin));
g_assert (G_IS_ASYNC_RESULT (result));
+ g_assert (IDE_IS_WORKBENCH_MESSAGE (message));
- reply = g_dbus_connection_call_finish (bus, result, &error);
+ has_sysdeps = gbp_flatpak_application_addin_check_sysdeps_finish (app_addin, result, &error);
- if (reply != NULL)
- {
- gboolean installed = FALSE;
+#ifdef IDE_ENABLE_TRACE
+ if (error != NULL)
+ IDE_TRACE_MSG ("which flatpak-builder resulted in %s", error->message);
+#endif
- g_variant_get (reply, "(b)", &installed);
- gtk_widget_set_visible (GTK_WIDGET (message), !installed);
- }
+ gtk_widget_set_visible (GTK_WIDGET (message), has_sysdeps == FALSE);
}
static void
@@ -60,7 +61,7 @@ gbp_flatpak_workbench_addin_load (IdeWorkbenchAddin *addin,
IdeWorkbench *workbench)
{
GbpFlatpakWorkbenchAddin *self = (GbpFlatpakWorkbenchAddin *)addin;
- g_autoptr(GDBusConnection) bus = NULL;
+ GbpFlatpakApplicationAddin *app_addin;
IdeContext *context;
g_assert (GBP_IS_FLATPAK_WORKBENCH_ADDIN (self));
@@ -82,23 +83,11 @@ gbp_flatpak_workbench_addin_load (IdeWorkbenchAddin *addin,
ide_workbench_message_add_action (self->message, _("Install"), "flatpak.install-flatpak-builder");
ide_workbench_push_message (workbench, self->message);
- /*
- * Discover if flatpak-builder is available, and if not, we will show the
- * message bar to the user.
- */
- if (NULL != (bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL)))
- g_dbus_connection_call (bus,
- "org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit",
- "org.freedesktop.PackageKit.Query",
- "IsInstalled",
- g_variant_new ("(ss)", "flatpak-builder", ""),
- G_VARIANT_TYPE ("(b)"),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL,
- query_packages_cb,
- g_object_ref (self->message));
+ app_addin = gbp_flatpak_application_addin_get_default ();
+ gbp_flatpak_application_addin_check_sysdeps_async (app_addin,
+ NULL,
+ check_sysdeps_cb,
+ g_object_ref (self->message));
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]