[gnome-control-center/wip/lantw/info-dont-depend-on-udisks2-client-library] info: Don't depend on udisks2 client library
- From: Ting-Wei Lan <lantw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/lantw/info-dont-depend-on-udisks2-client-library] info: Don't depend on udisks2 client library
- Date: Wed, 24 Jul 2019 07:04:15 +0000 (UTC)
commit 5636e1bf9cd4856e6d5d36b357cbf91060152e3f
Author: Ting-Wei Lan <lantw src gnome org>
Date: Wed Jul 24 14:46:44 2019 +0800
info: Don't depend on udisks2 client library
The official implementation of udisks2 service is only available on
Linux. Since the client library is bundled with the service, it is not
possible to install the client library on non-Linux systems without
patching the build system of udisks2. In order to support non-Linux
systems with their unofficial udisks2 service implementations, we should
use GDBus directly instead of relying on the client library.
Fixes https://gitlab.gnome.org/GNOME/gnome-control-center/issues/606
panels/info/cc-info-overview-panel.c | 76 +++++++++++++++++++++++-------------
panels/info/meson.build | 1 -
2 files changed, 48 insertions(+), 29 deletions(-)
---
diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c
index 0d0a17fcf..13b18cb45 100644
--- a/panels/info/cc-info-overview-panel.c
+++ b/panels/info/cc-info-overview-panel.c
@@ -36,7 +36,6 @@
#include <glibtop/mountlist.h>
#include <glibtop/mem.h>
#include <glibtop/sysinfo.h>
-#include <udisks/udisks.h>
#include <gdk/gdk.h>
@@ -80,8 +79,6 @@ typedef struct
GCancellable *cancellable;
- UDisksClient *client;
-
GraphicsData *graphics_data;
} CcInfoOverviewPanelPrivate;
@@ -483,38 +480,70 @@ get_os_type (void)
static void
get_primary_disc_info (CcInfoOverviewPanel *self)
{
- CcInfoOverviewPanelPrivate *priv;
+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
+ g_autoptr(GError) error = NULL;
GDBusObjectManager *manager;
g_autolist(GDBusObject) objects = NULL;
GList *l;
- guint64 total_size;
-
- priv = cc_info_overview_panel_get_instance_private (self);
- total_size = 0;
-
- if (!priv->client)
+ guint64 total_size = 0;
+
+ manager = g_dbus_object_manager_client_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+ G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
+ "org.freedesktop.UDisks2",
+ "/org/freedesktop/UDisks2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ &error);
+ if (error != NULL)
{
+ g_warning ("Unable to get UDisks client: %s. Disk information will not be available.",
+ error->message);
gtk_label_set_text (GTK_LABEL (priv->disk_label), _("Unknown"));
return;
}
- manager = udisks_client_get_object_manager (priv->client);
objects = g_dbus_object_manager_get_objects (manager);
for (l = objects; l != NULL; l = l->next)
{
- UDisksDrive *drive;
- drive = udisks_object_peek_drive (UDISKS_OBJECT (l->data));
+ GDBusInterface *interface = g_dbus_object_get_interface(l->data, "org.freedesktop.UDisks2.Drive");
+ if (interface == NULL)
+ continue;
- /* Skip removable devices */
- if (drive == NULL ||
- udisks_drive_get_removable (drive) ||
- udisks_drive_get_ejectable (drive))
+ GDBusProxy *drive = G_DBUS_PROXY (interface);
+ GVariant *variant;
+
+ gboolean removable = FALSE;
+ variant = g_dbus_proxy_get_cached_property (drive, "Removable");
+ if (variant != NULL)
{
- continue;
+ removable = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+
+ gboolean ejectable = FALSE;
+ variant = g_dbus_proxy_get_cached_property (drive, "Ejectable");
+ if (variant != NULL)
+ {
+ ejectable = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+
+ guint64 size = 0;
+ variant = g_dbus_proxy_get_cached_property (drive, "Size");
+ if (variant != NULL)
+ {
+ size = g_variant_get_uint64 (variant);
+ g_variant_unref (variant);
}
- total_size += udisks_drive_get_size (drive);
+ /* Skip removable devices */
+ if (removable || ejectable)
+ continue;
+
+ total_size += size;
}
if (total_size > 0)
@@ -787,8 +816,6 @@ cc_info_overview_panel_finalize (GObject *object)
g_clear_object (&priv->cancellable);
}
- g_clear_object (&priv->client);
-
g_free (priv->gnome_version);
g_free (priv->gnome_date);
g_free (priv->gnome_distributor);
@@ -829,7 +856,6 @@ static void
cc_info_overview_panel_init (CcInfoOverviewPanel *self)
{
CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
- g_autoptr(GError) error = NULL;
gtk_widget_init_template (GTK_WIDGET (self));
@@ -842,12 +868,6 @@ cc_info_overview_panel_init (CcInfoOverviewPanel *self)
else
gtk_widget_destroy (priv->updates_button);
- priv->client = udisks_client_new_sync (NULL, &error);
-
- if (error != NULL)
- g_warning ("Unable to get UDisks client: %s. Disk information will not be available.",
- error->message);
-
info_overview_panel_setup_overview (self);
info_overview_panel_setup_virt (self);
}
diff --git a/panels/info/meson.build b/panels/info/meson.build
index 911abbe9f..16176f780 100644
--- a/panels/info/meson.build
+++ b/panels/info/meson.build
@@ -57,7 +57,6 @@ sources += gnome.compile_resources(
deps = common_deps + [
polkit_gobject_dep,
- dependency('udisks2', version: '>= 2.1.8'),
dependency('libgtop-2.0')
]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]