[gnome-dvb-daemon] Added initial version of grilo plugin



commit f18e64a3a18b82f19d7c9710ea3d0d0a0a779a52
Author: Sebastian Pölsterl <sebp k-d-w org>
Date:   Sun Sep 28 20:21:13 2014 +0200

    Added initial version of grilo plugin

 client/Makefile.am                            |    8 +-
 client/grilo-plugin/Makefile.am               |   32 +
 client/grilo-plugin/gdd-channel-list.c        | 3192 +++++++++++++++++++++++
 client/grilo-plugin/gdd-channel-list.h        |  496 ++++
 client/grilo-plugin/gdd-device-group.c        | 3166 +++++++++++++++++++++++
 client/grilo-plugin/gdd-device-group.h        |  488 ++++
 client/grilo-plugin/gdd-manager.c             | 3418 +++++++++++++++++++++++++
 client/grilo-plugin/gdd-manager.h             |  526 ++++
 client/grilo-plugin/grl-dvb-daemon-exporter.c |  206 ++
 client/grilo-plugin/grl-dvb-daemon-exporter.h |   67 +
 client/grilo-plugin/grl-dvb-daemon-source.c   |  364 +++
 client/grilo-plugin/grl-dvb-daemon-source.h   |   59 +
 client/grilo-plugin/grl-dvb-daemon.xml        |   12 +
 configure.ac                                  |   42 +
 14 files changed, 12074 insertions(+), 2 deletions(-)
---
diff --git a/client/Makefile.am b/client/Makefile.am
index 0ca1b6e..d19aa42 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -1,10 +1,14 @@
 SUBDIRS = \
        gnomedvb
-       
+
 if ENABLE_TOTEM
 SUBDIRS += totem-plugin
 endif
-       
+
+if ENABLE_GRILO
+SUBDIRS += grilo-plugin
+endif
+
 gnomedvbbindir = $(bindir)
 gnomedvbbin_SCRIPTS = \
        gnome-dvb-control \
diff --git a/client/grilo-plugin/Makefile.am b/client/grilo-plugin/Makefile.am
new file mode 100644
index 0000000..250ca87
--- /dev/null
+++ b/client/grilo-plugin/Makefile.am
@@ -0,0 +1,32 @@
+ext_LTLIBRARIES =  \
+       libgrldvbdaemon.la
+
+libgrldvbdaemon_la_SOURCES =  \
+       grl-dvb-daemon-exporter.c \
+       grl-dvb-daemon-exporter.h \
+       grl-dvb-daemon-source.c \
+       grl-dvb-daemon-source.h \
+       gdd-channel-list.c \
+       gdd-channel-list.h \
+       gdd-device-group.c \
+       gdd-device-group.h \
+       gdd-manager.c \
+       gdd-manager.h
+
+libgrldvbdaemon_la_CFLAGS = \
+       $(GRILO_CFLAGS) \
+       -DG_LOG_DOMAIN=\"GrlDvbDaemon\" \
+       -DLOCALEDIR=\"$(localedir)\"
+
+libgrldvbdaemon_la_LIBADD = $(GRILO_LIBS)
+
+libgrldvbdaemon_la_LDFLAGS = \
+       -no-undefined        \
+       -module              \
+       -avoid-version
+
+extdir = $(GRL_PLUGINS_DIR)
+dvbdaemonxmldir        = $(GRL_PLUGINS_DIR)
+dvbdaemonxml_DATA = $(DVBDAEMON_PLUGIN_ID).xml
+
+EXTRA_DIST = $(dvbdaemonxml_DATA)
diff --git a/client/grilo-plugin/gdd-channel-list.c b/client/grilo-plugin/gdd-channel-list.c
new file mode 100644
index 0000000..89cedd8
--- /dev/null
+++ b/client/grilo-plugin/gdd-channel-list.c
@@ -0,0 +1,3192 @@
+/*
+ * Generated by gdbus-codegen 2.42.0. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gdd-channel-list.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#  include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+  GDBusArgInfo parent_struct;
+  gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+  GDBusMethodInfo parent_struct;
+  const gchar *signal_name;
+  gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+  GDBusSignalInfo parent_struct;
+  const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+  GDBusPropertyInfo parent_struct;
+  const gchar *hyphen_name;
+  gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+  GDBusInterfaceInfo parent_struct;
+  const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+  const _ExtendedGDBusPropertyInfo *info;
+  guint prop_id;
+  GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+  g_value_unset (&data->orig_value);
+  g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+  gboolean ret = FALSE;
+  guint n;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  if (g_strv_length (a) != g_strv_length (b))
+    goto out;
+  for (n = 0; a[n] != NULL; n++)
+    if (g_strcmp0 (a[n], b[n]) != 0)
+      goto out;
+  ret = TRUE;
+out:
+  return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+  gboolean ret = FALSE;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  ret = g_variant_equal (a, b);
+out:
+  return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+  gboolean ret = FALSE;
+  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+  switch (G_VALUE_TYPE (a))
+    {
+      case G_TYPE_BOOLEAN:
+        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+        break;
+      case G_TYPE_UCHAR:
+        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+        break;
+      case G_TYPE_INT:
+        ret = (g_value_get_int (a) == g_value_get_int (b));
+        break;
+      case G_TYPE_UINT:
+        ret = (g_value_get_uint (a) == g_value_get_uint (b));
+        break;
+      case G_TYPE_INT64:
+        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+        break;
+      case G_TYPE_UINT64:
+        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+        break;
+      case G_TYPE_DOUBLE:
+        {
+          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+          gdouble da = g_value_get_double (a);
+          gdouble db = g_value_get_double (b);
+          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+        }
+        break;
+      case G_TYPE_STRING:
+        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+        break;
+      case G_TYPE_VARIANT:
+        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+        break;
+      default:
+        if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+        else
+          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+        break;
+    }
+  return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.gnome.DVB.ChannelList
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:GddChannelList
+ * @title: GddChannelList
+ * @short_description: Generated C code for the org.gnome.DVB.ChannelList D-Bus interface
+ *
+ * This section contains code for working with the <link 
linkend="gdbus-interface-org-gnome-DVB-ChannelList.top_of_page">org.gnome.DVB.ChannelList</link> D-Bus 
interface in C.
+ */
+
+/* ---- Introspection data for org.gnome.DVB.ChannelList ---- */
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channels_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "au",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_channel_list__method_info_get_channels_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channels_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_channels =
+{
+  {
+    -1,
+    (gchar *) "GetChannels",
+    NULL,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channels_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channels",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_radio_channels_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "au",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_get_radio_channels_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_radio_channels_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_radio_channels =
+{
+  {
+    -1,
+    (gchar *) "GetRadioChannels",
+    NULL,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_radio_channels_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-radio-channels",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_tvchannels_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "au",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_channel_list__method_info_get_tvchannels_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_tvchannels_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_tvchannels =
+{
+  {
+    -1,
+    (gchar *) "GetTVChannels",
+    NULL,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_tvchannels_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-tvchannels",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_name_IN_ARG_channel_id =
+{
+  {
+    -1,
+    (gchar *) "channel_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_channel_list__method_info_get_channel_name_IN_ARG_pointers[] 
=
+{
+  &_gdd_channel_list__method_info_get_channel_name_IN_ARG_channel_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_name_OUT_ARG_channel_name =
+{
+  {
+    -1,
+    (gchar *) "channel_name",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_name_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_get_channel_name_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channel_name_OUT_ARG_channel_name,
+  &_gdd_channel_list__method_info_get_channel_name_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_channel_name =
+{
+  {
+    -1,
+    (gchar *) "GetChannelName",
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channel_name_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channel_name_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channel-name",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_network_IN_ARG_channel_id =
+{
+  {
+    -1,
+    (gchar *) "channel_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_get_channel_network_IN_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channel_network_IN_ARG_channel_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_network_OUT_ARG_network =
+{
+  {
+    -1,
+    (gchar *) "network",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_network_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_get_channel_network_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channel_network_OUT_ARG_network,
+  &_gdd_channel_list__method_info_get_channel_network_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_channel_network =
+{
+  {
+    -1,
+    (gchar *) "GetChannelNetwork",
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channel_network_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channel_network_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channel-network",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_is_radio_channel_IN_ARG_channel_id =
+{
+  {
+    -1,
+    (gchar *) "channel_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_channel_list__method_info_is_radio_channel_IN_ARG_pointers[] 
=
+{
+  &_gdd_channel_list__method_info_is_radio_channel_IN_ARG_channel_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_is_radio_channel_OUT_ARG_radio =
+{
+  {
+    -1,
+    (gchar *) "radio",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_is_radio_channel_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_is_radio_channel_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_is_radio_channel_OUT_ARG_radio,
+  &_gdd_channel_list__method_info_is_radio_channel_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_is_radio_channel =
+{
+  {
+    -1,
+    (gchar *) "IsRadioChannel",
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_is_radio_channel_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_is_radio_channel_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-is-radio-channel",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_url_IN_ARG_channel_id =
+{
+  {
+    -1,
+    (gchar *) "channel_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_channel_list__method_info_get_channel_url_IN_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channel_url_IN_ARG_channel_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_url_OUT_ARG_url =
+{
+  {
+    -1,
+    (gchar *) "url",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_url_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_channel_list__method_info_get_channel_url_OUT_ARG_pointers[] 
=
+{
+  &_gdd_channel_list__method_info_get_channel_url_OUT_ARG_url,
+  &_gdd_channel_list__method_info_get_channel_url_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_channel_url =
+{
+  {
+    -1,
+    (gchar *) "GetChannelURL",
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channel_url_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channel_url_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channel-url",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channel_infos_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "a(usbs)",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_get_channel_infos_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channel_infos_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_channel_infos =
+{
+  {
+    -1,
+    (gchar *) "GetChannelInfos",
+    NULL,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channel_infos_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channel-infos",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo 
_gdd_channel_list__method_info_get_channels_of_group_IN_ARG_channel_group_id =
+{
+  {
+    -1,
+    (gchar *) "channel_group_id",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_get_channels_of_group_IN_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channels_of_group_IN_ARG_channel_group_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channels_of_group_OUT_ARG_channel_ids =
+{
+  {
+    -1,
+    (gchar *) "channel_ids",
+    (gchar *) "au",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_get_channels_of_group_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_get_channels_of_group_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channels_of_group_OUT_ARG_channel_ids,
+  &_gdd_channel_list__method_info_get_channels_of_group_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_get_channels_of_group =
+{
+  {
+    -1,
+    (gchar *) "GetChannelsOfGroup",
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channels_of_group_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_get_channels_of_group_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channels-of-group",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_add_channel_to_group_IN_ARG_channel_id =
+{
+  {
+    -1,
+    (gchar *) "channel_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo 
_gdd_channel_list__method_info_add_channel_to_group_IN_ARG_channel_group_id =
+{
+  {
+    -1,
+    (gchar *) "channel_group_id",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_add_channel_to_group_IN_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_add_channel_to_group_IN_ARG_channel_id,
+  &_gdd_channel_list__method_info_add_channel_to_group_IN_ARG_channel_group_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_add_channel_to_group_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_add_channel_to_group_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_add_channel_to_group_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_add_channel_to_group =
+{
+  {
+    -1,
+    (gchar *) "AddChannelToGroup",
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_add_channel_to_group_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_add_channel_to_group_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-add-channel-to-group",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo 
_gdd_channel_list__method_info_remove_channel_from_group_IN_ARG_channel_id =
+{
+  {
+    -1,
+    (gchar *) "channel_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo 
_gdd_channel_list__method_info_remove_channel_from_group_IN_ARG_channel_group_id =
+{
+  {
+    -1,
+    (gchar *) "channel_group_id",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_remove_channel_from_group_IN_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_remove_channel_from_group_IN_ARG_channel_id,
+  &_gdd_channel_list__method_info_remove_channel_from_group_IN_ARG_channel_group_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__method_info_remove_channel_from_group_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_channel_list__method_info_remove_channel_from_group_OUT_ARG_pointers[] =
+{
+  &_gdd_channel_list__method_info_remove_channel_from_group_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_channel_list__method_info_remove_channel_from_group =
+{
+  {
+    -1,
+    (gchar *) "RemoveChannelFromGroup",
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_remove_channel_from_group_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_channel_list__method_info_remove_channel_from_group_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-remove-channel-from-group",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _gdd_channel_list__method_info_pointers[] =
+{
+  &_gdd_channel_list__method_info_get_channels,
+  &_gdd_channel_list__method_info_get_radio_channels,
+  &_gdd_channel_list__method_info_get_tvchannels,
+  &_gdd_channel_list__method_info_get_channel_name,
+  &_gdd_channel_list__method_info_get_channel_network,
+  &_gdd_channel_list__method_info_is_radio_channel,
+  &_gdd_channel_list__method_info_get_channel_url,
+  &_gdd_channel_list__method_info_get_channel_infos,
+  &_gdd_channel_list__method_info_get_channels_of_group,
+  &_gdd_channel_list__method_info_add_channel_to_group,
+  &_gdd_channel_list__method_info_remove_channel_from_group,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__signal_info_changed_ARG_channel_id =
+{
+  {
+    -1,
+    (gchar *) "channel_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_channel_list__signal_info_changed_ARG_type =
+{
+  {
+    -1,
+    (gchar *) "type",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_channel_list__signal_info_changed_ARG_pointers[] =
+{
+  &_gdd_channel_list__signal_info_changed_ARG_channel_id,
+  &_gdd_channel_list__signal_info_changed_ARG_type,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _gdd_channel_list__signal_info_changed =
+{
+  {
+    -1,
+    (gchar *) "Changed",
+    (GDBusArgInfo **) &_gdd_channel_list__signal_info_changed_ARG_pointers,
+    NULL
+  },
+  "changed"
+};
+
+static const _ExtendedGDBusSignalInfo * const _gdd_channel_list__signal_info_pointers[] =
+{
+  &_gdd_channel_list__signal_info_changed,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _gdd_channel_list__interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.gnome.DVB.ChannelList",
+    (GDBusMethodInfo **) &_gdd_channel_list__method_info_pointers,
+    (GDBusSignalInfo **) &_gdd_channel_list__signal_info_pointers,
+    NULL,
+    NULL
+  },
+  "",
+};
+
+
+/**
+ * gdd_channel_list__interface_info:
+ *
+ * Gets a machine-readable description of the <link 
linkend="gdbus-interface-org-gnome-DVB-ChannelList.top_of_page">org.gnome.DVB.ChannelList</link> D-Bus 
interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+gdd_channel_list__interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_gdd_channel_list__interface_info.parent_struct;
+}
+
+/**
+ * gdd_channel_list__override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #GddChannelList interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+gdd_channel_list__override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * GddChannelList:
+ *
+ * Abstract interface type for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-ChannelList.top_of_page">org.gnome.DVB.ChannelList</link>.
+ */
+
+/**
+ * GddChannelListIface:
+ * @parent_iface: The parent interface.
+ * @handle_add_channel_to_group: Handler for the #GddChannelList::handle-add-channel-to-group signal.
+ * @handle_get_channel_infos: Handler for the #GddChannelList::handle-get-channel-infos signal.
+ * @handle_get_channel_name: Handler for the #GddChannelList::handle-get-channel-name signal.
+ * @handle_get_channel_network: Handler for the #GddChannelList::handle-get-channel-network signal.
+ * @handle_get_channel_url: Handler for the #GddChannelList::handle-get-channel-url signal.
+ * @handle_get_channels: Handler for the #GddChannelList::handle-get-channels signal.
+ * @handle_get_channels_of_group: Handler for the #GddChannelList::handle-get-channels-of-group signal.
+ * @handle_get_radio_channels: Handler for the #GddChannelList::handle-get-radio-channels signal.
+ * @handle_get_tvchannels: Handler for the #GddChannelList::handle-get-tvchannels signal.
+ * @handle_is_radio_channel: Handler for the #GddChannelList::handle-is-radio-channel signal.
+ * @handle_remove_channel_from_group: Handler for the #GddChannelList::handle-remove-channel-from-group 
signal.
+ * @changed: Handler for the #GddChannelList::changed signal.
+ *
+ * Virtual table for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-ChannelList.top_of_page">org.gnome.DVB.ChannelList</link>.
+ */
+
+typedef GddChannelListIface GddChannelListInterface;
+G_DEFINE_INTERFACE (GddChannelList, gdd_channel_list_, G_TYPE_OBJECT);
+
+static void
+gdd_channel_list__default_init (GddChannelListIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * GddChannelList::handle-get-channels:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannels">GetChannels()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_channels() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channels",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_channels),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddChannelList::handle-get-radio-channels:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetRadioChannels">GetRadioChannels()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_radio_channels() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-radio-channels",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_radio_channels),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddChannelList::handle-get-tvchannels:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetTVChannels">GetTVChannels()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_tvchannels() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-tvchannels",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_tvchannels),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddChannelList::handle-get-channel-name:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelName">GetChannelName()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_channel_name() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channel-name",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_channel_name),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+  /**
+   * GddChannelList::handle-get-channel-network:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelNetwork">GetChannelNetwork()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_channel_network() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channel-network",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_channel_network),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+  /**
+   * GddChannelList::handle-is-radio-channel:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.IsRadioChannel">IsRadioChannel()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_is_radio_channel() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-is-radio-channel",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_is_radio_channel),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+  /**
+   * GddChannelList::handle-get-channel-url:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelURL">GetChannelURL()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_channel_url() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channel-url",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_channel_url),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+  /**
+   * GddChannelList::handle-get-channel-infos:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelInfos">GetChannelInfos()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_channel_infos() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channel-infos",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_channel_infos),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddChannelList::handle-get-channels-of-group:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_group_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelsOfGroup">GetChannelsOfGroup()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_get_channels_of_group() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channels-of-group",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_get_channels_of_group),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_INT);
+
+  /**
+   * GddChannelList::handle-add-channel-to-group:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_id: Argument passed by remote caller.
+   * @arg_channel_group_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.AddChannelToGroup">AddChannelToGroup()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_add_channel_to_group() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-add-channel-to-group",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_add_channel_to_group),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_INT);
+
+  /**
+   * GddChannelList::handle-remove-channel-from-group:
+   * @object: A #GddChannelList.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_id: Argument passed by remote caller.
+   * @arg_channel_group_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.RemoveChannelFromGroup">RemoveChannelFromGroup()</link> D-Bus 
method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_channel_list__complete_remove_channel_from_group() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-remove-channel-from-group",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, handle_remove_channel_from_group),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_INT);
+
+  /* GObject signals for received D-Bus signals: */
+  /**
+   * GddChannelList::changed:
+   * @object: A #GddChannelList.
+   * @arg_channel_id: Argument.
+   * @arg_type: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link 
linkend="gdbus-signal-org-gnome-DVB-ChannelList.Changed">"Changed"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit 
the D-Bus signal.
+   */
+  g_signal_new ("changed",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddChannelListIface, changed),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    2, G_TYPE_UINT, G_TYPE_UINT);
+
+}
+
+/**
+ * gdd_channel_list__emit_changed:
+ * @object: A #GddChannelList.
+ * @arg_channel_id: Argument to pass with the signal.
+ * @arg_type: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-gnome-DVB-ChannelList.Changed">"Changed"</link> D-Bus signal.
+ */
+void
+gdd_channel_list__emit_changed (
+    GddChannelList *object,
+    guint arg_channel_id,
+    guint arg_type)
+{
+  g_signal_emit_by_name (object, "changed", arg_channel_id, arg_type);
+}
+
+/**
+ * gdd_channel_list__call_get_channels:
+ * @proxy: A #GddChannelListProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannels">GetChannels()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_channels_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_get_channels_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_channel_list__call_get_channels (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannels",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_channels_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_channels().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_channels().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channels_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@au)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channels_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannels">GetChannels()</link> D-Bus method on @proxy. The 
calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_channels() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channels_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannels",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@au)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_radio_channels:
+ * @proxy: A #GddChannelListProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetRadioChannels">GetRadioChannels()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_radio_channels_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_get_radio_channels_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_channel_list__call_get_radio_channels (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetRadioChannels",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_radio_channels_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_radio_channels().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_radio_channels().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_radio_channels_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@au)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_radio_channels_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetRadioChannels">GetRadioChannels()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_radio_channels() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_radio_channels_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetRadioChannels",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@au)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_tvchannels:
+ * @proxy: A #GddChannelListProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetTVChannels">GetTVChannels()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_tvchannels_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_get_tvchannels_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_channel_list__call_get_tvchannels (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetTVChannels",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_tvchannels_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_tvchannels().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_tvchannels().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_tvchannels_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@au)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_tvchannels_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetTVChannels">GetTVChannels()</link> D-Bus method on @proxy. 
The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_tvchannels() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_tvchannels_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetTVChannels",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@au)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_name:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelName">GetChannelName()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_channel_name_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_get_channel_name_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_channel_list__call_get_channel_name (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannelName",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_channel_name_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_channel_name: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_channel_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_channel_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_name_finish (
+    GddChannelList *proxy,
+    gchar **out_channel_name,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_channel_name,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_name_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @out_channel_name: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelName">GetChannelName()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_channel_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_name_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gchar **out_channel_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannelName",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_channel_name,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_network:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelNetwork">GetChannelNetwork()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_channel_network_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_get_channel_network_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_channel_list__call_get_channel_network (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannelNetwork",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_channel_network_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_network: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_channel_network().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_channel_network().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_network_finish (
+    GddChannelList *proxy,
+    gchar **out_network,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_network,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_network_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @out_network: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelNetwork">GetChannelNetwork()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_channel_network() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_network_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gchar **out_network,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannelNetwork",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_network,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_is_radio_channel:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.IsRadioChannel">IsRadioChannel()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_is_radio_channel_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_is_radio_channel_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_channel_list__call_is_radio_channel (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "IsRadioChannel",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_is_radio_channel_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_radio: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_is_radio_channel().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_is_radio_channel().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_is_radio_channel_finish (
+    GddChannelList *proxy,
+    gboolean *out_radio,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(bb)",
+                 out_radio,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_is_radio_channel_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @out_radio: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.IsRadioChannel">IsRadioChannel()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_is_radio_channel() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_is_radio_channel_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gboolean *out_radio,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "IsRadioChannel",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(bb)",
+                 out_radio,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_url:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelURL">GetChannelURL()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_channel_url_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_get_channel_url_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_channel_list__call_get_channel_url (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannelURL",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_channel_url_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_url: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_channel_url().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_channel_url().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_url_finish (
+    GddChannelList *proxy,
+    gchar **out_url,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_url,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_url_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @out_url: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelURL">GetChannelURL()</link> D-Bus method on @proxy. 
The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_channel_url() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_url_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gchar **out_url,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannelURL",
+    g_variant_new ("(u)",
+                   arg_channel_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_url,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_infos:
+ * @proxy: A #GddChannelListProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelInfos">GetChannelInfos()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_channel_infos_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_get_channel_infos_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_channel_list__call_get_channel_infos (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannelInfos",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_channel_infos_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_channel_infos().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_channel_infos().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_infos_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@a(usbs))",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channel_infos_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelInfos">GetChannelInfos()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_channel_infos() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channel_infos_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannelInfos",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@a(usbs))",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channels_of_group:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelsOfGroup">GetChannelsOfGroup()</link> D-Bus method 
on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_get_channels_of_group_finish() to get the result of the 
operation.
+ *
+ * See gdd_channel_list__call_get_channels_of_group_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_channel_list__call_get_channels_of_group (
+    GddChannelList *proxy,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannelsOfGroup",
+    g_variant_new ("(i)",
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_get_channels_of_group_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_channel_ids: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_get_channels_of_group().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_get_channels_of_group().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channels_of_group_finish (
+    GddChannelList *proxy,
+    GVariant **out_channel_ids,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@aub)",
+                 out_channel_ids,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_get_channels_of_group_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @out_channel_ids: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelsOfGroup">GetChannelsOfGroup()</link> D-Bus method 
on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_get_channels_of_group() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_get_channels_of_group_sync (
+    GddChannelList *proxy,
+    gint arg_channel_group_id,
+    GVariant **out_channel_ids,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannelsOfGroup",
+    g_variant_new ("(i)",
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@aub)",
+                 out_channel_ids,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_add_channel_to_group:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.AddChannelToGroup">AddChannelToGroup()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_add_channel_to_group_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__call_add_channel_to_group_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_channel_list__call_add_channel_to_group (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "AddChannelToGroup",
+    g_variant_new ("(ui)",
+                   arg_channel_id,
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_add_channel_to_group_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_add_channel_to_group().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_add_channel_to_group().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_add_channel_to_group_finish (
+    GddChannelList *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_add_channel_to_group_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.AddChannelToGroup">AddChannelToGroup()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_add_channel_to_group() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_add_channel_to_group_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "AddChannelToGroup",
+    g_variant_new ("(ui)",
+                   arg_channel_id,
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_remove_channel_from_group:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.RemoveChannelFromGroup">RemoveChannelFromGroup()</link> D-Bus 
method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__call_remove_channel_from_group_finish() to get the result of the 
operation.
+ *
+ * See gdd_channel_list__call_remove_channel_from_group_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_channel_list__call_remove_channel_from_group (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "RemoveChannelFromGroup",
+    g_variant_new ("(ui)",
+                   arg_channel_id,
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_channel_list__call_remove_channel_from_group_finish:
+ * @proxy: A #GddChannelListProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__call_remove_channel_from_group().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_channel_list__call_remove_channel_from_group().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_remove_channel_from_group_finish (
+    GddChannelList *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__call_remove_channel_from_group_sync:
+ * @proxy: A #GddChannelListProxy.
+ * @arg_channel_id: Argument to pass with the method invocation.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.RemoveChannelFromGroup">RemoveChannelFromGroup()</link> D-Bus 
method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__call_remove_channel_from_group() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_channel_list__call_remove_channel_from_group_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "RemoveChannelFromGroup",
+    g_variant_new ("(ui)",
+                   arg_channel_id,
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_channel_list__complete_get_channels:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannels">GetChannels()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_channels (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@au)",
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_get_radio_channels:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetRadioChannels">GetRadioChannels()</link> D-Bus method. If 
you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_radio_channels (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@au)",
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_get_tvchannels:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetTVChannels">GetTVChannels()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_tvchannels (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@au)",
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_get_channel_name:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @channel_name: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelName">GetChannelName()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_channel_name (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *channel_name,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(sb)",
+                   channel_name,
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_get_channel_network:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @network: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelNetwork">GetChannelNetwork()</link> D-Bus method. 
If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_channel_network (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *network,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(sb)",
+                   network,
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_is_radio_channel:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @radio: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.IsRadioChannel">IsRadioChannel()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_is_radio_channel (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    gboolean radio,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(bb)",
+                   radio,
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_get_channel_url:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @url: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelURL">GetChannelURL()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_channel_url (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *url,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(sb)",
+                   url,
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_get_channel_infos:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelInfos">GetChannelInfos()</link> D-Bus method. If 
you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_channel_infos (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@a(usbs))",
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_get_channels_of_group:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @channel_ids: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.GetChannelsOfGroup">GetChannelsOfGroup()</link> D-Bus method. 
If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_get_channels_of_group (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *channel_ids,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@aub)",
+                   channel_ids,
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_add_channel_to_group:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.AddChannelToGroup">AddChannelToGroup()</link> D-Bus method. 
If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_add_channel_to_group (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/**
+ * gdd_channel_list__complete_remove_channel_from_group:
+ * @object: A #GddChannelList.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-ChannelList.RemoveChannelFromGroup">RemoveChannelFromGroup()</link> D-Bus 
method. If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_channel_list__complete_remove_channel_from_group (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * GddChannelListProxy:
+ *
+ * The #GddChannelListProxy structure contains only private data and should only be accessed using the 
provided API.
+ */
+
+/**
+ * GddChannelListProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #GddChannelListProxy.
+ */
+
+struct _GddChannelListProxyPrivate
+{
+  GData *qdata;
+};
+
+static void gdd_channel_list__proxy_iface_init (GddChannelListIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (GddChannelListProxy, gdd_channel_list__proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (GddChannelListProxy)
+                         G_IMPLEMENT_INTERFACE (GDD_CHANNEL_LIST_TYPE_, gdd_channel_list__proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (GddChannelListProxy, gdd_channel_list__proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (GDD_CHANNEL_LIST_TYPE_, gdd_channel_list__proxy_iface_init));
+
+#endif
+static void
+gdd_channel_list__proxy_finalize (GObject *object)
+{
+  GddChannelListProxy *proxy = GDD_CHANNEL_LIST__PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (gdd_channel_list__proxy_parent_class)->finalize (object);
+}
+
+static void
+gdd_channel_list__proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+gdd_channel_list__proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+gdd_channel_list__proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) 
&_gdd_channel_list__interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], GDD_CHANNEL_LIST_TYPE_);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, GDD_CHANNEL_LIST_TYPE_);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+gdd_channel_list__proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  GddChannelListProxy *proxy = GDD_CHANNEL_LIST__PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_channel_list__interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_channel_list__interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+gdd_channel_list__proxy_init (GddChannelListProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = gdd_channel_list__proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, GDD_CHANNEL_LIST_TYPE__PROXY, 
GddChannelListProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), gdd_channel_list__interface_info ());
+}
+
+static void
+gdd_channel_list__proxy_class_init (GddChannelListProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = gdd_channel_list__proxy_finalize;
+  gobject_class->get_property = gdd_channel_list__proxy_get_property;
+  gobject_class->set_property = gdd_channel_list__proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = gdd_channel_list__proxy_g_signal;
+  proxy_class->g_properties_changed = gdd_channel_list__proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (GddChannelListProxyPrivate));
+#endif
+}
+
+static void
+gdd_channel_list__proxy_iface_init (GddChannelListIface *iface)
+{
+}
+
+/**
+ * gdd_channel_list__proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus 
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-ChannelList.top_of_page">org.gnome.DVB.ChannelList</link>. See 
g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__proxy_new_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+gdd_channel_list__proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (GDD_CHANNEL_LIST_TYPE__PROXY, G_PRIORITY_DEFAULT, cancellable, callback, 
user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, 
"g-interface-name", "org.gnome.DVB.ChannelList", NULL);
+}
+
+/**
+ * gdd_channel_list__proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdd_channel_list__proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with gdd_channel_list__proxy_new().
+ *
+ * Returns: (transfer full) (type GddChannelListProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddChannelList *
+gdd_channel_list__proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return GDD_CHANNEL_LIST_ (ret);
+  else
+    return NULL;
+}
+
+/**
+ * gdd_channel_list__proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus 
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-ChannelList.top_of_page">org.gnome.DVB.ChannelList</link>. See 
g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type GddChannelListProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddChannelList *
+gdd_channel_list__proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (GDD_CHANNEL_LIST_TYPE__PROXY, cancellable, error, "g-flags", flags, "g-name", name, 
"g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.gnome.DVB.ChannelList", 
NULL);
+  if (ret != NULL)
+    return GDD_CHANNEL_LIST_ (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * gdd_channel_list__proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like gdd_channel_list__proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_channel_list__proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See gdd_channel_list__proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+gdd_channel_list__proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (GDD_CHANNEL_LIST_TYPE__PROXY, G_PRIORITY_DEFAULT, cancellable, callback, 
user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, 
"g-interface-name", "org.gnome.DVB.ChannelList", NULL);
+}
+
+/**
+ * gdd_channel_list__proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_channel_list__proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with gdd_channel_list__proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type GddChannelListProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddChannelList *
+gdd_channel_list__proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return GDD_CHANNEL_LIST_ (ret);
+  else
+    return NULL;
+}
+
+/**
+ * gdd_channel_list__proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like gdd_channel_list__proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See gdd_channel_list__proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type GddChannelListProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddChannelList *
+gdd_channel_list__proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (GDD_CHANNEL_LIST_TYPE__PROXY, cancellable, error, "g-flags", flags, "g-name", name, 
"g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.gnome.DVB.ChannelList", NULL);
+  if (ret != NULL)
+    return GDD_CHANNEL_LIST_ (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * GddChannelListSkeleton:
+ *
+ * The #GddChannelListSkeleton structure contains only private data and should only be accessed using the 
provided API.
+ */
+
+/**
+ * GddChannelListSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #GddChannelListSkeleton.
+ */
+
+struct _GddChannelListSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_gdd_channel_list__skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  GddChannelListSkeleton *skeleton = GDD_CHANNEL_LIST__SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], GDD_CHANNEL_LIST_TYPE_);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list 
(g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, GDD_CHANNEL_LIST_TYPE_);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s 
is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_gdd_channel_list__skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  GddChannelListSkeleton *skeleton = GDD_CHANNEL_LIST__SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_channel_list__interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", 
property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_gdd_channel_list__skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  GddChannelListSkeleton *skeleton = GDD_CHANNEL_LIST__SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_channel_list__interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", 
property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _gdd_channel_list__skeleton_vtable =
+{
+  _gdd_channel_list__skeleton_handle_method_call,
+  _gdd_channel_list__skeleton_handle_get_property,
+  _gdd_channel_list__skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+gdd_channel_list__skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return gdd_channel_list__interface_info ();
+}
+
+static GDBusInterfaceVTable *
+gdd_channel_list__skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_gdd_channel_list__skeleton_vtable;
+}
+
+static GVariant *
+gdd_channel_list__skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  GddChannelListSkeleton *skeleton = GDD_CHANNEL_LIST__SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_gdd_channel_list__interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _gdd_channel_list__interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _gdd_channel_list__interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _gdd_channel_list__skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection 
(G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path 
(G_DBUS_INTERFACE_SKELETON (skeleton)), "org.gnome.DVB.ChannelList", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+gdd_channel_list__skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_gdd_channel_list__on_signal_changed (
+    GddChannelList *object,
+    guint arg_channel_id,
+    guint arg_type)
+{
+  GddChannelListSkeleton *skeleton = GDD_CHANNEL_LIST__SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(uu)",
+                   arg_channel_id,
+                   arg_type));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 
"org.gnome.DVB.ChannelList", "Changed",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void gdd_channel_list__skeleton_iface_init (GddChannelListIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (GddChannelListSkeleton, gdd_channel_list__skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (GddChannelListSkeleton)
+                         G_IMPLEMENT_INTERFACE (GDD_CHANNEL_LIST_TYPE_, 
gdd_channel_list__skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (GddChannelListSkeleton, gdd_channel_list__skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (GDD_CHANNEL_LIST_TYPE_, 
gdd_channel_list__skeleton_iface_init));
+
+#endif
+static void
+gdd_channel_list__skeleton_finalize (GObject *object)
+{
+  GddChannelListSkeleton *skeleton = GDD_CHANNEL_LIST__SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (gdd_channel_list__skeleton_parent_class)->finalize (object);
+}
+
+static void
+gdd_channel_list__skeleton_init (GddChannelListSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = gdd_channel_list__skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, GDD_CHANNEL_LIST_TYPE__SKELETON, 
GddChannelListSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+gdd_channel_list__skeleton_class_init (GddChannelListSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = gdd_channel_list__skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = gdd_channel_list__skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = gdd_channel_list__skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = gdd_channel_list__skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = gdd_channel_list__skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (GddChannelListSkeletonPrivate));
+#endif
+}
+
+static void
+gdd_channel_list__skeleton_iface_init (GddChannelListIface *iface)
+{
+  iface->changed = _gdd_channel_list__on_signal_changed;
+}
+
+/**
+ * gdd_channel_list__skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-ChannelList.top_of_page">org.gnome.DVB.ChannelList</link>.
+ *
+ * Returns: (transfer full) (type GddChannelListSkeleton): The skeleton object.
+ */
+GddChannelList *
+gdd_channel_list__skeleton_new (void)
+{
+  return GDD_CHANNEL_LIST_ (g_object_new (GDD_CHANNEL_LIST_TYPE__SKELETON, NULL));
+}
+
diff --git a/client/grilo-plugin/gdd-channel-list.h b/client/grilo-plugin/gdd-channel-list.h
new file mode 100644
index 0000000..f2ecf55
--- /dev/null
+++ b/client/grilo-plugin/gdd-channel-list.h
@@ -0,0 +1,496 @@
+/*
+ * Generated by gdbus-codegen 2.42.0. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifndef __GDD_CHANNEL_LIST_H__
+#define __GDD_CHANNEL_LIST_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.gnome.DVB.ChannelList */
+
+#define GDD_CHANNEL_LIST_TYPE_ (gdd_channel_list__get_type ())
+#define GDD_CHANNEL_LIST_(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_CHANNEL_LIST_TYPE_, GddChannelList))
+#define GDD_CHANNEL_LIST_IS_(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_CHANNEL_LIST_TYPE_))
+#define GDD_CHANNEL_LIST__GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), GDD_CHANNEL_LIST_TYPE_, 
GddChannelListIface))
+
+struct _GddChannelList;
+typedef struct _GddChannelList GddChannelList;
+typedef struct _GddChannelListIface GddChannelListIface;
+
+struct _GddChannelListIface
+{
+  GTypeInterface parent_iface;
+
+
+  gboolean (*handle_add_channel_to_group) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_channel_id,
+    gint arg_channel_group_id);
+
+  gboolean (*handle_get_channel_infos) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_channel_name) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_channel_id);
+
+  gboolean (*handle_get_channel_network) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_channel_id);
+
+  gboolean (*handle_get_channel_url) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_channel_id);
+
+  gboolean (*handle_get_channels) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_channels_of_group) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    gint arg_channel_group_id);
+
+  gboolean (*handle_get_radio_channels) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_tvchannels) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_is_radio_channel) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_channel_id);
+
+  gboolean (*handle_remove_channel_from_group) (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_channel_id,
+    gint arg_channel_group_id);
+
+  void (*changed) (
+    GddChannelList *object,
+    guint arg_channel_id,
+    guint arg_type);
+
+};
+
+GType gdd_channel_list__get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *gdd_channel_list__interface_info (void);
+guint gdd_channel_list__override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void gdd_channel_list__complete_get_channels (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result);
+
+void gdd_channel_list__complete_get_radio_channels (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result);
+
+void gdd_channel_list__complete_get_tvchannels (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result);
+
+void gdd_channel_list__complete_get_channel_name (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *channel_name,
+    gboolean result);
+
+void gdd_channel_list__complete_get_channel_network (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *network,
+    gboolean result);
+
+void gdd_channel_list__complete_is_radio_channel (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    gboolean radio,
+    gboolean result);
+
+void gdd_channel_list__complete_get_channel_url (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *url,
+    gboolean result);
+
+void gdd_channel_list__complete_get_channel_infos (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result);
+
+void gdd_channel_list__complete_get_channels_of_group (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *channel_ids,
+    gboolean result);
+
+void gdd_channel_list__complete_add_channel_to_group (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+void gdd_channel_list__complete_remove_channel_from_group (
+    GddChannelList *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+
+
+/* D-Bus signal emissions functions: */
+void gdd_channel_list__emit_changed (
+    GddChannelList *object,
+    guint arg_channel_id,
+    guint arg_type);
+
+
+
+/* D-Bus method calls: */
+void gdd_channel_list__call_get_channels (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_channels_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_channels_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_get_radio_channels (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_radio_channels_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_radio_channels_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_get_tvchannels (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_tvchannels_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_tvchannels_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_get_channel_name (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_channel_name_finish (
+    GddChannelList *proxy,
+    gchar **out_channel_name,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_channel_name_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gchar **out_channel_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_get_channel_network (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_channel_network_finish (
+    GddChannelList *proxy,
+    gchar **out_network,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_channel_network_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gchar **out_network,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_is_radio_channel (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_is_radio_channel_finish (
+    GddChannelList *proxy,
+    gboolean *out_radio,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_is_radio_channel_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gboolean *out_radio,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_get_channel_url (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_channel_url_finish (
+    GddChannelList *proxy,
+    gchar **out_url,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_channel_url_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gchar **out_url,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_get_channel_infos (
+    GddChannelList *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_channel_infos_finish (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_channel_infos_sync (
+    GddChannelList *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_get_channels_of_group (
+    GddChannelList *proxy,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_get_channels_of_group_finish (
+    GddChannelList *proxy,
+    GVariant **out_channel_ids,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_get_channels_of_group_sync (
+    GddChannelList *proxy,
+    gint arg_channel_group_id,
+    GVariant **out_channel_ids,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_add_channel_to_group (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_add_channel_to_group_finish (
+    GddChannelList *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_add_channel_to_group_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_channel_list__call_remove_channel_from_group (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_channel_list__call_remove_channel_from_group_finish (
+    GddChannelList *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_channel_list__call_remove_channel_from_group_sync (
+    GddChannelList *proxy,
+    guint arg_channel_id,
+    gint arg_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+
+
+/* ---- */
+
+#define GDD_CHANNEL_LIST_TYPE__PROXY (gdd_channel_list__proxy_get_type ())
+#define GDD_CHANNEL_LIST__PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_CHANNEL_LIST_TYPE__PROXY, 
GddChannelListProxy))
+#define GDD_CHANNEL_LIST__PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GDD_CHANNEL_LIST_TYPE__PROXY, 
GddChannelListProxyClass))
+#define GDD_CHANNEL_LIST__PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDD_CHANNEL_LIST_TYPE__PROXY, 
GddChannelListProxyClass))
+#define GDD_CHANNEL_LIST_IS__PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_CHANNEL_LIST_TYPE__PROXY))
+#define GDD_CHANNEL_LIST_IS__PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDD_CHANNEL_LIST_TYPE__PROXY))
+
+typedef struct _GddChannelListProxy GddChannelListProxy;
+typedef struct _GddChannelListProxyClass GddChannelListProxyClass;
+typedef struct _GddChannelListProxyPrivate GddChannelListProxyPrivate;
+
+struct _GddChannelListProxy
+{
+  /*< private >*/
+  GDBusProxy parent_instance;
+  GddChannelListProxyPrivate *priv;
+};
+
+struct _GddChannelListProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+GType gdd_channel_list__proxy_get_type (void) G_GNUC_CONST;
+
+void gdd_channel_list__proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data);
+GddChannelList *gdd_channel_list__proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error);
+GddChannelList *gdd_channel_list__proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error);
+
+void gdd_channel_list__proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data);
+GddChannelList *gdd_channel_list__proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error);
+GddChannelList *gdd_channel_list__proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error);
+
+
+/* ---- */
+
+#define GDD_CHANNEL_LIST_TYPE__SKELETON (gdd_channel_list__skeleton_get_type ())
+#define GDD_CHANNEL_LIST__SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_CHANNEL_LIST_TYPE__SKELETON, 
GddChannelListSkeleton))
+#define GDD_CHANNEL_LIST__SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GDD_CHANNEL_LIST_TYPE__SKELETON, 
GddChannelListSkeletonClass))
+#define GDD_CHANNEL_LIST__SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), 
GDD_CHANNEL_LIST_TYPE__SKELETON, GddChannelListSkeletonClass))
+#define GDD_CHANNEL_LIST_IS__SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_CHANNEL_LIST_TYPE__SKELETON))
+#define GDD_CHANNEL_LIST_IS__SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), 
GDD_CHANNEL_LIST_TYPE__SKELETON))
+
+typedef struct _GddChannelListSkeleton GddChannelListSkeleton;
+typedef struct _GddChannelListSkeletonClass GddChannelListSkeletonClass;
+typedef struct _GddChannelListSkeletonPrivate GddChannelListSkeletonPrivate;
+
+struct _GddChannelListSkeleton
+{
+  /*< private >*/
+  GDBusInterfaceSkeleton parent_instance;
+  GddChannelListSkeletonPrivate *priv;
+};
+
+struct _GddChannelListSkeletonClass
+{
+  GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType gdd_channel_list__skeleton_get_type (void) G_GNUC_CONST;
+
+GddChannelList *gdd_channel_list__skeleton_new (void);
+
+
+G_END_DECLS
+
+#endif /* __GDD_CHANNEL_LIST_H__ */
diff --git a/client/grilo-plugin/gdd-device-group.c b/client/grilo-plugin/gdd-device-group.c
new file mode 100644
index 0000000..1067482
--- /dev/null
+++ b/client/grilo-plugin/gdd-device-group.c
@@ -0,0 +1,3166 @@
+/*
+ * Generated by gdbus-codegen 2.42.0. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gdd-device-group.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#  include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+  GDBusArgInfo parent_struct;
+  gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+  GDBusMethodInfo parent_struct;
+  const gchar *signal_name;
+  gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+  GDBusSignalInfo parent_struct;
+  const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+  GDBusPropertyInfo parent_struct;
+  const gchar *hyphen_name;
+  gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+  GDBusInterfaceInfo parent_struct;
+  const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+  const _ExtendedGDBusPropertyInfo *info;
+  guint prop_id;
+  GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+  g_value_unset (&data->orig_value);
+  g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+  gboolean ret = FALSE;
+  guint n;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  if (g_strv_length (a) != g_strv_length (b))
+    goto out;
+  for (n = 0; a[n] != NULL; n++)
+    if (g_strcmp0 (a[n], b[n]) != 0)
+      goto out;
+  ret = TRUE;
+out:
+  return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+  gboolean ret = FALSE;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  ret = g_variant_equal (a, b);
+out:
+  return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+  gboolean ret = FALSE;
+  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+  switch (G_VALUE_TYPE (a))
+    {
+      case G_TYPE_BOOLEAN:
+        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+        break;
+      case G_TYPE_UCHAR:
+        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+        break;
+      case G_TYPE_INT:
+        ret = (g_value_get_int (a) == g_value_get_int (b));
+        break;
+      case G_TYPE_UINT:
+        ret = (g_value_get_uint (a) == g_value_get_uint (b));
+        break;
+      case G_TYPE_INT64:
+        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+        break;
+      case G_TYPE_UINT64:
+        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+        break;
+      case G_TYPE_DOUBLE:
+        {
+          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+          gdouble da = g_value_get_double (a);
+          gdouble db = g_value_get_double (b);
+          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+        }
+        break;
+      case G_TYPE_STRING:
+        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+        break;
+      case G_TYPE_VARIANT:
+        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+        break;
+      default:
+        if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+        else
+          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+        break;
+    }
+  return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.gnome.DVB.DeviceGroup
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:GddDeviceGroup
+ * @title: GddDeviceGroup
+ * @short_description: Generated C code for the org.gnome.DVB.DeviceGroup D-Bus interface
+ *
+ * This section contains code for working with the <link 
linkend="gdbus-interface-org-gnome-DVB-DeviceGroup.top_of_page">org.gnome.DVB.DeviceGroup</link> D-Bus 
interface in C.
+ */
+
+/* ---- Introspection data for org.gnome.DVB.DeviceGroup ---- */
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_type_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_get_type_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_type_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_get_type =
+{
+  {
+    -1,
+    (gchar *) "GetType",
+    NULL,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_type_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-type",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_recorder_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "o",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_get_recorder_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_recorder_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_get_recorder =
+{
+  {
+    -1,
+    (gchar *) "GetRecorder",
+    NULL,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_recorder_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-recorder",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_add_device_IN_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_add_device_IN_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_add_device_IN_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_add_device_IN_ARG_adapter,
+  &_gdd_device_group__method_info_add_device_IN_ARG_frontend,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_add_device_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_add_device_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_add_device_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_add_device =
+{
+  {
+    -1,
+    (gchar *) "AddDevice",
+    (GDBusArgInfo **) &_gdd_device_group__method_info_add_device_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_add_device_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-add-device",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_remove_device_IN_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_remove_device_IN_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_remove_device_IN_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_remove_device_IN_ARG_adapter,
+  &_gdd_device_group__method_info_remove_device_IN_ARG_frontend,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_remove_device_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_remove_device_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_remove_device_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_remove_device =
+{
+  {
+    -1,
+    (gchar *) "RemoveDevice",
+    (GDBusArgInfo **) &_gdd_device_group__method_info_remove_device_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_remove_device_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-remove-device",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_channel_list_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "o",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_device_group__method_info_get_channel_list_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_channel_list_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_get_channel_list =
+{
+  {
+    -1,
+    (gchar *) "GetChannelList",
+    NULL,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_channel_list_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channel-list",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_name_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_get_name_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_name_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_get_name =
+{
+  {
+    -1,
+    (gchar *) "GetName",
+    NULL,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_name_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-name",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_set_name_IN_ARG_name =
+{
+  {
+    -1,
+    (gchar *) "name",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_set_name_IN_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_set_name_IN_ARG_name,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_set_name_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_set_name_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_set_name_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_set_name =
+{
+  {
+    -1,
+    (gchar *) "SetName",
+    (GDBusArgInfo **) &_gdd_device_group__method_info_set_name_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_set_name_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-set-name",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_members_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_get_members_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_members_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_get_members =
+{
+  {
+    -1,
+    (gchar *) "GetMembers",
+    NULL,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_members_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-members",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_schedule_IN_ARG_channel_sid =
+{
+  {
+    -1,
+    (gchar *) "channel_sid",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_get_schedule_IN_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_schedule_IN_ARG_channel_sid,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_schedule_OUT_ARG_opath =
+{
+  {
+    -1,
+    (gchar *) "opath",
+    (gchar *) "o",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_schedule_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__method_info_get_schedule_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_schedule_OUT_ARG_opath,
+  &_gdd_device_group__method_info_get_schedule_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_get_schedule =
+{
+  {
+    -1,
+    (gchar *) "GetSchedule",
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_schedule_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_schedule_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-schedule",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_get_recordings_directory_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_device_group__method_info_get_recordings_directory_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_get_recordings_directory_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_get_recordings_directory =
+{
+  {
+    -1,
+    (gchar *) "GetRecordingsDirectory",
+    NULL,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_get_recordings_directory_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-recordings-directory",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_set_recordings_directory_IN_ARG_location =
+{
+  {
+    -1,
+    (gchar *) "location",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_device_group__method_info_set_recordings_directory_IN_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_set_recordings_directory_IN_ARG_location,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__method_info_set_recordings_directory_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_device_group__method_info_set_recordings_directory_OUT_ARG_pointers[] =
+{
+  &_gdd_device_group__method_info_set_recordings_directory_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_device_group__method_info_set_recordings_directory =
+{
+  {
+    -1,
+    (gchar *) "SetRecordingsDirectory",
+    (GDBusArgInfo **) &_gdd_device_group__method_info_set_recordings_directory_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_device_group__method_info_set_recordings_directory_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-set-recordings-directory",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _gdd_device_group__method_info_pointers[] =
+{
+  &_gdd_device_group__method_info_get_type,
+  &_gdd_device_group__method_info_get_recorder,
+  &_gdd_device_group__method_info_add_device,
+  &_gdd_device_group__method_info_remove_device,
+  &_gdd_device_group__method_info_get_channel_list,
+  &_gdd_device_group__method_info_get_name,
+  &_gdd_device_group__method_info_set_name,
+  &_gdd_device_group__method_info_get_members,
+  &_gdd_device_group__method_info_get_schedule,
+  &_gdd_device_group__method_info_get_recordings_directory,
+  &_gdd_device_group__method_info_set_recordings_directory,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__signal_info_device_added_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__signal_info_device_added_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__signal_info_device_added_ARG_pointers[] =
+{
+  &_gdd_device_group__signal_info_device_added_ARG_adapter,
+  &_gdd_device_group__signal_info_device_added_ARG_frontend,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _gdd_device_group__signal_info_device_added =
+{
+  {
+    -1,
+    (gchar *) "DeviceAdded",
+    (GDBusArgInfo **) &_gdd_device_group__signal_info_device_added_ARG_pointers,
+    NULL
+  },
+  "device-added"
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__signal_info_device_removed_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_device_group__signal_info_device_removed_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_device_group__signal_info_device_removed_ARG_pointers[] =
+{
+  &_gdd_device_group__signal_info_device_removed_ARG_adapter,
+  &_gdd_device_group__signal_info_device_removed_ARG_frontend,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _gdd_device_group__signal_info_device_removed =
+{
+  {
+    -1,
+    (gchar *) "DeviceRemoved",
+    (GDBusArgInfo **) &_gdd_device_group__signal_info_device_removed_ARG_pointers,
+    NULL
+  },
+  "device-removed"
+};
+
+static const _ExtendedGDBusSignalInfo * const _gdd_device_group__signal_info_pointers[] =
+{
+  &_gdd_device_group__signal_info_device_added,
+  &_gdd_device_group__signal_info_device_removed,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _gdd_device_group__interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.gnome.DVB.DeviceGroup",
+    (GDBusMethodInfo **) &_gdd_device_group__method_info_pointers,
+    (GDBusSignalInfo **) &_gdd_device_group__signal_info_pointers,
+    NULL,
+    NULL
+  },
+  "",
+};
+
+
+/**
+ * gdd_device_group__interface_info:
+ *
+ * Gets a machine-readable description of the <link 
linkend="gdbus-interface-org-gnome-DVB-DeviceGroup.top_of_page">org.gnome.DVB.DeviceGroup</link> D-Bus 
interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+gdd_device_group__interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_gdd_device_group__interface_info.parent_struct;
+}
+
+/**
+ * gdd_device_group__override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #GddDeviceGroup interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+gdd_device_group__override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * GddDeviceGroup:
+ *
+ * Abstract interface type for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-DeviceGroup.top_of_page">org.gnome.DVB.DeviceGroup</link>.
+ */
+
+/**
+ * GddDeviceGroupIface:
+ * @parent_iface: The parent interface.
+ * @handle_add_device: Handler for the #GddDeviceGroup::handle-add-device signal.
+ * @handle_get_channel_list: Handler for the #GddDeviceGroup::handle-get-channel-list signal.
+ * @handle_get_members: Handler for the #GddDeviceGroup::handle-get-members signal.
+ * @handle_get_name: Handler for the #GddDeviceGroup::handle-get-name signal.
+ * @handle_get_recorder: Handler for the #GddDeviceGroup::handle-get-recorder signal.
+ * @handle_get_recordings_directory: Handler for the #GddDeviceGroup::handle-get-recordings-directory signal.
+ * @handle_get_schedule: Handler for the #GddDeviceGroup::handle-get-schedule signal.
+ * @handle_get_type: Handler for the #GddDeviceGroup::handle-get-type signal.
+ * @handle_remove_device: Handler for the #GddDeviceGroup::handle-remove-device signal.
+ * @handle_set_name: Handler for the #GddDeviceGroup::handle-set-name signal.
+ * @handle_set_recordings_directory: Handler for the #GddDeviceGroup::handle-set-recordings-directory signal.
+ * @device_added: Handler for the #GddDeviceGroup::device-added signal.
+ * @device_removed: Handler for the #GddDeviceGroup::device-removed signal.
+ *
+ * Virtual table for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-DeviceGroup.top_of_page">org.gnome.DVB.DeviceGroup</link>.
+ */
+
+typedef GddDeviceGroupIface GddDeviceGroupInterface;
+G_DEFINE_INTERFACE (GddDeviceGroup, gdd_device_group_, G_TYPE_OBJECT);
+
+static void
+gdd_device_group__default_init (GddDeviceGroupIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * GddDeviceGroup::handle-get-type:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetType">GetType()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_get_type() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-type",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_get_type),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddDeviceGroup::handle-get-recorder:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecorder">GetRecorder()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_get_recorder() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-recorder",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_get_recorder),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddDeviceGroup::handle-add-device:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_adapter: Argument passed by remote caller.
+   * @arg_frontend: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.AddDevice">AddDevice()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_add_device() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-add-device",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_add_device),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+  /**
+   * GddDeviceGroup::handle-remove-device:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_adapter: Argument passed by remote caller.
+   * @arg_frontend: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.RemoveDevice">RemoveDevice()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_remove_device() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-remove-device",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_remove_device),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+  /**
+   * GddDeviceGroup::handle-get-channel-list:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetChannelList">GetChannelList()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_get_channel_list() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channel-list",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_get_channel_list),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddDeviceGroup::handle-get-name:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetName">GetName()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_get_name() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-name",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_get_name),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddDeviceGroup::handle-set-name:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_name: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetName">SetName()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_set_name() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-set-name",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_set_name),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+
+  /**
+   * GddDeviceGroup::handle-get-members:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetMembers">GetMembers()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_get_members() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-members",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_get_members),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddDeviceGroup::handle-get-schedule:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_sid: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetSchedule">GetSchedule()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_get_schedule() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-schedule",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_get_schedule),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+  /**
+   * GddDeviceGroup::handle-get-recordings-directory:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecordingsDirectory">GetRecordingsDirectory()</link> D-Bus 
method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_get_recordings_directory() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-recordings-directory",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_get_recordings_directory),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddDeviceGroup::handle-set-recordings-directory:
+   * @object: A #GddDeviceGroup.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_location: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetRecordingsDirectory">SetRecordingsDirectory()</link> D-Bus 
method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_device_group__complete_set_recordings_directory() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-set-recordings-directory",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, handle_set_recordings_directory),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+
+  /* GObject signals for received D-Bus signals: */
+  /**
+   * GddDeviceGroup::device-added:
+   * @object: A #GddDeviceGroup.
+   * @arg_adapter: Argument.
+   * @arg_frontend: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link 
linkend="gdbus-signal-org-gnome-DVB-DeviceGroup.DeviceAdded">"DeviceAdded"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit 
the D-Bus signal.
+   */
+  g_signal_new ("device-added",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, device_added),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    2, G_TYPE_UINT, G_TYPE_UINT);
+
+  /**
+   * GddDeviceGroup::device-removed:
+   * @object: A #GddDeviceGroup.
+   * @arg_adapter: Argument.
+   * @arg_frontend: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link 
linkend="gdbus-signal-org-gnome-DVB-DeviceGroup.DeviceRemoved">"DeviceRemoved"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit 
the D-Bus signal.
+   */
+  g_signal_new ("device-removed",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddDeviceGroupIface, device_removed),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    2, G_TYPE_UINT, G_TYPE_UINT);
+
+}
+
+/**
+ * gdd_device_group__emit_device_added:
+ * @object: A #GddDeviceGroup.
+ * @arg_adapter: Argument to pass with the signal.
+ * @arg_frontend: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-gnome-DVB-DeviceGroup.DeviceAdded">"DeviceAdded"</link> D-Bus 
signal.
+ */
+void
+gdd_device_group__emit_device_added (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend)
+{
+  g_signal_emit_by_name (object, "device-added", arg_adapter, arg_frontend);
+}
+
+/**
+ * gdd_device_group__emit_device_removed:
+ * @object: A #GddDeviceGroup.
+ * @arg_adapter: Argument to pass with the signal.
+ * @arg_frontend: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-gnome-DVB-DeviceGroup.DeviceRemoved">"DeviceRemoved"</link> 
D-Bus signal.
+ */
+void
+gdd_device_group__emit_device_removed (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend)
+{
+  g_signal_emit_by_name (object, "device-removed", arg_adapter, arg_frontend);
+}
+
+/**
+ * gdd_device_group__call_get_type:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetType">GetType()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_get_type_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_get_type_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_get_type (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetType",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_get_type_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_get_type().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_get_type().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_type_finish (
+    GddDeviceGroup *proxy,
+    gint *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(i)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_type_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetType">GetType()</link> 
D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_get_type() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_type_sync (
+    GddDeviceGroup *proxy,
+    gint *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetType",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(i)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_recorder:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecorder">GetRecorder()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_get_recorder_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_get_recorder_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_get_recorder (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetRecorder",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_get_recorder_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_get_recorder().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_get_recorder().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_recorder_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(o)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_recorder_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecorder">GetRecorder()</link> D-Bus method on @proxy. The 
calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_get_recorder() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_recorder_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetRecorder",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(o)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_add_device:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.AddDevice">AddDevice()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_add_device_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_add_device_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_add_device (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "AddDevice",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_add_device_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_add_device().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_add_device().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_add_device_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_add_device_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.AddDevice">AddDevice()</link> D-Bus method on @proxy. The 
calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_add_device() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_add_device_sync (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "AddDevice",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_remove_device:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.RemoveDevice">RemoveDevice()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_remove_device_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_remove_device_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_remove_device (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "RemoveDevice",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_remove_device_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_remove_device().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_remove_device().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_remove_device_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_remove_device_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.RemoveDevice">RemoveDevice()</link> D-Bus method on @proxy. 
The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_remove_device() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_remove_device_sync (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "RemoveDevice",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_channel_list:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetChannelList">GetChannelList()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_get_channel_list_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_get_channel_list_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_get_channel_list (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannelList",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_get_channel_list_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_get_channel_list().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_get_channel_list().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_channel_list_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(o)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_channel_list_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetChannelList">GetChannelList()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_get_channel_list() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_channel_list_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannelList",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(o)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_name:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetName">GetName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_get_name_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_get_name_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_get_name (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetName",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_get_name_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_get_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_get_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_name_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(s)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_name_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetName">GetName()</link> 
D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_get_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_name_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetName",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(s)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_set_name:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetName">SetName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_set_name_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_set_name_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_set_name (
+    GddDeviceGroup *proxy,
+    const gchar *arg_name,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "SetName",
+    g_variant_new ("(s)",
+                   arg_name),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_set_name_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_set_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_set_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_set_name_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_set_name_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetName">SetName()</link> 
D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_set_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_set_name_sync (
+    GddDeviceGroup *proxy,
+    const gchar *arg_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "SetName",
+    g_variant_new ("(s)",
+                   arg_name),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_members:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetMembers">GetMembers()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_get_members_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_get_members_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_get_members (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetMembers",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_get_members_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_get_members().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_get_members().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_members_finish (
+    GddDeviceGroup *proxy,
+    gchar ***out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^as)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_members_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetMembers">GetMembers()</link> D-Bus method on @proxy. The 
calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_get_members() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_members_sync (
+    GddDeviceGroup *proxy,
+    gchar ***out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetMembers",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^as)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_schedule:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_channel_sid: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetSchedule">GetSchedule()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_get_schedule_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__call_get_schedule_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_device_group__call_get_schedule (
+    GddDeviceGroup *proxy,
+    guint arg_channel_sid,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetSchedule",
+    g_variant_new ("(u)",
+                   arg_channel_sid),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_get_schedule_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_opath: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_get_schedule().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_get_schedule().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_schedule_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_opath,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(ob)",
+                 out_opath,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_schedule_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_channel_sid: Argument to pass with the method invocation.
+ * @out_opath: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetSchedule">GetSchedule()</link> D-Bus method on @proxy. The 
calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_get_schedule() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_schedule_sync (
+    GddDeviceGroup *proxy,
+    guint arg_channel_sid,
+    gchar **out_opath,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetSchedule",
+    g_variant_new ("(u)",
+                   arg_channel_sid),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(ob)",
+                 out_opath,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_recordings_directory:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecordingsDirectory">GetRecordingsDirectory()</link> D-Bus 
method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_get_recordings_directory_finish() to get the result of the 
operation.
+ *
+ * See gdd_device_group__call_get_recordings_directory_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_device_group__call_get_recordings_directory (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetRecordingsDirectory",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_get_recordings_directory_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_get_recordings_directory().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_get_recordings_directory().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_recordings_directory_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(s)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_get_recordings_directory_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecordingsDirectory">GetRecordingsDirectory()</link> D-Bus 
method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_get_recordings_directory() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_get_recordings_directory_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetRecordingsDirectory",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(s)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_set_recordings_directory:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_location: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetRecordingsDirectory">SetRecordingsDirectory()</link> D-Bus 
method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__call_set_recordings_directory_finish() to get the result of the 
operation.
+ *
+ * See gdd_device_group__call_set_recordings_directory_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_device_group__call_set_recordings_directory (
+    GddDeviceGroup *proxy,
+    const gchar *arg_location,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "SetRecordingsDirectory",
+    g_variant_new ("(s)",
+                   arg_location),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_device_group__call_set_recordings_directory_finish:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__call_set_recordings_directory().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_device_group__call_set_recordings_directory().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_set_recordings_directory_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__call_set_recordings_directory_sync:
+ * @proxy: A #GddDeviceGroupProxy.
+ * @arg_location: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetRecordingsDirectory">SetRecordingsDirectory()</link> D-Bus 
method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__call_set_recordings_directory() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_device_group__call_set_recordings_directory_sync (
+    GddDeviceGroup *proxy,
+    const gchar *arg_location,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "SetRecordingsDirectory",
+    g_variant_new ("(s)",
+                   arg_location),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_device_group__complete_get_type:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetType">GetType()</link> D-Bus method. If you instead want 
to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or 
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_get_type (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gint result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(i)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_get_recorder:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecorder">GetRecorder()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_get_recorder (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(o)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_add_device:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.AddDevice">AddDevice()</link> D-Bus method. If you instead 
want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or 
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_add_device (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_remove_device:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.RemoveDevice">RemoveDevice()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_remove_device (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_get_channel_list:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetChannelList">GetChannelList()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_get_channel_list (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(o)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_get_name:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetName">GetName()</link> D-Bus method. If you instead want 
to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or 
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_get_name (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(s)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_set_name:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetName">SetName()</link> D-Bus method. If you instead want 
to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or 
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_set_name (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_get_members:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetMembers">GetMembers()</link> D-Bus method. If you instead 
want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or 
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_get_members (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *const *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(^as)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_get_schedule:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @opath: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetSchedule">GetSchedule()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_get_schedule (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *opath,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(ob)",
+                   opath,
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_get_recordings_directory:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.GetRecordingsDirectory">GetRecordingsDirectory()</link> D-Bus 
method. If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_get_recordings_directory (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(s)",
+                   result));
+}
+
+/**
+ * gdd_device_group__complete_set_recordings_directory:
+ * @object: A #GddDeviceGroup.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-DeviceGroup.SetRecordingsDirectory">SetRecordingsDirectory()</link> D-Bus 
method. If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_device_group__complete_set_recordings_directory (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * GddDeviceGroupProxy:
+ *
+ * The #GddDeviceGroupProxy structure contains only private data and should only be accessed using the 
provided API.
+ */
+
+/**
+ * GddDeviceGroupProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #GddDeviceGroupProxy.
+ */
+
+struct _GddDeviceGroupProxyPrivate
+{
+  GData *qdata;
+};
+
+static void gdd_device_group__proxy_iface_init (GddDeviceGroupIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (GddDeviceGroupProxy, gdd_device_group__proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (GddDeviceGroupProxy)
+                         G_IMPLEMENT_INTERFACE (GDD_DEVICE_GROUP_TYPE_, gdd_device_group__proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (GddDeviceGroupProxy, gdd_device_group__proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (GDD_DEVICE_GROUP_TYPE_, gdd_device_group__proxy_iface_init));
+
+#endif
+static void
+gdd_device_group__proxy_finalize (GObject *object)
+{
+  GddDeviceGroupProxy *proxy = GDD_DEVICE_GROUP__PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (gdd_device_group__proxy_parent_class)->finalize (object);
+}
+
+static void
+gdd_device_group__proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+gdd_device_group__proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+gdd_device_group__proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) 
&_gdd_device_group__interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], GDD_DEVICE_GROUP_TYPE_);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, GDD_DEVICE_GROUP_TYPE_);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+gdd_device_group__proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  GddDeviceGroupProxy *proxy = GDD_DEVICE_GROUP__PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_device_group__interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_device_group__interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+gdd_device_group__proxy_init (GddDeviceGroupProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = gdd_device_group__proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, GDD_DEVICE_GROUP_TYPE__PROXY, 
GddDeviceGroupProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), gdd_device_group__interface_info ());
+}
+
+static void
+gdd_device_group__proxy_class_init (GddDeviceGroupProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = gdd_device_group__proxy_finalize;
+  gobject_class->get_property = gdd_device_group__proxy_get_property;
+  gobject_class->set_property = gdd_device_group__proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = gdd_device_group__proxy_g_signal;
+  proxy_class->g_properties_changed = gdd_device_group__proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (GddDeviceGroupProxyPrivate));
+#endif
+}
+
+static void
+gdd_device_group__proxy_iface_init (GddDeviceGroupIface *iface)
+{
+}
+
+/**
+ * gdd_device_group__proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus 
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-DeviceGroup.top_of_page">org.gnome.DVB.DeviceGroup</link>. See 
g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__proxy_new_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+gdd_device_group__proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (GDD_DEVICE_GROUP_TYPE__PROXY, G_PRIORITY_DEFAULT, cancellable, callback, 
user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, 
"g-interface-name", "org.gnome.DVB.DeviceGroup", NULL);
+}
+
+/**
+ * gdd_device_group__proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdd_device_group__proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with gdd_device_group__proxy_new().
+ *
+ * Returns: (transfer full) (type GddDeviceGroupProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddDeviceGroup *
+gdd_device_group__proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return GDD_DEVICE_GROUP_ (ret);
+  else
+    return NULL;
+}
+
+/**
+ * gdd_device_group__proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus 
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-DeviceGroup.top_of_page">org.gnome.DVB.DeviceGroup</link>. See 
g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type GddDeviceGroupProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddDeviceGroup *
+gdd_device_group__proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (GDD_DEVICE_GROUP_TYPE__PROXY, cancellable, error, "g-flags", flags, "g-name", name, 
"g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.gnome.DVB.DeviceGroup", 
NULL);
+  if (ret != NULL)
+    return GDD_DEVICE_GROUP_ (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * gdd_device_group__proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like gdd_device_group__proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_device_group__proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See gdd_device_group__proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+gdd_device_group__proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (GDD_DEVICE_GROUP_TYPE__PROXY, G_PRIORITY_DEFAULT, cancellable, callback, 
user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, 
"g-interface-name", "org.gnome.DVB.DeviceGroup", NULL);
+}
+
+/**
+ * gdd_device_group__proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_device_group__proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with gdd_device_group__proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type GddDeviceGroupProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddDeviceGroup *
+gdd_device_group__proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return GDD_DEVICE_GROUP_ (ret);
+  else
+    return NULL;
+}
+
+/**
+ * gdd_device_group__proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like gdd_device_group__proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See gdd_device_group__proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type GddDeviceGroupProxy): The constructed proxy object or %NULL if @error is 
set.
+ */
+GddDeviceGroup *
+gdd_device_group__proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (GDD_DEVICE_GROUP_TYPE__PROXY, cancellable, error, "g-flags", flags, "g-name", name, 
"g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.gnome.DVB.DeviceGroup", NULL);
+  if (ret != NULL)
+    return GDD_DEVICE_GROUP_ (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * GddDeviceGroupSkeleton:
+ *
+ * The #GddDeviceGroupSkeleton structure contains only private data and should only be accessed using the 
provided API.
+ */
+
+/**
+ * GddDeviceGroupSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #GddDeviceGroupSkeleton.
+ */
+
+struct _GddDeviceGroupSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_gdd_device_group__skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  GddDeviceGroupSkeleton *skeleton = GDD_DEVICE_GROUP__SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], GDD_DEVICE_GROUP_TYPE_);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list 
(g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, GDD_DEVICE_GROUP_TYPE_);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s 
is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_gdd_device_group__skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  GddDeviceGroupSkeleton *skeleton = GDD_DEVICE_GROUP__SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_device_group__interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", 
property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_gdd_device_group__skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  GddDeviceGroupSkeleton *skeleton = GDD_DEVICE_GROUP__SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_device_group__interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", 
property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _gdd_device_group__skeleton_vtable =
+{
+  _gdd_device_group__skeleton_handle_method_call,
+  _gdd_device_group__skeleton_handle_get_property,
+  _gdd_device_group__skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+gdd_device_group__skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return gdd_device_group__interface_info ();
+}
+
+static GDBusInterfaceVTable *
+gdd_device_group__skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_gdd_device_group__skeleton_vtable;
+}
+
+static GVariant *
+gdd_device_group__skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  GddDeviceGroupSkeleton *skeleton = GDD_DEVICE_GROUP__SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_gdd_device_group__interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _gdd_device_group__interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _gdd_device_group__interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _gdd_device_group__skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection 
(G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path 
(G_DBUS_INTERFACE_SKELETON (skeleton)), "org.gnome.DVB.DeviceGroup", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+gdd_device_group__skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_gdd_device_group__on_signal_device_added (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend)
+{
+  GddDeviceGroupSkeleton *skeleton = GDD_DEVICE_GROUP__SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 
"org.gnome.DVB.DeviceGroup", "DeviceAdded",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_gdd_device_group__on_signal_device_removed (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend)
+{
+  GddDeviceGroupSkeleton *skeleton = GDD_DEVICE_GROUP__SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 
"org.gnome.DVB.DeviceGroup", "DeviceRemoved",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void gdd_device_group__skeleton_iface_init (GddDeviceGroupIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (GddDeviceGroupSkeleton, gdd_device_group__skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (GddDeviceGroupSkeleton)
+                         G_IMPLEMENT_INTERFACE (GDD_DEVICE_GROUP_TYPE_, 
gdd_device_group__skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (GddDeviceGroupSkeleton, gdd_device_group__skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (GDD_DEVICE_GROUP_TYPE_, 
gdd_device_group__skeleton_iface_init));
+
+#endif
+static void
+gdd_device_group__skeleton_finalize (GObject *object)
+{
+  GddDeviceGroupSkeleton *skeleton = GDD_DEVICE_GROUP__SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (gdd_device_group__skeleton_parent_class)->finalize (object);
+}
+
+static void
+gdd_device_group__skeleton_init (GddDeviceGroupSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = gdd_device_group__skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, GDD_DEVICE_GROUP_TYPE__SKELETON, 
GddDeviceGroupSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+gdd_device_group__skeleton_class_init (GddDeviceGroupSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = gdd_device_group__skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = gdd_device_group__skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = gdd_device_group__skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = gdd_device_group__skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = gdd_device_group__skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (GddDeviceGroupSkeletonPrivate));
+#endif
+}
+
+static void
+gdd_device_group__skeleton_iface_init (GddDeviceGroupIface *iface)
+{
+  iface->device_added = _gdd_device_group__on_signal_device_added;
+  iface->device_removed = _gdd_device_group__on_signal_device_removed;
+}
+
+/**
+ * gdd_device_group__skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-DeviceGroup.top_of_page">org.gnome.DVB.DeviceGroup</link>.
+ *
+ * Returns: (transfer full) (type GddDeviceGroupSkeleton): The skeleton object.
+ */
+GddDeviceGroup *
+gdd_device_group__skeleton_new (void)
+{
+  return GDD_DEVICE_GROUP_ (g_object_new (GDD_DEVICE_GROUP_TYPE__SKELETON, NULL));
+}
+
diff --git a/client/grilo-plugin/gdd-device-group.h b/client/grilo-plugin/gdd-device-group.h
new file mode 100644
index 0000000..569959b
--- /dev/null
+++ b/client/grilo-plugin/gdd-device-group.h
@@ -0,0 +1,488 @@
+/*
+ * Generated by gdbus-codegen 2.42.0. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifndef __GDD_DEVICE_GROUP_H__
+#define __GDD_DEVICE_GROUP_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.gnome.DVB.DeviceGroup */
+
+#define GDD_DEVICE_GROUP_TYPE_ (gdd_device_group__get_type ())
+#define GDD_DEVICE_GROUP_(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_DEVICE_GROUP_TYPE_, GddDeviceGroup))
+#define GDD_DEVICE_GROUP_IS_(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_DEVICE_GROUP_TYPE_))
+#define GDD_DEVICE_GROUP__GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), GDD_DEVICE_GROUP_TYPE_, 
GddDeviceGroupIface))
+
+struct _GddDeviceGroup;
+typedef struct _GddDeviceGroup GddDeviceGroup;
+typedef struct _GddDeviceGroupIface GddDeviceGroupIface;
+
+struct _GddDeviceGroupIface
+{
+  GTypeInterface parent_iface;
+
+
+  gboolean (*handle_add_device) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_adapter,
+    guint arg_frontend);
+
+  gboolean (*handle_get_channel_list) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_members) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_name) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_recorder) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_recordings_directory) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_schedule) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_channel_sid);
+
+  gboolean (*handle_get_type) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_remove_device) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_adapter,
+    guint arg_frontend);
+
+  gboolean (*handle_set_name) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *arg_name);
+
+  gboolean (*handle_set_recordings_directory) (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *arg_location);
+
+  void (*device_added) (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend);
+
+  void (*device_removed) (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend);
+
+};
+
+GType gdd_device_group__get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *gdd_device_group__interface_info (void);
+guint gdd_device_group__override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void gdd_device_group__complete_get_type (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gint result);
+
+void gdd_device_group__complete_get_recorder (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result);
+
+void gdd_device_group__complete_add_device (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+void gdd_device_group__complete_remove_device (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+void gdd_device_group__complete_get_channel_list (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result);
+
+void gdd_device_group__complete_get_name (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result);
+
+void gdd_device_group__complete_set_name (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+void gdd_device_group__complete_get_members (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *const *result);
+
+void gdd_device_group__complete_get_schedule (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *opath,
+    gboolean result);
+
+void gdd_device_group__complete_get_recordings_directory (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *result);
+
+void gdd_device_group__complete_set_recordings_directory (
+    GddDeviceGroup *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+
+
+/* D-Bus signal emissions functions: */
+void gdd_device_group__emit_device_added (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend);
+
+void gdd_device_group__emit_device_removed (
+    GddDeviceGroup *object,
+    guint arg_adapter,
+    guint arg_frontend);
+
+
+
+/* D-Bus method calls: */
+void gdd_device_group__call_get_type (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_get_type_finish (
+    GddDeviceGroup *proxy,
+    gint *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_get_type_sync (
+    GddDeviceGroup *proxy,
+    gint *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_get_recorder (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_get_recorder_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_get_recorder_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_add_device (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_add_device_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_add_device_sync (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_remove_device (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_remove_device_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_remove_device_sync (
+    GddDeviceGroup *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_get_channel_list (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_get_channel_list_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_get_channel_list_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_get_name (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_get_name_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_get_name_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_set_name (
+    GddDeviceGroup *proxy,
+    const gchar *arg_name,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_set_name_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_set_name_sync (
+    GddDeviceGroup *proxy,
+    const gchar *arg_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_get_members (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_get_members_finish (
+    GddDeviceGroup *proxy,
+    gchar ***out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_get_members_sync (
+    GddDeviceGroup *proxy,
+    gchar ***out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_get_schedule (
+    GddDeviceGroup *proxy,
+    guint arg_channel_sid,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_get_schedule_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_opath,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_get_schedule_sync (
+    GddDeviceGroup *proxy,
+    guint arg_channel_sid,
+    gchar **out_opath,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_get_recordings_directory (
+    GddDeviceGroup *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_get_recordings_directory_finish (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_get_recordings_directory_sync (
+    GddDeviceGroup *proxy,
+    gchar **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_device_group__call_set_recordings_directory (
+    GddDeviceGroup *proxy,
+    const gchar *arg_location,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_device_group__call_set_recordings_directory_finish (
+    GddDeviceGroup *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_device_group__call_set_recordings_directory_sync (
+    GddDeviceGroup *proxy,
+    const gchar *arg_location,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+
+
+/* ---- */
+
+#define GDD_DEVICE_GROUP_TYPE__PROXY (gdd_device_group__proxy_get_type ())
+#define GDD_DEVICE_GROUP__PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_DEVICE_GROUP_TYPE__PROXY, 
GddDeviceGroupProxy))
+#define GDD_DEVICE_GROUP__PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GDD_DEVICE_GROUP_TYPE__PROXY, 
GddDeviceGroupProxyClass))
+#define GDD_DEVICE_GROUP__PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDD_DEVICE_GROUP_TYPE__PROXY, 
GddDeviceGroupProxyClass))
+#define GDD_DEVICE_GROUP_IS__PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_DEVICE_GROUP_TYPE__PROXY))
+#define GDD_DEVICE_GROUP_IS__PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDD_DEVICE_GROUP_TYPE__PROXY))
+
+typedef struct _GddDeviceGroupProxy GddDeviceGroupProxy;
+typedef struct _GddDeviceGroupProxyClass GddDeviceGroupProxyClass;
+typedef struct _GddDeviceGroupProxyPrivate GddDeviceGroupProxyPrivate;
+
+struct _GddDeviceGroupProxy
+{
+  /*< private >*/
+  GDBusProxy parent_instance;
+  GddDeviceGroupProxyPrivate *priv;
+};
+
+struct _GddDeviceGroupProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+GType gdd_device_group__proxy_get_type (void) G_GNUC_CONST;
+
+void gdd_device_group__proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data);
+GddDeviceGroup *gdd_device_group__proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error);
+GddDeviceGroup *gdd_device_group__proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error);
+
+void gdd_device_group__proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data);
+GddDeviceGroup *gdd_device_group__proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error);
+GddDeviceGroup *gdd_device_group__proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error);
+
+
+/* ---- */
+
+#define GDD_DEVICE_GROUP_TYPE__SKELETON (gdd_device_group__skeleton_get_type ())
+#define GDD_DEVICE_GROUP__SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_DEVICE_GROUP_TYPE__SKELETON, 
GddDeviceGroupSkeleton))
+#define GDD_DEVICE_GROUP__SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GDD_DEVICE_GROUP_TYPE__SKELETON, 
GddDeviceGroupSkeletonClass))
+#define GDD_DEVICE_GROUP__SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), 
GDD_DEVICE_GROUP_TYPE__SKELETON, GddDeviceGroupSkeletonClass))
+#define GDD_DEVICE_GROUP_IS__SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_DEVICE_GROUP_TYPE__SKELETON))
+#define GDD_DEVICE_GROUP_IS__SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), 
GDD_DEVICE_GROUP_TYPE__SKELETON))
+
+typedef struct _GddDeviceGroupSkeleton GddDeviceGroupSkeleton;
+typedef struct _GddDeviceGroupSkeletonClass GddDeviceGroupSkeletonClass;
+typedef struct _GddDeviceGroupSkeletonPrivate GddDeviceGroupSkeletonPrivate;
+
+struct _GddDeviceGroupSkeleton
+{
+  /*< private >*/
+  GDBusInterfaceSkeleton parent_instance;
+  GddDeviceGroupSkeletonPrivate *priv;
+};
+
+struct _GddDeviceGroupSkeletonClass
+{
+  GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType gdd_device_group__skeleton_get_type (void) G_GNUC_CONST;
+
+GddDeviceGroup *gdd_device_group__skeleton_new (void);
+
+
+G_END_DECLS
+
+#endif /* __GDD_DEVICE_GROUP_H__ */
diff --git a/client/grilo-plugin/gdd-manager.c b/client/grilo-plugin/gdd-manager.c
new file mode 100644
index 0000000..a3cf93d
--- /dev/null
+++ b/client/grilo-plugin/gdd-manager.c
@@ -0,0 +1,3418 @@
+/*
+ * Generated by gdbus-codegen 2.42.0. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gdd-manager.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#  include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+  GDBusArgInfo parent_struct;
+  gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+  GDBusMethodInfo parent_struct;
+  const gchar *signal_name;
+  gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+  GDBusSignalInfo parent_struct;
+  const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+  GDBusPropertyInfo parent_struct;
+  const gchar *hyphen_name;
+  gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+  GDBusInterfaceInfo parent_struct;
+  const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+  const _ExtendedGDBusPropertyInfo *info;
+  guint prop_id;
+  GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+  g_value_unset (&data->orig_value);
+  g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+  gboolean ret = FALSE;
+  guint n;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  if (g_strv_length (a) != g_strv_length (b))
+    goto out;
+  for (n = 0; a[n] != NULL; n++)
+    if (g_strcmp0 (a[n], b[n]) != 0)
+      goto out;
+  ret = TRUE;
+out:
+  return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+  gboolean ret = FALSE;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  ret = g_variant_equal (a, b);
+out:
+  return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+  gboolean ret = FALSE;
+  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+  switch (G_VALUE_TYPE (a))
+    {
+      case G_TYPE_BOOLEAN:
+        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+        break;
+      case G_TYPE_UCHAR:
+        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+        break;
+      case G_TYPE_INT:
+        ret = (g_value_get_int (a) == g_value_get_int (b));
+        break;
+      case G_TYPE_UINT:
+        ret = (g_value_get_uint (a) == g_value_get_uint (b));
+        break;
+      case G_TYPE_INT64:
+        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+        break;
+      case G_TYPE_UINT64:
+        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+        break;
+      case G_TYPE_DOUBLE:
+        {
+          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+          gdouble da = g_value_get_double (a);
+          gdouble db = g_value_get_double (b);
+          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+        }
+        break;
+      case G_TYPE_STRING:
+        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+        break;
+      case G_TYPE_VARIANT:
+        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+        break;
+      default:
+        if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+        else
+          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+        break;
+    }
+  return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.gnome.DVB.Manager
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:GddManager
+ * @title: GddManager
+ * @short_description: Generated C code for the org.gnome.DVB.Manager D-Bus interface
+ *
+ * This section contains code for working with the <link 
linkend="gdbus-interface-org-gnome-DVB-Manager.top_of_page">org.gnome.DVB.Manager</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.gnome.DVB.Manager ---- */
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_scanner_for_device_IN_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_scanner_for_device_IN_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_scanner_for_device_IN_ARG_type =
+{
+  {
+    -1,
+    (gchar *) "type",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_get_scanner_for_device_IN_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_scanner_for_device_IN_ARG_adapter,
+  &_gdd_manager__method_info_get_scanner_for_device_IN_ARG_frontend,
+  &_gdd_manager__method_info_get_scanner_for_device_IN_ARG_type,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_scanner_for_device_OUT_ARG_opath =
+{
+  {
+    -1,
+    (gchar *) "opath",
+    (gchar *) "o",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_scanner_for_device_OUT_ARG_dbusiface =
+{
+  {
+    -1,
+    (gchar *) "dbusiface",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_scanner_for_device_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_get_scanner_for_device_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_scanner_for_device_OUT_ARG_opath,
+  &_gdd_manager__method_info_get_scanner_for_device_OUT_ARG_dbusiface,
+  &_gdd_manager__method_info_get_scanner_for_device_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_scanner_for_device =
+{
+  {
+    -1,
+    (gchar *) "GetScannerForDevice",
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_scanner_for_device_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_scanner_for_device_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-scanner-for-device",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_registered_device_groups_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "ao",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_get_registered_device_groups_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_registered_device_groups_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_registered_device_groups =
+{
+  {
+    -1,
+    (gchar *) "GetRegisteredDeviceGroups",
+    NULL,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_registered_device_groups_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-registered-device-groups",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_device_group_IN_ARG_group_id =
+{
+  {
+    -1,
+    (gchar *) "group_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_get_device_group_IN_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_device_group_IN_ARG_group_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_device_group_OUT_ARG_opath =
+{
+  {
+    -1,
+    (gchar *) "opath",
+    (gchar *) "o",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_device_group_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_get_device_group_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_device_group_OUT_ARG_opath,
+  &_gdd_manager__method_info_get_device_group_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_device_group =
+{
+  {
+    -1,
+    (gchar *) "GetDeviceGroup",
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_device_group_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_device_group_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-device-group",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_device_to_new_group_IN_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_device_to_new_group_IN_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_device_to_new_group_IN_ARG_type =
+{
+  {
+    -1,
+    (gchar *) "type",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_device_to_new_group_IN_ARG_channels_conf =
+{
+  {
+    -1,
+    (gchar *) "channels_conf",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_device_to_new_group_IN_ARG_recordings_dir =
+{
+  {
+    -1,
+    (gchar *) "recordings_dir",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_device_to_new_group_IN_ARG_name =
+{
+  {
+    -1,
+    (gchar *) "name",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_add_device_to_new_group_IN_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_add_device_to_new_group_IN_ARG_adapter,
+  &_gdd_manager__method_info_add_device_to_new_group_IN_ARG_frontend,
+  &_gdd_manager__method_info_add_device_to_new_group_IN_ARG_type,
+  &_gdd_manager__method_info_add_device_to_new_group_IN_ARG_channels_conf,
+  &_gdd_manager__method_info_add_device_to_new_group_IN_ARG_recordings_dir,
+  &_gdd_manager__method_info_add_device_to_new_group_IN_ARG_name,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_device_to_new_group_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_add_device_to_new_group_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_add_device_to_new_group_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_add_device_to_new_group =
+{
+  {
+    -1,
+    (gchar *) "AddDeviceToNewGroup",
+    (GDBusArgInfo **) &_gdd_manager__method_info_add_device_to_new_group_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_manager__method_info_add_device_to_new_group_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-add-device-to-new-group",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_name_of_registered_device_IN_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_name_of_registered_device_IN_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_get_name_of_registered_device_IN_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_name_of_registered_device_IN_ARG_adapter,
+  &_gdd_manager__method_info_get_name_of_registered_device_IN_ARG_frontend,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_name_of_registered_device_OUT_ARG_name =
+{
+  {
+    -1,
+    (gchar *) "name",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_name_of_registered_device_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_get_name_of_registered_device_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_name_of_registered_device_OUT_ARG_name,
+  &_gdd_manager__method_info_get_name_of_registered_device_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_name_of_registered_device =
+{
+  {
+    -1,
+    (gchar *) "GetNameOfRegisteredDevice",
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_name_of_registered_device_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_name_of_registered_device_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-name-of-registered-device",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_device_group_size_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const 
_gdd_manager__method_info_get_device_group_size_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_device_group_size_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_device_group_size =
+{
+  {
+    -1,
+    (gchar *) "GetDeviceGroupSize",
+    NULL,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_device_group_size_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-device-group-size",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_channel_groups_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "a(is)",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_get_channel_groups_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_channel_groups_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_channel_groups =
+{
+  {
+    -1,
+    (gchar *) "GetChannelGroups",
+    NULL,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_channel_groups_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-channel-groups",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_channel_group_IN_ARG_name =
+{
+  {
+    -1,
+    (gchar *) "name",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_add_channel_group_IN_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_add_channel_group_IN_ARG_name,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_channel_group_OUT_ARG_channel_group_id =
+{
+  {
+    -1,
+    (gchar *) "channel_group_id",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_add_channel_group_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_add_channel_group_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_add_channel_group_OUT_ARG_channel_group_id,
+  &_gdd_manager__method_info_add_channel_group_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_add_channel_group =
+{
+  {
+    -1,
+    (gchar *) "AddChannelGroup",
+    (GDBusArgInfo **) &_gdd_manager__method_info_add_channel_group_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_manager__method_info_add_channel_group_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-add-channel-group",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_remove_channel_group_IN_ARG_channel_group_id =
+{
+  {
+    -1,
+    (gchar *) "channel_group_id",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_remove_channel_group_IN_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_remove_channel_group_IN_ARG_channel_group_id,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_remove_channel_group_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_remove_channel_group_OUT_ARG_pointers[] 
=
+{
+  &_gdd_manager__method_info_remove_channel_group_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_remove_channel_group =
+{
+  {
+    -1,
+    (gchar *) "RemoveChannelGroup",
+    (GDBusArgInfo **) &_gdd_manager__method_info_remove_channel_group_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_manager__method_info_remove_channel_group_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-remove-channel-group",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_devices_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "aa{ss}",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_get_devices_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_devices_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_devices =
+{
+  {
+    -1,
+    (gchar *) "GetDevices",
+    NULL,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_devices_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-devices",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_adapter_info_IN_ARG_adapter =
+{
+  {
+    -1,
+    (gchar *) "adapter",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_adapter_info_IN_ARG_frontend =
+{
+  {
+    -1,
+    (gchar *) "frontend",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_get_adapter_info_IN_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_adapter_info_IN_ARG_adapter,
+  &_gdd_manager__method_info_get_adapter_info_IN_ARG_frontend,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_adapter_info_OUT_ARG_info =
+{
+  {
+    -1,
+    (gchar *) "info",
+    (gchar *) "(sbbb)",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__method_info_get_adapter_info_OUT_ARG_result =
+{
+  {
+    -1,
+    (gchar *) "result",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__method_info_get_adapter_info_OUT_ARG_pointers[] =
+{
+  &_gdd_manager__method_info_get_adapter_info_OUT_ARG_info,
+  &_gdd_manager__method_info_get_adapter_info_OUT_ARG_result,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _gdd_manager__method_info_get_adapter_info =
+{
+  {
+    -1,
+    (gchar *) "GetAdapterInfo",
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_adapter_info_IN_ARG_pointers,
+    (GDBusArgInfo **) &_gdd_manager__method_info_get_adapter_info_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-get-adapter-info",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _gdd_manager__method_info_pointers[] =
+{
+  &_gdd_manager__method_info_get_scanner_for_device,
+  &_gdd_manager__method_info_get_registered_device_groups,
+  &_gdd_manager__method_info_get_device_group,
+  &_gdd_manager__method_info_add_device_to_new_group,
+  &_gdd_manager__method_info_get_name_of_registered_device,
+  &_gdd_manager__method_info_get_device_group_size,
+  &_gdd_manager__method_info_get_channel_groups,
+  &_gdd_manager__method_info_add_channel_group,
+  &_gdd_manager__method_info_remove_channel_group,
+  &_gdd_manager__method_info_get_devices,
+  &_gdd_manager__method_info_get_adapter_info,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__signal_info_group_added_ARG_group_id =
+{
+  {
+    -1,
+    (gchar *) "group_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__signal_info_group_added_ARG_pointers[] =
+{
+  &_gdd_manager__signal_info_group_added_ARG_group_id,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _gdd_manager__signal_info_group_added =
+{
+  {
+    -1,
+    (gchar *) "GroupAdded",
+    (GDBusArgInfo **) &_gdd_manager__signal_info_group_added_ARG_pointers,
+    NULL
+  },
+  "group-added"
+};
+
+static const _ExtendedGDBusArgInfo _gdd_manager__signal_info_group_removed_ARG_group_id =
+{
+  {
+    -1,
+    (gchar *) "group_id",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _gdd_manager__signal_info_group_removed_ARG_pointers[] =
+{
+  &_gdd_manager__signal_info_group_removed_ARG_group_id,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _gdd_manager__signal_info_group_removed =
+{
+  {
+    -1,
+    (gchar *) "GroupRemoved",
+    (GDBusArgInfo **) &_gdd_manager__signal_info_group_removed_ARG_pointers,
+    NULL
+  },
+  "group-removed"
+};
+
+static const _ExtendedGDBusSignalInfo * const _gdd_manager__signal_info_pointers[] =
+{
+  &_gdd_manager__signal_info_group_added,
+  &_gdd_manager__signal_info_group_removed,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _gdd_manager__interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.gnome.DVB.Manager",
+    (GDBusMethodInfo **) &_gdd_manager__method_info_pointers,
+    (GDBusSignalInfo **) &_gdd_manager__signal_info_pointers,
+    NULL,
+    NULL
+  },
+  "",
+};
+
+
+/**
+ * gdd_manager__interface_info:
+ *
+ * Gets a machine-readable description of the <link 
linkend="gdbus-interface-org-gnome-DVB-Manager.top_of_page">org.gnome.DVB.Manager</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+gdd_manager__interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_gdd_manager__interface_info.parent_struct;
+}
+
+/**
+ * gdd_manager__override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #GddManager interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+gdd_manager__override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * GddManager:
+ *
+ * Abstract interface type for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-Manager.top_of_page">org.gnome.DVB.Manager</link>.
+ */
+
+/**
+ * GddManagerIface:
+ * @parent_iface: The parent interface.
+ * @handle_add_channel_group: Handler for the #GddManager::handle-add-channel-group signal.
+ * @handle_add_device_to_new_group: Handler for the #GddManager::handle-add-device-to-new-group signal.
+ * @handle_get_adapter_info: Handler for the #GddManager::handle-get-adapter-info signal.
+ * @handle_get_channel_groups: Handler for the #GddManager::handle-get-channel-groups signal.
+ * @handle_get_device_group: Handler for the #GddManager::handle-get-device-group signal.
+ * @handle_get_device_group_size: Handler for the #GddManager::handle-get-device-group-size signal.
+ * @handle_get_devices: Handler for the #GddManager::handle-get-devices signal.
+ * @handle_get_name_of_registered_device: Handler for the #GddManager::handle-get-name-of-registered-device 
signal.
+ * @handle_get_registered_device_groups: Handler for the #GddManager::handle-get-registered-device-groups 
signal.
+ * @handle_get_scanner_for_device: Handler for the #GddManager::handle-get-scanner-for-device signal.
+ * @handle_remove_channel_group: Handler for the #GddManager::handle-remove-channel-group signal.
+ * @group_added: Handler for the #GddManager::group-added signal.
+ * @group_removed: Handler for the #GddManager::group-removed signal.
+ *
+ * Virtual table for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-Manager.top_of_page">org.gnome.DVB.Manager</link>.
+ */
+
+typedef GddManagerIface GddManagerInterface;
+G_DEFINE_INTERFACE (GddManager, gdd_manager_, G_TYPE_OBJECT);
+
+static void
+gdd_manager__default_init (GddManagerIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * GddManager::handle-get-scanner-for-device:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_adapter: Argument passed by remote caller.
+   * @arg_frontend: Argument passed by remote caller.
+   * @arg_type: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetScannerForDevice">GetScannerForDevice()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_scanner_for_device() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-scanner-for-device",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_scanner_for_device),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    4,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT);
+
+  /**
+   * GddManager::handle-get-registered-device-groups:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetRegisteredDeviceGroups">GetRegisteredDeviceGroups()</link> 
D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_registered_device_groups() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-registered-device-groups",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_registered_device_groups),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddManager::handle-get-device-group:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_group_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroup">GetDeviceGroup()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_device_group() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-device-group",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_device_group),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+  /**
+   * GddManager::handle-add-device-to-new-group:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_adapter: Argument passed by remote caller.
+   * @arg_frontend: Argument passed by remote caller.
+   * @arg_type: Argument passed by remote caller.
+   * @arg_channels_conf: Argument passed by remote caller.
+   * @arg_recordings_dir: Argument passed by remote caller.
+   * @arg_name: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddDeviceToNewGroup">AddDeviceToNewGroup()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_add_device_to_new_group() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-add-device-to-new-group",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_add_device_to_new_group),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    7,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, 
G_TYPE_STRING);
+
+  /**
+   * GddManager::handle-get-name-of-registered-device:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_adapter: Argument passed by remote caller.
+   * @arg_frontend: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetNameOfRegisteredDevice">GetNameOfRegisteredDevice()</link> 
D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_name_of_registered_device() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-name-of-registered-device",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_name_of_registered_device),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+  /**
+   * GddManager::handle-get-device-group-size:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroupSize">GetDeviceGroupSize()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_device_group_size() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-device-group-size",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_device_group_size),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddManager::handle-get-channel-groups:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetChannelGroups">GetChannelGroups()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_channel_groups() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-channel-groups",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_channel_groups),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddManager::handle-add-channel-group:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_name: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddChannelGroup">AddChannelGroup()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_add_channel_group() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-add-channel-group",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_add_channel_group),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+
+  /**
+   * GddManager::handle-remove-channel-group:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_channel_group_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.RemoveChannelGroup">RemoveChannelGroup()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_remove_channel_group() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-remove-channel-group",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_remove_channel_group),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_INT);
+
+  /**
+   * GddManager::handle-get-devices:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDevices">GetDevices()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_devices() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-devices",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_devices),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * GddManager::handle-get-adapter-info:
+   * @object: A #GddManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_adapter: Argument passed by remote caller.
+   * @arg_frontend: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetAdapterInfo">GetAdapterInfo()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a 
reference to @invocation and eventually call gdd_manager__complete_get_adapter_info() or e.g. 
g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler 
handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-adapter-info",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, handle_get_adapter_info),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+  /* GObject signals for received D-Bus signals: */
+  /**
+   * GddManager::group-added:
+   * @object: A #GddManager.
+   * @arg_group_id: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link 
linkend="gdbus-signal-org-gnome-DVB-Manager.GroupAdded">"GroupAdded"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit 
the D-Bus signal.
+   */
+  g_signal_new ("group-added",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, group_added),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    1, G_TYPE_UINT);
+
+  /**
+   * GddManager::group-removed:
+   * @object: A #GddManager.
+   * @arg_group_id: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link 
linkend="gdbus-signal-org-gnome-DVB-Manager.GroupRemoved">"GroupRemoved"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit 
the D-Bus signal.
+   */
+  g_signal_new ("group-removed",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (GddManagerIface, group_removed),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    1, G_TYPE_UINT);
+
+}
+
+/**
+ * gdd_manager__emit_group_added:
+ * @object: A #GddManager.
+ * @arg_group_id: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-gnome-DVB-Manager.GroupAdded">"GroupAdded"</link> D-Bus signal.
+ */
+void
+gdd_manager__emit_group_added (
+    GddManager *object,
+    guint arg_group_id)
+{
+  g_signal_emit_by_name (object, "group-added", arg_group_id);
+}
+
+/**
+ * gdd_manager__emit_group_removed:
+ * @object: A #GddManager.
+ * @arg_group_id: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-gnome-DVB-Manager.GroupRemoved">"GroupRemoved"</link> D-Bus 
signal.
+ */
+void
+gdd_manager__emit_group_removed (
+    GddManager *object,
+    guint arg_group_id)
+{
+  g_signal_emit_by_name (object, "group-removed", arg_group_id);
+}
+
+/**
+ * gdd_manager__call_get_scanner_for_device:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @arg_type: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetScannerForDevice">GetScannerForDevice()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_scanner_for_device_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_get_scanner_for_device_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_get_scanner_for_device (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetScannerForDevice",
+    g_variant_new ("(uui)",
+                   arg_adapter,
+                   arg_frontend,
+                   arg_type),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_scanner_for_device_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_opath: (out): Return location for return parameter or %NULL to ignore.
+ * @out_dbusiface: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_get_scanner_for_device().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_scanner_for_device().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_scanner_for_device_finish (
+    GddManager *proxy,
+    gchar **out_opath,
+    gchar **out_dbusiface,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(osb)",
+                 out_opath,
+                 out_dbusiface,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_scanner_for_device_sync:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @arg_type: Argument to pass with the method invocation.
+ * @out_opath: (out): Return location for return parameter or %NULL to ignore.
+ * @out_dbusiface: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetScannerForDevice">GetScannerForDevice()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_scanner_for_device() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_scanner_for_device_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    gchar **out_opath,
+    gchar **out_dbusiface,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetScannerForDevice",
+    g_variant_new ("(uui)",
+                   arg_adapter,
+                   arg_frontend,
+                   arg_type),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(osb)",
+                 out_opath,
+                 out_dbusiface,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_registered_device_groups:
+ * @proxy: A #GddManagerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetRegisteredDeviceGroups">GetRegisteredDeviceGroups()</link> 
D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_registered_device_groups_finish() to get the result of the 
operation.
+ *
+ * See gdd_manager__call_get_registered_device_groups_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_manager__call_get_registered_device_groups (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetRegisteredDeviceGroups",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_registered_device_groups_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_get_registered_device_groups().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_registered_device_groups().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_registered_device_groups_finish (
+    GddManager *proxy,
+    gchar ***out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^ao)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_registered_device_groups_sync:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetRegisteredDeviceGroups">GetRegisteredDeviceGroups()</link> 
D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_registered_device_groups() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_registered_device_groups_sync (
+    GddManager *proxy,
+    gchar ***out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetRegisteredDeviceGroups",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^ao)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_device_group:
+ * @proxy: A #GddManagerProxy.
+ * @arg_group_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroup">GetDeviceGroup()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_device_group_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_get_device_group_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_get_device_group (
+    GddManager *proxy,
+    guint arg_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetDeviceGroup",
+    g_variant_new ("(u)",
+                   arg_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_device_group_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_opath: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_get_device_group().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_device_group().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_device_group_finish (
+    GddManager *proxy,
+    gchar **out_opath,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(ob)",
+                 out_opath,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_device_group_sync:
+ * @proxy: A #GddManagerProxy.
+ * @arg_group_id: Argument to pass with the method invocation.
+ * @out_opath: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroup">GetDeviceGroup()</link> D-Bus method on @proxy. 
The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_device_group() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_device_group_sync (
+    GddManager *proxy,
+    guint arg_group_id,
+    gchar **out_opath,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetDeviceGroup",
+    g_variant_new ("(u)",
+                   arg_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(ob)",
+                 out_opath,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_add_device_to_new_group:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @arg_type: Argument to pass with the method invocation.
+ * @arg_channels_conf: Argument to pass with the method invocation.
+ * @arg_recordings_dir: Argument to pass with the method invocation.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddDeviceToNewGroup">AddDeviceToNewGroup()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_add_device_to_new_group_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_add_device_to_new_group_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_add_device_to_new_group (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    const gchar *arg_channels_conf,
+    const gchar *arg_recordings_dir,
+    const gchar *arg_name,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "AddDeviceToNewGroup",
+    g_variant_new ("(uuisss)",
+                   arg_adapter,
+                   arg_frontend,
+                   arg_type,
+                   arg_channels_conf,
+                   arg_recordings_dir,
+                   arg_name),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_add_device_to_new_group_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_add_device_to_new_group().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_add_device_to_new_group().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_add_device_to_new_group_finish (
+    GddManager *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_add_device_to_new_group_sync:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @arg_type: Argument to pass with the method invocation.
+ * @arg_channels_conf: Argument to pass with the method invocation.
+ * @arg_recordings_dir: Argument to pass with the method invocation.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddDeviceToNewGroup">AddDeviceToNewGroup()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_add_device_to_new_group() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_add_device_to_new_group_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    const gchar *arg_channels_conf,
+    const gchar *arg_recordings_dir,
+    const gchar *arg_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "AddDeviceToNewGroup",
+    g_variant_new ("(uuisss)",
+                   arg_adapter,
+                   arg_frontend,
+                   arg_type,
+                   arg_channels_conf,
+                   arg_recordings_dir,
+                   arg_name),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_name_of_registered_device:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetNameOfRegisteredDevice">GetNameOfRegisteredDevice()</link> 
D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_name_of_registered_device_finish() to get the result of the 
operation.
+ *
+ * See gdd_manager__call_get_name_of_registered_device_sync() for the synchronous, blocking version of this 
method.
+ */
+void
+gdd_manager__call_get_name_of_registered_device (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetNameOfRegisteredDevice",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_name_of_registered_device_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_name: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_get_name_of_registered_device().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_name_of_registered_device().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_name_of_registered_device_finish (
+    GddManager *proxy,
+    gchar **out_name,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_name,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_name_of_registered_device_sync:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @out_name: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetNameOfRegisteredDevice">GetNameOfRegisteredDevice()</link> 
D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_name_of_registered_device() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_name_of_registered_device_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gchar **out_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetNameOfRegisteredDevice",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(sb)",
+                 out_name,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_device_group_size:
+ * @proxy: A #GddManagerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroupSize">GetDeviceGroupSize()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_device_group_size_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_get_device_group_size_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_get_device_group_size (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetDeviceGroupSize",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_device_group_size_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_get_device_group_size().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_device_group_size().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_device_group_size_finish (
+    GddManager *proxy,
+    gint *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(i)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_device_group_size_sync:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroupSize">GetDeviceGroupSize()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_device_group_size() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_device_group_size_sync (
+    GddManager *proxy,
+    gint *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetDeviceGroupSize",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(i)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_channel_groups:
+ * @proxy: A #GddManagerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetChannelGroups">GetChannelGroups()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_channel_groups_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_get_channel_groups_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_get_channel_groups (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetChannelGroups",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_channel_groups_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_get_channel_groups().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_channel_groups().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_channel_groups_finish (
+    GddManager *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@a(is))",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_channel_groups_sync:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetChannelGroups">GetChannelGroups()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_channel_groups() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_channel_groups_sync (
+    GddManager *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetChannelGroups",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@a(is))",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_add_channel_group:
+ * @proxy: A #GddManagerProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddChannelGroup">AddChannelGroup()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_add_channel_group_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_add_channel_group_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_add_channel_group (
+    GddManager *proxy,
+    const gchar *arg_name,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "AddChannelGroup",
+    g_variant_new ("(s)",
+                   arg_name),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_add_channel_group_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_channel_group_id: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_add_channel_group().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_add_channel_group().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_add_channel_group_finish (
+    GddManager *proxy,
+    gint *out_channel_group_id,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(ib)",
+                 out_channel_group_id,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_add_channel_group_sync:
+ * @proxy: A #GddManagerProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_channel_group_id: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddChannelGroup">AddChannelGroup()</link> D-Bus method on @proxy. 
The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_add_channel_group() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_add_channel_group_sync (
+    GddManager *proxy,
+    const gchar *arg_name,
+    gint *out_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "AddChannelGroup",
+    g_variant_new ("(s)",
+                   arg_name),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(ib)",
+                 out_channel_group_id,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_remove_channel_group:
+ * @proxy: A #GddManagerProxy.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.RemoveChannelGroup">RemoveChannelGroup()</link> D-Bus method on 
@proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_remove_channel_group_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_remove_channel_group_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_remove_channel_group (
+    GddManager *proxy,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "RemoveChannelGroup",
+    g_variant_new ("(i)",
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_remove_channel_group_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_remove_channel_group().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_remove_channel_group().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_remove_channel_group_finish (
+    GddManager *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_remove_channel_group_sync:
+ * @proxy: A #GddManagerProxy.
+ * @arg_channel_group_id: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.RemoveChannelGroup">RemoveChannelGroup()</link> D-Bus method on 
@proxy. The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_remove_channel_group() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_remove_channel_group_sync (
+    GddManager *proxy,
+    gint arg_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "RemoveChannelGroup",
+    g_variant_new ("(i)",
+                   arg_channel_group_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_devices:
+ * @proxy: A #GddManagerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDevices">GetDevices()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_devices_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_get_devices_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_get_devices (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetDevices",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_devices_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdd_manager__call_get_devices().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_devices().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_devices_finish (
+    GddManager *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@aa{ss})",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_devices_sync:
+ * @proxy: A #GddManagerProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDevices">GetDevices()</link> D-Bus method on @proxy. The 
calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_devices() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_devices_sync (
+    GddManager *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetDevices",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@aa{ss})",
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_adapter_info:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetAdapterInfo">GetAdapterInfo()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__call_get_adapter_info_finish() to get the result of the operation.
+ *
+ * See gdd_manager__call_get_adapter_info_sync() for the synchronous, blocking version of this method.
+ */
+void
+gdd_manager__call_get_adapter_info (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetAdapterInfo",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * gdd_manager__call_get_adapter_info_finish:
+ * @proxy: A #GddManagerProxy.
+ * @out_info: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to 
gdd_manager__call_get_adapter_info().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with gdd_manager__call_get_adapter_info().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_adapter_info_finish (
+    GddManager *proxy,
+    GVariant **out_info,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@(sbbb)b)",
+                 out_info,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__call_get_adapter_info_sync:
+ * @proxy: A #GddManagerProxy.
+ * @arg_adapter: Argument to pass with the method invocation.
+ * @arg_frontend: Argument to pass with the method invocation.
+ * @out_info: (out): Return location for return parameter or %NULL to ignore.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetAdapterInfo">GetAdapterInfo()</link> D-Bus method on @proxy. 
The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__call_get_adapter_info() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+gdd_manager__call_get_adapter_info_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GVariant **out_info,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetAdapterInfo",
+    g_variant_new ("(uu)",
+                   arg_adapter,
+                   arg_frontend),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(@(sbbb)b)",
+                 out_info,
+                 out_result);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * gdd_manager__complete_get_scanner_for_device:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @opath: Parameter to return.
+ * @dbusiface: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetScannerForDevice">GetScannerForDevice()</link> D-Bus method. 
If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_scanner_for_device (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *opath,
+    const gchar *dbusiface,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(osb)",
+                   opath,
+                   dbusiface,
+                   result));
+}
+
+/**
+ * gdd_manager__complete_get_registered_device_groups:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetRegisteredDeviceGroups">GetRegisteredDeviceGroups()</link> 
D-Bus method. If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_registered_device_groups (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *const *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(^ao)",
+                   result));
+}
+
+/**
+ * gdd_manager__complete_get_device_group:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @opath: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroup">GetDeviceGroup()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_device_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *opath,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(ob)",
+                   opath,
+                   result));
+}
+
+/**
+ * gdd_manager__complete_add_device_to_new_group:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddDeviceToNewGroup">AddDeviceToNewGroup()</link> D-Bus method. 
If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_add_device_to_new_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/**
+ * gdd_manager__complete_get_name_of_registered_device:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @name: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetNameOfRegisteredDevice">GetNameOfRegisteredDevice()</link> 
D-Bus method. If you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_name_of_registered_device (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *name,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(sb)",
+                   name,
+                   result));
+}
+
+/**
+ * gdd_manager__complete_get_device_group_size:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDeviceGroupSize">GetDeviceGroupSize()</link> D-Bus method. If 
you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_device_group_size (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gint result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(i)",
+                   result));
+}
+
+/**
+ * gdd_manager__complete_get_channel_groups:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetChannelGroups">GetChannelGroups()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_channel_groups (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@a(is))",
+                   result));
+}
+
+/**
+ * gdd_manager__complete_add_channel_group:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @channel_group_id: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.AddChannelGroup">AddChannelGroup()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_add_channel_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gint channel_group_id,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(ib)",
+                   channel_group_id,
+                   result));
+}
+
+/**
+ * gdd_manager__complete_remove_channel_group:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.RemoveChannelGroup">RemoveChannelGroup()</link> D-Bus method. If 
you instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_remove_channel_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   result));
+}
+
+/**
+ * gdd_manager__complete_get_devices:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetDevices">GetDevices()</link> D-Bus method. If you instead want 
to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or 
similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_devices (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@aa{ss})",
+                   result));
+}
+
+/**
+ * gdd_manager__complete_get_adapter_info:
+ * @object: A #GddManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @info: Parameter to return.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link 
linkend="gdbus-method-org-gnome-DVB-Manager.GetAdapterInfo">GetAdapterInfo()</link> D-Bus method. If you 
instead want to finish handling an invocation by returning an error, use 
g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+gdd_manager__complete_get_adapter_info (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *info,
+    gboolean result)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(@(sbbb)b)",
+                   info,
+                   result));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * GddManagerProxy:
+ *
+ * The #GddManagerProxy structure contains only private data and should only be accessed using the provided 
API.
+ */
+
+/**
+ * GddManagerProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #GddManagerProxy.
+ */
+
+struct _GddManagerProxyPrivate
+{
+  GData *qdata;
+};
+
+static void gdd_manager__proxy_iface_init (GddManagerIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (GddManagerProxy, gdd_manager__proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (GddManagerProxy)
+                         G_IMPLEMENT_INTERFACE (GDD_MANAGER_TYPE_, gdd_manager__proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (GddManagerProxy, gdd_manager__proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (GDD_MANAGER_TYPE_, gdd_manager__proxy_iface_init));
+
+#endif
+static void
+gdd_manager__proxy_finalize (GObject *object)
+{
+  GddManagerProxy *proxy = GDD_MANAGER__PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (gdd_manager__proxy_parent_class)->finalize (object);
+}
+
+static void
+gdd_manager__proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+gdd_manager__proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+gdd_manager__proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) 
&_gdd_manager__interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], GDD_MANAGER_TYPE_);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, GDD_MANAGER_TYPE_);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+gdd_manager__proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  GddManagerProxy *proxy = GDD_MANAGER__PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_manager__interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_manager__interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+gdd_manager__proxy_init (GddManagerProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = gdd_manager__proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, GDD_MANAGER_TYPE__PROXY, GddManagerProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), gdd_manager__interface_info ());
+}
+
+static void
+gdd_manager__proxy_class_init (GddManagerProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = gdd_manager__proxy_finalize;
+  gobject_class->get_property = gdd_manager__proxy_get_property;
+  gobject_class->set_property = gdd_manager__proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = gdd_manager__proxy_g_signal;
+  proxy_class->g_properties_changed = gdd_manager__proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (GddManagerProxyPrivate));
+#endif
+}
+
+static void
+gdd_manager__proxy_iface_init (GddManagerIface *iface)
+{
+}
+
+/**
+ * gdd_manager__proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus 
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-Manager.top_of_page">org.gnome.DVB.Manager</link>. See 
g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__proxy_new_finish() to get the result of the operation.
+ *
+ * See gdd_manager__proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+gdd_manager__proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (GDD_MANAGER_TYPE__PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, 
"g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, 
"g-interface-name", "org.gnome.DVB.Manager", NULL);
+}
+
+/**
+ * gdd_manager__proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdd_manager__proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with gdd_manager__proxy_new().
+ *
+ * Returns: (transfer full) (type GddManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+GddManager *
+gdd_manager__proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return GDD_MANAGER_ (ret);
+  else
+    return NULL;
+}
+
+/**
+ * gdd_manager__proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus 
connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-Manager.top_of_page">org.gnome.DVB.Manager</link>. See 
g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type GddManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+GddManager *
+gdd_manager__proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (GDD_MANAGER_TYPE__PROXY, cancellable, error, "g-flags", flags, "g-name", name, 
"g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.gnome.DVB.Manager", NULL);
+  if (ret != NULL)
+    return GDD_MANAGER_ (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * gdd_manager__proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like gdd_manager__proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link 
linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling 
this method from.
+ * You can then call gdd_manager__proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See gdd_manager__proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+gdd_manager__proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (GDD_MANAGER_TYPE__PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, 
"g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", 
"org.gnome.DVB.Manager", NULL);
+}
+
+/**
+ * gdd_manager__proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to gdd_manager__proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with gdd_manager__proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type GddManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+GddManager *
+gdd_manager__proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return GDD_MANAGER_ (ret);
+  else
+    return NULL;
+}
+
+/**
+ * gdd_manager__proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like gdd_manager__proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See gdd_manager__proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type GddManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+GddManager *
+gdd_manager__proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (GDD_MANAGER_TYPE__PROXY, cancellable, error, "g-flags", flags, "g-name", name, 
"g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.gnome.DVB.Manager", NULL);
+  if (ret != NULL)
+    return GDD_MANAGER_ (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * GddManagerSkeleton:
+ *
+ * The #GddManagerSkeleton structure contains only private data and should only be accessed using the 
provided API.
+ */
+
+/**
+ * GddManagerSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #GddManagerSkeleton.
+ */
+
+struct _GddManagerSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_gdd_manager__skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  GddManagerSkeleton *skeleton = GDD_MANAGER__SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], GDD_MANAGER_TYPE_);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list 
(g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, GDD_MANAGER_TYPE_);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s 
is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_gdd_manager__skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  GddManagerSkeleton *skeleton = GDD_MANAGER__SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_manager__interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", 
property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_gdd_manager__skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  GddManagerSkeleton *skeleton = GDD_MANAGER__SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) 
&_gdd_manager__interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", 
property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _gdd_manager__skeleton_vtable =
+{
+  _gdd_manager__skeleton_handle_method_call,
+  _gdd_manager__skeleton_handle_get_property,
+  _gdd_manager__skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+gdd_manager__skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return gdd_manager__interface_info ();
+}
+
+static GDBusInterfaceVTable *
+gdd_manager__skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_gdd_manager__skeleton_vtable;
+}
+
+static GVariant *
+gdd_manager__skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  GddManagerSkeleton *skeleton = GDD_MANAGER__SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_gdd_manager__interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _gdd_manager__interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _gdd_manager__interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _gdd_manager__skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection 
(G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path 
(G_DBUS_INTERFACE_SKELETON (skeleton)), "org.gnome.DVB.Manager", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+gdd_manager__skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_gdd_manager__on_signal_group_added (
+    GddManager *object,
+    guint arg_group_id)
+{
+  GddManagerSkeleton *skeleton = GDD_MANAGER__SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(u)",
+                   arg_group_id));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 
"org.gnome.DVB.Manager", "GroupAdded",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_gdd_manager__on_signal_group_removed (
+    GddManager *object,
+    guint arg_group_id)
+{
+  GddManagerSkeleton *skeleton = GDD_MANAGER__SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(u)",
+                   arg_group_id));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 
"org.gnome.DVB.Manager", "GroupRemoved",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void gdd_manager__skeleton_iface_init (GddManagerIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (GddManagerSkeleton, gdd_manager__skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (GddManagerSkeleton)
+                         G_IMPLEMENT_INTERFACE (GDD_MANAGER_TYPE_, gdd_manager__skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (GddManagerSkeleton, gdd_manager__skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (GDD_MANAGER_TYPE_, gdd_manager__skeleton_iface_init));
+
+#endif
+static void
+gdd_manager__skeleton_finalize (GObject *object)
+{
+  GddManagerSkeleton *skeleton = GDD_MANAGER__SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (gdd_manager__skeleton_parent_class)->finalize (object);
+}
+
+static void
+gdd_manager__skeleton_init (GddManagerSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = gdd_manager__skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, GDD_MANAGER_TYPE__SKELETON, 
GddManagerSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+gdd_manager__skeleton_class_init (GddManagerSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = gdd_manager__skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = gdd_manager__skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = gdd_manager__skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = gdd_manager__skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = gdd_manager__skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (GddManagerSkeletonPrivate));
+#endif
+}
+
+static void
+gdd_manager__skeleton_iface_init (GddManagerIface *iface)
+{
+  iface->group_added = _gdd_manager__on_signal_group_added;
+  iface->group_removed = _gdd_manager__on_signal_group_removed;
+}
+
+/**
+ * gdd_manager__skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link 
linkend="gdbus-interface-org-gnome-DVB-Manager.top_of_page">org.gnome.DVB.Manager</link>.
+ *
+ * Returns: (transfer full) (type GddManagerSkeleton): The skeleton object.
+ */
+GddManager *
+gdd_manager__skeleton_new (void)
+{
+  return GDD_MANAGER_ (g_object_new (GDD_MANAGER_TYPE__SKELETON, NULL));
+}
+
diff --git a/client/grilo-plugin/gdd-manager.h b/client/grilo-plugin/gdd-manager.h
new file mode 100644
index 0000000..13f9955
--- /dev/null
+++ b/client/grilo-plugin/gdd-manager.h
@@ -0,0 +1,526 @@
+/*
+ * Generated by gdbus-codegen 2.42.0. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifndef __GDD_MANAGER_H__
+#define __GDD_MANAGER_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.gnome.DVB.Manager */
+
+#define GDD_MANAGER_TYPE_ (gdd_manager__get_type ())
+#define GDD_MANAGER_(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_MANAGER_TYPE_, GddManager))
+#define GDD_MANAGER_IS_(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_MANAGER_TYPE_))
+#define GDD_MANAGER__GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), GDD_MANAGER_TYPE_, GddManagerIface))
+
+struct _GddManager;
+typedef struct _GddManager GddManager;
+typedef struct _GddManagerIface GddManagerIface;
+
+struct _GddManagerIface
+{
+  GTypeInterface parent_iface;
+
+
+  gboolean (*handle_add_channel_group) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *arg_name);
+
+  gboolean (*handle_add_device_to_new_group) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    const gchar *arg_channels_conf,
+    const gchar *arg_recordings_dir,
+    const gchar *arg_name);
+
+  gboolean (*handle_get_adapter_info) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_adapter,
+    guint arg_frontend);
+
+  gboolean (*handle_get_channel_groups) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_device_group) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_group_id);
+
+  gboolean (*handle_get_device_group_size) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_devices) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_name_of_registered_device) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_adapter,
+    guint arg_frontend);
+
+  gboolean (*handle_get_registered_device_groups) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation);
+
+  gboolean (*handle_get_scanner_for_device) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type);
+
+  gboolean (*handle_remove_channel_group) (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gint arg_channel_group_id);
+
+  void (*group_added) (
+    GddManager *object,
+    guint arg_group_id);
+
+  void (*group_removed) (
+    GddManager *object,
+    guint arg_group_id);
+
+};
+
+GType gdd_manager__get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *gdd_manager__interface_info (void);
+guint gdd_manager__override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void gdd_manager__complete_get_scanner_for_device (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *opath,
+    const gchar *dbusiface,
+    gboolean result);
+
+void gdd_manager__complete_get_registered_device_groups (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *const *result);
+
+void gdd_manager__complete_get_device_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *opath,
+    gboolean result);
+
+void gdd_manager__complete_add_device_to_new_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+void gdd_manager__complete_get_name_of_registered_device (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *name,
+    gboolean result);
+
+void gdd_manager__complete_get_device_group_size (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gint result);
+
+void gdd_manager__complete_get_channel_groups (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result);
+
+void gdd_manager__complete_add_channel_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gint channel_group_id,
+    gboolean result);
+
+void gdd_manager__complete_remove_channel_group (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    gboolean result);
+
+void gdd_manager__complete_get_devices (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *result);
+
+void gdd_manager__complete_get_adapter_info (
+    GddManager *object,
+    GDBusMethodInvocation *invocation,
+    GVariant *info,
+    gboolean result);
+
+
+
+/* D-Bus signal emissions functions: */
+void gdd_manager__emit_group_added (
+    GddManager *object,
+    guint arg_group_id);
+
+void gdd_manager__emit_group_removed (
+    GddManager *object,
+    guint arg_group_id);
+
+
+
+/* D-Bus method calls: */
+void gdd_manager__call_get_scanner_for_device (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_scanner_for_device_finish (
+    GddManager *proxy,
+    gchar **out_opath,
+    gchar **out_dbusiface,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_scanner_for_device_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    gchar **out_opath,
+    gchar **out_dbusiface,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_get_registered_device_groups (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_registered_device_groups_finish (
+    GddManager *proxy,
+    gchar ***out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_registered_device_groups_sync (
+    GddManager *proxy,
+    gchar ***out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_get_device_group (
+    GddManager *proxy,
+    guint arg_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_device_group_finish (
+    GddManager *proxy,
+    gchar **out_opath,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_device_group_sync (
+    GddManager *proxy,
+    guint arg_group_id,
+    gchar **out_opath,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_add_device_to_new_group (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    const gchar *arg_channels_conf,
+    const gchar *arg_recordings_dir,
+    const gchar *arg_name,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_add_device_to_new_group_finish (
+    GddManager *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_add_device_to_new_group_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gint arg_type,
+    const gchar *arg_channels_conf,
+    const gchar *arg_recordings_dir,
+    const gchar *arg_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_get_name_of_registered_device (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_name_of_registered_device_finish (
+    GddManager *proxy,
+    gchar **out_name,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_name_of_registered_device_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    gchar **out_name,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_get_device_group_size (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_device_group_size_finish (
+    GddManager *proxy,
+    gint *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_device_group_size_sync (
+    GddManager *proxy,
+    gint *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_get_channel_groups (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_channel_groups_finish (
+    GddManager *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_channel_groups_sync (
+    GddManager *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_add_channel_group (
+    GddManager *proxy,
+    const gchar *arg_name,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_add_channel_group_finish (
+    GddManager *proxy,
+    gint *out_channel_group_id,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_add_channel_group_sync (
+    GddManager *proxy,
+    const gchar *arg_name,
+    gint *out_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_remove_channel_group (
+    GddManager *proxy,
+    gint arg_channel_group_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_remove_channel_group_finish (
+    GddManager *proxy,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_remove_channel_group_sync (
+    GddManager *proxy,
+    gint arg_channel_group_id,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_get_devices (
+    GddManager *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_devices_finish (
+    GddManager *proxy,
+    GVariant **out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_devices_sync (
+    GddManager *proxy,
+    GVariant **out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+void gdd_manager__call_get_adapter_info (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean gdd_manager__call_get_adapter_info_finish (
+    GddManager *proxy,
+    GVariant **out_info,
+    gboolean *out_result,
+    GAsyncResult *res,
+    GError **error);
+
+gboolean gdd_manager__call_get_adapter_info_sync (
+    GddManager *proxy,
+    guint arg_adapter,
+    guint arg_frontend,
+    GVariant **out_info,
+    gboolean *out_result,
+    GCancellable *cancellable,
+    GError **error);
+
+
+
+/* ---- */
+
+#define GDD_MANAGER_TYPE__PROXY (gdd_manager__proxy_get_type ())
+#define GDD_MANAGER__PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_MANAGER_TYPE__PROXY, GddManagerProxy))
+#define GDD_MANAGER__PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GDD_MANAGER_TYPE__PROXY, 
GddManagerProxyClass))
+#define GDD_MANAGER__PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDD_MANAGER_TYPE__PROXY, 
GddManagerProxyClass))
+#define GDD_MANAGER_IS__PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_MANAGER_TYPE__PROXY))
+#define GDD_MANAGER_IS__PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDD_MANAGER_TYPE__PROXY))
+
+typedef struct _GddManagerProxy GddManagerProxy;
+typedef struct _GddManagerProxyClass GddManagerProxyClass;
+typedef struct _GddManagerProxyPrivate GddManagerProxyPrivate;
+
+struct _GddManagerProxy
+{
+  /*< private >*/
+  GDBusProxy parent_instance;
+  GddManagerProxyPrivate *priv;
+};
+
+struct _GddManagerProxyClass
+{
+  GDBusProxyClass parent_class;
+};
+
+GType gdd_manager__proxy_get_type (void) G_GNUC_CONST;
+
+void gdd_manager__proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data);
+GddManager *gdd_manager__proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error);
+GddManager *gdd_manager__proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error);
+
+void gdd_manager__proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data);
+GddManager *gdd_manager__proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error);
+GddManager *gdd_manager__proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error);
+
+
+/* ---- */
+
+#define GDD_MANAGER_TYPE__SKELETON (gdd_manager__skeleton_get_type ())
+#define GDD_MANAGER__SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDD_MANAGER_TYPE__SKELETON, 
GddManagerSkeleton))
+#define GDD_MANAGER__SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GDD_MANAGER_TYPE__SKELETON, 
GddManagerSkeletonClass))
+#define GDD_MANAGER__SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDD_MANAGER_TYPE__SKELETON, 
GddManagerSkeletonClass))
+#define GDD_MANAGER_IS__SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDD_MANAGER_TYPE__SKELETON))
+#define GDD_MANAGER_IS__SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDD_MANAGER_TYPE__SKELETON))
+
+typedef struct _GddManagerSkeleton GddManagerSkeleton;
+typedef struct _GddManagerSkeletonClass GddManagerSkeletonClass;
+typedef struct _GddManagerSkeletonPrivate GddManagerSkeletonPrivate;
+
+struct _GddManagerSkeleton
+{
+  /*< private >*/
+  GDBusInterfaceSkeleton parent_instance;
+  GddManagerSkeletonPrivate *priv;
+};
+
+struct _GddManagerSkeletonClass
+{
+  GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType gdd_manager__skeleton_get_type (void) G_GNUC_CONST;
+
+GddManager *gdd_manager__skeleton_new (void);
+
+
+G_END_DECLS
+
+#endif /* __GDD_MANAGER_H__ */
diff --git a/client/grilo-plugin/grl-dvb-daemon-exporter.c b/client/grilo-plugin/grl-dvb-daemon-exporter.c
new file mode 100644
index 0000000..930b17a
--- /dev/null
+++ b/client/grilo-plugin/grl-dvb-daemon-exporter.c
@@ -0,0 +1,206 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-  */
+/*
+ * grl-dvb-daemon-exporter.c
+ * Copyright (C) 2014 Sebastian Pölsterl
+ *
+ * This file is part of GNOME DVB Daemon.
+ *
+ * GNOME DVB Daemon is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNOME DVB Daemon is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNOME DVB Daemon.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gdd-device-group.h"
+
+#include "grl-dvb-daemon-exporter.h"
+
+static GrlMedia * create_media_box (GrlDvbDaemonExporter *self);
+
+struct _GrlDvbDaemonExporterPrivate
+{
+       GDBusConnection *bus;
+       gchar *object_path;
+       gchar *name;
+       gchar *channel_list_path;
+};
+
+
+enum
+{
+       PROP_0,
+
+       PROP_OBJECT_PATH,
+       PROP_NAME
+};
+
+
+
+G_DEFINE_TYPE (GrlDvbDaemonExporter, grl_dvb_daemon_exporter, G_TYPE_OBJECT);
+
+static void
+grl_dvb_daemon_exporter_init (GrlDvbDaemonExporter *grl_dvb_daemon_exporter)
+{
+       grl_dvb_daemon_exporter->priv = G_TYPE_INSTANCE_GET_PRIVATE (grl_dvb_daemon_exporter, 
GRL_TYPE_DVB_DAEMON_EXPORTER, GrlDvbDaemonExporterPrivate);
+
+       /* TODO: Add initialization code here */
+       grl_dvb_daemon_exporter->priv->bus = NULL;
+       grl_dvb_daemon_exporter->priv->name = NULL;
+       grl_dvb_daemon_exporter->priv->channel_list_path = NULL;
+}
+
+static void
+grl_dvb_daemon_exporter_finalize (GObject *object)
+{
+       /* TODO: Add deinitalization code here */
+       GrlDvbDaemonExporterPrivate *priv = GRL_DVB_DAEMON_EXPORTER (object)->priv;
+
+       if (priv->bus != NULL)
+               g_object_unref (priv->bus);
+       if (priv->object_path != NULL)
+               g_free (priv->object_path);
+       if (priv->name != NULL)
+               g_free (priv->name);
+       if (priv->channel_list_path != NULL)
+               g_free (priv->channel_list_path);
+
+       G_OBJECT_CLASS (grl_dvb_daemon_exporter_parent_class)->finalize (object);
+}
+
+static void
+grl_dvb_daemon_exporter_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+       g_return_if_fail (GRL_IS_DVB_DAEMON_EXPORTER (object));
+
+       GrlDvbDaemonExporter *self = GRL_DVB_DAEMON_EXPORTER (object);
+
+       switch (prop_id)
+       {
+       case PROP_OBJECT_PATH:
+               if (self->priv->object_path != NULL)
+                       g_free (self->priv->object_path);
+               self->priv->object_path = g_value_dup_string (value);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
+grl_dvb_daemon_exporter_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+       g_return_if_fail (GRL_IS_DVB_DAEMON_EXPORTER (object));
+
+       GrlDvbDaemonExporter *self = GRL_DVB_DAEMON_EXPORTER (object);
+
+       switch (prop_id)
+       {
+       case PROP_OBJECT_PATH:
+               g_value_set_string (value, self->priv->object_path);
+               break;
+       case PROP_NAME:
+               g_value_set_string (value, self->priv->name);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
+grl_dvb_daemon_exporter_class_init (GrlDvbDaemonExporterClass *klass)
+{
+       GObjectClass* object_class = G_OBJECT_CLASS (klass);
+
+       g_type_class_add_private (klass, sizeof (GrlDvbDaemonExporterPrivate));
+
+       object_class->finalize = grl_dvb_daemon_exporter_finalize;
+       object_class->set_property = grl_dvb_daemon_exporter_set_property;
+       object_class->get_property = grl_dvb_daemon_exporter_get_property;
+
+       g_object_class_install_property (object_class,
+                                        PROP_OBJECT_PATH,
+                                        g_param_spec_string ("object-path",
+                                                             "object path",
+                                                             "DBus object path to device group",
+                                                             NULL,
+                                                             G_PARAM_READABLE | G_PARAM_WRITABLE | 
G_PARAM_CONSTRUCT_ONLY));
+
+       g_object_class_install_property (object_class,
+                                        PROP_NAME,
+                                        g_param_spec_string ("name",
+                                                             "Name",
+                                                             "Name of device group",
+                                                             NULL,
+                                                             G_PARAM_READABLE));
+}
+
+static GrlMedia *
+create_media_box (GrlDvbDaemonExporter *self)
+{
+       GrlMedia * box = GRL_MEDIA (grl_media_box_new ());
+       grl_media_set_id (box, self->priv->channel_list_path);
+       grl_media_set_title (box, self->priv->name);
+       return box;
+}
+
+GrlMedia *
+grl_dvb_daemon_exporter_get_media_box (GrlDvbDaemonExporter *self,
+                                         GCancellable *cancellable,
+                                         GError **error)
+{
+       GddDeviceGroup *proxy = NULL;
+       if (self->priv->name == NULL) {
+               proxy = gdd_device_group__proxy_new_sync (self->priv->bus,
+                                                G_DBUS_PROXY_FLAGS_NONE,
+                                                "org.gnome.DVB",
+                                                self->priv->object_path,
+                                                cancellable, error);
+               if (proxy == NULL)
+                       goto on_error;
+
+               if (!gdd_device_group__call_get_name_sync (proxy, &self->priv->name,
+                                                              cancellable, error))
+               {
+                       goto on_error;
+               }
+
+               if (!gdd_device_group__call_get_channel_list_sync (proxy,
+                                                                      &self->priv->channel_list_path,
+                                                                      cancellable,
+                                                                      error))
+               {
+                       goto on_error;
+               }
+
+               g_object_unref (proxy);
+       }
+
+       return create_media_box (self);
+
+on_error:
+       if (proxy != NULL)
+               g_object_unref (proxy);
+
+       return NULL;
+}
+
+GrlDvbDaemonExporter*
+grl_dvb_daemon_exporter_new (const gchar *path, GDBusConnection *bus)
+{
+       g_return_val_if_fail (path != NULL, NULL);
+
+       GrlDvbDaemonExporter *self = g_object_new (GRL_TYPE_DVB_DAEMON_EXPORTER,
+                                                    "object-path", path, NULL);
+       self->priv->bus = g_object_ref (bus);
+       return self;
+}
diff --git a/client/grilo-plugin/grl-dvb-daemon-exporter.h b/client/grilo-plugin/grl-dvb-daemon-exporter.h
new file mode 100644
index 0000000..394a365
--- /dev/null
+++ b/client/grilo-plugin/grl-dvb-daemon-exporter.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-  */
+/*
+ * grl-dvb-daemon-exporter.h
+ * Copyright (C) 2014 Sebastian Pölsterl
+ *
+ * This file is part of GNOME DVB Daemon.
+ *
+ * GNOME DVB Daemon is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNOME DVB Daemon is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNOME DVB Daemon.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _GRL_DVB_DAEMON_EXPORTER_H_
+#define _GRL_DVB_DAEMON_EXPORTER_H_
+
+#include <glib-object.h>
+#include <gio/gio.h>
+#include <grilo.h>
+
+G_BEGIN_DECLS
+
+#define GRL_TYPE_DVB_DAEMON_EXPORTER             (grl_dvb_daemon_exporter_get_type ())
+#define GRL_DVB_DAEMON_EXPORTER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GRL_TYPE_DVB_DAEMON_EXPORTER, GrlDvbDaemonExporter))
+#define GRL_DVB_DAEMON_EXPORTER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), 
GRL_TYPE_DVB_DAEMON_EXPORTER, GrlDvbDaemonExporterClass))
+#define GRL_IS_DVB_DAEMON_EXPORTER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GRL_TYPE_DVB_DAEMON_EXPORTER))
+#define GRL_IS_DVB_DAEMON_EXPORTER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GRL_TYPE_DVB_DAEMON_EXPORTER))
+#define GRL_DVB_DAEMON_EXPORTER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GRL_TYPE_DVB_DAEMON_EXPORTER, GrlDvbDaemonExporterClass))
+
+typedef struct _GrlDvbDaemonExporterClass GrlDvbDaemonExporterClass;
+typedef struct _GrlDvbDaemonExporter GrlDvbDaemonExporter;
+typedef struct _GrlDvbDaemonExporterPrivate GrlDvbDaemonExporterPrivate;
+
+
+struct _GrlDvbDaemonExporterClass
+{
+       GObjectClass parent_class;
+};
+
+struct _GrlDvbDaemonExporter
+{
+       GObject parent_instance;
+
+       GrlDvbDaemonExporterPrivate *priv;
+};
+
+GrlDvbDaemonExporter * grl_dvb_daemon_exporter_new (const gchar *path, GDBusConnection *bus);
+GrlMedia * grl_dvb_daemon_exporter_get_media_box (GrlDvbDaemonExporter *self,
+                                                    GCancellable *cancellable,
+                                                    GError **error);
+
+void grl_dvb_daemon_exporter_run (GrlDvbDaemonExporter *);
+
+GType grl_dvb_daemon_exporter_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* _GRL_DVB_DAEMON_EXPORTER_H_ */
+
diff --git a/client/grilo-plugin/grl-dvb-daemon-source.c b/client/grilo-plugin/grl-dvb-daemon-source.c
new file mode 100644
index 0000000..d5e4cb7
--- /dev/null
+++ b/client/grilo-plugin/grl-dvb-daemon-source.c
@@ -0,0 +1,364 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-  */
+/*
+ * grl-dvb-daemon-source.c
+ * Copyright (C) 2014 Sebastian Pölsterl
+ *
+ * This file is part of GNOME DVB Daemon.
+ *
+ * GNOME DVB Daemon is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNOME DVB Daemon is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNOME DVB Daemon.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gdd-manager.h"
+#include "gdd-channel-list.h"
+#include "grl-dvb-daemon-exporter.h"
+
+#include "grl-dvb-daemon-source.h"
+
+/* --- Plugin information --- */
+
+#define PLUGIN_ID   DVBDAEMON_PLUGIN_ID
+
+#define SOURCE_ID   "grl-dvb-daemon"
+#define SOURCE_NAME "DVB Daemon"
+#define SOURCE_DESC "A source to access TV and radio channels"
+
+/* --------- Logging  -------- */
+
+#define GRL_LOG_DOMAIN_DEFAULT dvbdaemon_log_domain
+GRL_LOG_DOMAIN_STATIC(dvbdaemon_log_domain);
+
+
+static const GList * grl_dvb_daemon_source_supported_keys (GrlSource *source);
+
+static void grl_dvb_daemon_source_browse (GrlSource *source,
+                                          GrlSourceBrowseSpec *bs);
+
+static gboolean grl_dvb_daemon_source_connect_bus (GrlDvbDaemonSource *source);
+
+static GrlMedia * create_channel_media (GVariant * value);
+
+/* --------- Callbacks  -------- */
+
+static void on_manager_proxy_cb (GObject *source,
+                                 GAsyncResult *res,
+                                 gpointer user_data);
+
+static void on_manager_get_device_groups_cb (GObject *source,
+                                             GAsyncResult *res,
+                                             gpointer user_data);
+
+static void on_channel_list_proxy_cb (GObject *source,
+                                      GAsyncResult *res,
+                                      gpointer user_data);
+
+struct _GrlDvbDaemonSourcePrivate
+{
+       GDBusConnection* bus;
+};
+
+
+G_DEFINE_TYPE (GrlDvbDaemonSource, grl_dvb_daemon_source, GRL_TYPE_SOURCE);
+
+
+/* ================== DVB Daemon Plugin ================ */
+
+static gboolean
+grl_dvb_daemon_plugin_init (GrlRegistry *registry,
+                     GrlPlugin *plugin,
+                     GList *configs)
+{
+       GRL_LOG_DOMAIN_INIT (dvbdaemon_log_domain, "dvbdaemon");
+
+       GRL_DEBUG ("grl_dvb_daemon_plugin_init");
+
+       GrlDvbDaemonSource *source = grl_dvb_daemon_source_new ();
+       if (grl_dvb_daemon_source_connect_bus (source)) {
+               grl_registry_register_source (registry,
+                                             plugin,
+                                             GRL_SOURCE (source),
+                                             NULL);
+               return TRUE;
+       }
+       return FALSE;
+}
+
+GRL_PLUGIN_REGISTER (grl_dvb_daemon_plugin_init, NULL, DVBDAEMON_PLUGIN_ID);
+
+
+/* ================== DVB Daemon GObject ================ */
+
+static void
+grl_dvb_daemon_source_init (GrlDvbDaemonSource *grl_dvb_daemon_source)
+{
+       grl_dvb_daemon_source->priv = G_TYPE_INSTANCE_GET_PRIVATE (grl_dvb_daemon_source, 
GRL_TYPE_DVB_DAEMON_SOURCE, GrlDvbDaemonSourcePrivate);
+
+       /* TODO: Add initialization code here */
+}
+
+static void
+grl_dvb_daemon_source_finalize (GObject *object)
+{
+       GrlDvbDaemonSourcePrivate* priv = GRL_DVB_DAEMON_SOURCE (object)->priv;
+
+       /* TODO: Add deinitalization code here */
+       if (priv->bus != NULL) {
+               g_dbus_connection_close_sync (priv->bus, NULL, NULL);
+               g_object_unref (priv->bus);
+       }
+
+       G_OBJECT_CLASS (grl_dvb_daemon_source_parent_class)->finalize (object);
+}
+
+static void
+grl_dvb_daemon_source_class_init (GrlDvbDaemonSourceClass *klass)
+{
+       GObjectClass* object_class = G_OBJECT_CLASS (klass);
+       GrlSourceClass *source_class = GRL_SOURCE_CLASS (klass);
+
+       object_class->finalize = grl_dvb_daemon_source_finalize;
+
+       source_class->supported_keys = grl_dvb_daemon_source_supported_keys;
+       source_class->browse = grl_dvb_daemon_source_browse;
+
+       g_type_class_add_private (klass, sizeof (GrlDvbDaemonSourcePrivate));
+}
+
+GrlDvbDaemonSource*
+grl_dvb_daemon_source_new (void)
+{
+       return g_object_new (GRL_TYPE_DVB_DAEMON_SOURCE,
+                        "source-id", SOURCE_ID,
+                        "source-name", SOURCE_NAME,
+                        "source-desc", SOURCE_DESC,
+                        NULL);
+}
+
+static gboolean
+grl_dvb_daemon_source_connect_bus (GrlDvbDaemonSource *source)
+{
+       GError *error = NULL;
+
+       source->priv->bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+       if (source->priv->bus == NULL) {
+               GRL_ERROR ("Error connecting to session bus: %s", error->message);
+               g_error_free (error);
+               return FALSE;
+       }
+       return TRUE;
+}
+
+static const GList *
+grl_dvb_daemon_source_supported_keys (GrlSource *source)
+{
+       static GList *keys = NULL;
+       if (!keys) {
+               keys = grl_metadata_key_list_new (GRL_METADATA_KEY_ID,
+                                      GRL_METADATA_KEY_TITLE,
+                                      GRL_METADATA_KEY_URL,
+                                      GRL_METADATA_KEY_CHILDCOUNT,
+                                      NULL);
+       }
+       return keys;
+}
+
+static void
+grl_dvb_daemon_source_browse (GrlSource *source,
+                              GrlSourceBrowseSpec *bs)
+{
+       GrlDvbDaemonSource *self = GRL_DVB_DAEMON_SOURCE(source);
+       GRL_DEBUG ("grl_dvb_daemon_source_browse");
+
+    const gchar* channel_list_path = grl_media_get_id (bs->container);
+       if (channel_list_path == NULL) {
+               gdd_manager__proxy_new (self->priv->bus,
+                                       G_DBUS_PROXY_FLAGS_NONE,
+                                       "org.gnome.DVB",
+                                       "/org/gnome/DVB/Manager",
+                                       NULL,
+                                       on_manager_proxy_cb, bs);
+       } else {
+               GRL_DEBUG ("Browsing device group with ID %s", channel_list_path);
+
+               gdd_channel_list__proxy_new (self->priv->bus,
+                                    G_DBUS_PROXY_FLAGS_NONE,
+                                    "org.gnome.DVB",
+                                    channel_list_path,
+                                    NULL,
+                                    on_channel_list_proxy_cb, bs);
+       }
+}
+
+static void
+on_manager_proxy_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+       GddManager *manager;
+       GError *error = NULL;
+       GrlSourceBrowseSpec *bs = user_data;
+
+       manager = gdd_manager__proxy_new_finish (res, &error);
+       if (manager == NULL) {
+               GRL_ERROR ("Failed creating Manager proxy: %s", error->message);
+               goto on_error;
+       }
+
+       gdd_manager__call_get_registered_device_groups (manager, NULL,
+                                                       on_manager_get_device_groups_cb,
+                                                       user_data);
+       return;
+
+on_error:
+       bs->callback (bs->source, bs->operation_id, NULL, 0, bs->user_data, error);
+       g_error_free (error);
+       return;
+}
+
+static void
+on_manager_get_device_groups_cb (GObject *source, GAsyncResult *res,
+                                 gpointer user_data)
+{
+       gchar **object_paths;
+       gint n_groups;
+       GError *error = NULL;
+       GddManager *manager = GDD_MANAGER_ (source);
+       GrlSourceBrowseSpec *bs = user_data;
+
+       if (!gdd_manager__call_get_registered_device_groups_finish (manager,
+                                                                   &object_paths,
+                                                                   res,
+                                                                   &error))
+       {
+               GRL_ERROR ("Error retrieving device groups: %s", error->message);
+               goto on_error;
+       }
+
+       if (!gdd_manager__call_get_device_group_size_sync (manager, &n_groups,
+                                                          NULL, &error))
+       {
+               GRL_ERROR ("Error retrieving number of device groups: %s", error->message);
+               goto on_error;
+       }
+
+       GRL_DEBUG ("Retrieving %d device groups", n_groups);
+
+       while (*object_paths != NULL) {
+               GrlDvbDaemonExporter *exporter;
+               GrlMedia *box;
+               GRL_DEBUG ("Adding media box with ID %s", *object_paths);
+
+               exporter = grl_dvb_daemon_exporter_new (*object_paths,
+                                                         GRL_DVB_DAEMON_SOURCE(bs->source)->priv->bus);
+               box = grl_dvb_daemon_exporter_get_media_box (exporter, NULL, &error);
+               if (box == NULL) {
+                       g_object_unref (exporter);
+                       goto on_error;
+               }
+
+               bs->callback (bs->source, bs->operation_id, box,
+                             --n_groups, bs->user_data, NULL);
+
+               g_object_unref (exporter);
+               object_paths++;
+       }
+       return;
+
+on_error:
+       bs->callback (bs->source, bs->operation_id, NULL, 0, bs->user_data, error);
+       g_error_free (error);
+       return;
+}
+
+static GrlMedia *
+create_channel_media (GVariant * value)
+{
+       GVariant *var_sid, *var_name, *var_radio, *var_url;
+       gchar *sid_str;
+       GrlMedia *channel;
+
+       var_sid = g_variant_get_child_value (value, 0);
+       var_name = g_variant_get_child_value (value, 1);
+       var_radio = g_variant_get_child_value (value, 2);
+       var_url = g_variant_get_child_value (value, 3);
+
+       if (g_variant_get_boolean (var_radio))
+               channel = GRL_MEDIA (grl_media_audio_new ());
+       else
+               channel = GRL_MEDIA (grl_media_video_new ());
+
+       sid_str = g_strdup_printf ("%u", g_variant_get_uint32 (var_sid));
+       GRL_DEBUG ("Creating channel media %s", sid_str);
+
+       grl_media_set_id (channel, sid_str);
+       grl_media_set_title (channel, g_variant_get_string (var_name, NULL));
+       grl_media_set_url (channel, g_variant_get_string (var_url, NULL));
+
+       g_free (sid_str);
+       g_variant_unref (var_sid);
+       g_variant_unref (var_name);
+       g_variant_unref (var_radio);
+       g_variant_unref (var_url);
+
+       return channel;
+}
+
+static void
+on_channel_list_proxy_cb (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+       GError *error = NULL;
+       GddChannelList *list;
+       GVariant *channels = NULL;
+       GVariant *child = NULL;
+       GVariantIter iter;
+       gsize n_channels;
+       GrlSourceBrowseSpec *bs = user_data;
+
+       list = gdd_channel_list__proxy_new_finish (res, &error);
+       if (list == NULL) {
+               goto on_error;
+       }
+
+       if (!gdd_channel_list__call_get_channel_infos_sync (list, &channels,
+                                                           NULL, &error))
+       {
+               goto on_error;
+       }
+
+       n_channels = g_variant_n_children (channels);
+       g_variant_iter_init (&iter, channels);
+       while ((child = g_variant_iter_next_value (&iter))) {
+               GrlMedia *channel = create_channel_media (child);
+
+               bs->callback (bs->source, bs->operation_id, channel,
+                             --n_channels, bs->user_data, NULL);
+
+               g_variant_unref (child);
+       }
+
+       g_variant_unref (channels);
+       g_object_unref (list);
+       return;
+
+on_error:
+       if (child != NULL)
+               g_variant_unref (child);
+       if (channels != NULL)
+               g_variant_unref (channels);
+       if (list != NULL)
+               g_object_unref (list);
+       bs->callback (bs->source, bs->operation_id, NULL, 0, bs->user_data, error);
+       g_error_free (error);
+}
diff --git a/client/grilo-plugin/grl-dvb-daemon-source.h b/client/grilo-plugin/grl-dvb-daemon-source.h
new file mode 100644
index 0000000..cdc411f
--- /dev/null
+++ b/client/grilo-plugin/grl-dvb-daemon-source.h
@@ -0,0 +1,59 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-  */
+/*
+ * grl-dvb-daemon-source.h
+ * Copyright (C) 2014 Sebastian Pölsterl
+ *
+ * This file is part of GNOME DVB Daemon.
+ *
+ * GNOME DVB Daemon is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNOME DVB Daemon is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNOME DVB Daemon.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _GRL_DVB_DAEMON_SOURCE_H_
+#define _GRL_DVB_DAEMON_SOURCE_H_
+
+#include <grilo.h>
+
+G_BEGIN_DECLS
+
+#define GRL_TYPE_DVB_DAEMON_SOURCE             (grl_dvb_daemon_source_get_type ())
+#define GRL_DVB_DAEMON_SOURCE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GRL_TYPE_DVB_DAEMON_SOURCE, GrlDvbDaemonSource))
+#define GRL_DVB_DAEMON_SOURCE_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), 
GRL_TYPE_DVB_DAEMON_SOURCE, GrlDvbDaemonSourceClass))
+#define GRL_IS_DVB_DAEMON_SOURCE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GRL_TYPE_DVB_DAEMON_SOURCE))
+#define GRL_IS_DVB_DAEMON_SOURCE_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GRL_TYPE_DVB_DAEMON_SOURCE))
+#define GRL_DVB_DAEMON_SOURCE_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GRL_TYPE_DVB_DAEMON_SOURCE, GrlDvbDaemonSourceClass))
+
+typedef struct _GrlDvbDaemonSourceClass GrlDvbDaemonSourceClass;
+typedef struct _GrlDvbDaemonSource GrlDvbDaemonSource;
+typedef struct _GrlDvbDaemonSourcePrivate GrlDvbDaemonSourcePrivate;
+
+
+struct _GrlDvbDaemonSourceClass
+{
+       GrlSourceClass parent_class;
+};
+
+struct _GrlDvbDaemonSource
+{
+       GrlSource parent_instance;
+
+       GrlDvbDaemonSourcePrivate *priv;
+};
+
+GrlDvbDaemonSource* grl_dvb_daemon_source_new (void);
+GType grl_dvb_daemon_source_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* _GRL_DVB_DAEMON_SOURCE_H_ */
+
diff --git a/client/grilo-plugin/grl-dvb-daemon.xml b/client/grilo-plugin/grl-dvb-daemon.xml
new file mode 100644
index 0000000..b80f02e
--- /dev/null
+++ b/client/grilo-plugin/grl-dvb-daemon.xml
@@ -0,0 +1,12 @@
+<plugin>
+  <info>
+    <name>DVB Daemon</name>
+    <module>libgrldvbdaemon</module>
+    <description>A plugin for browsing TV and radio channels</description>
+    <author>Sebastian Pölsterl</author>
+    <license>GPLv3</license>
+    <site>http://wiki.gnome.org/DVBDaemon</site>
+  </info>
+</plugin>
+
+
diff --git a/configure.ac b/configure.ac
index 0bdf8e4..a8ffb0c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -125,6 +125,46 @@ if test "x$enable_totem" = "xyes"; then
 fi
 AC_SUBST(TOTEM_PLUGIN_DIR)
 
+dnl ****************
+dnl * Grilo plugin
+dnl ****************
+GRL_VERSION=0.2
+GRL_NAME=grilo-${GRL_VERSION}
+PKG_CHECK_MODULES([GRILO], [${GRL_NAME} gio-unix-2.0 gio-2.0 glib-2.0 gobject-2.0 gmodule-2.0],
+                    HAVE_GRL=yes,
+                    HAVE_GRL=no)
+
+GRL_PLUGINS_DIR=`${PKG_CONFIG} --variable=plugindir ${GRL_NAME}`
+AC_SUBST(GRL_PLUGINS_DIR)
+AC_DEFINE_UNQUOTED(GRL_PLUGINS_DIR, "$GRL_PLUGINS_DIR", [Grilo Plugins directory])
+
+DVBDAEMON_PLUGIN_ID="grl-dvb-daemon"
+AC_SUBST(DVBDAEMON_PLUGIN_ID)
+AC_DEFINE_UNQUOTED([DVBDAEMON_PLUGIN_ID], ["$DVBDAEMON_PLUGIN_ID"], [DVB Daemon plugin ID])
+
+AC_ARG_ENABLE([grilo-plugin],
+       AS_HELP_STRING([--enable-grilo-plugin], [Install the Grilo plugin (default: auto)]),
+       [
+               case "$enablevar" in
+                       yes)
+                               if test "x$HAVE_GRL" = "xno"; then
+                                       AC_MSG_ERROR([${GRL_NAME} not found, install it or use 
--disable-grilo-plugin])
+                               fi
+
+                       ;;
+               esac
+       ],
+       [
+               if test "x$HAVE_GRL" = "xyes"; then
+                       enable_grilo=yes
+               else
+                       enable_grilo=no
+               fi
+       ])
+
+AM_CONDITIONAL(ENABLE_GRILO, test "x$enable_grilo" = "xyes")
+
+
 dnl **********
 dnl * Python
 dnl **********
@@ -146,6 +186,7 @@ AC_CONFIG_FILES([
        client/Makefile
        client/gnomedvb/defs.py
        client/gnomedvb/Makefile
+       client/grilo-plugin/Makefile
        client/totem-plugin/Makefile
        data/Makefile
        data/gnome-dvb-control.desktop.in
@@ -161,4 +202,5 @@ $PACKAGE_NAME $PACKAGE_VERSION
     Install Prefix:               ${prefix}
     Python dir:                   ${pythondir}
     Build Totem plugin            ${enable_totem}
+    Build Grilo plugin            ${enable_grilo}
 "


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]