static void mtn_connman_g_signal (GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters) { MtnConnman *connman = MTN_CONNMAN (proxy); if (!connman->priv->properties) return; if (g_strcmp0 (signal_name, "PropertyChanged") == 0) { char *key; GVariant *value; g_variant_get (parameters, "(sv)", &key, &value); mtn_connman_handle_new_property (connman, key, value); } else if (g_strcmp0 (signal_name, "ServicesChanged") == 0) { if (connman->priv->services) g_variant_unref (connman->priv->services); /* get the first child from the (a(oa{sv})ao) tupple */ connman->priv->services = g_variant_get_child_value (parameters, 0); g_signal_emit (connman, signals[SERVICES_CHANGED_SIGNAL], 0, parameters); } }
static void _get_services_cb (GObject *obj, GAsyncResult *res, gpointer user_data) { MtnConnman *connman; GError *error; GVariant *var; InitData *data; connman = MTN_CONNMAN (obj); data = (InitData*)user_data; error = NULL; var = g_dbus_proxy_call_finish (G_DBUS_PROXY (obj), res, &error); if (!var) { g_warning ("Initial GetServices() failed: %s\n", error->message); g_error_free (error); } else { connman->priv->services = var; } if (data->done_props) { g_simple_async_result_complete_in_idle (data->res); g_object_unref (data->res); g_free (data); } else { data->done_services = TRUE; } }
static gboolean mtn_connman_initable_init_sync (GInitable *initable, GCancellable *cancellable, GError **error) { GInitableIface *iface_class, *parent_iface_class; GVariant *var, *value; GVariantIter *iter; char *key; MtnConnman *connman; connman = MTN_CONNMAN (initable); /* Chain up the old method */ iface_class = G_INITABLE_GET_IFACE (initable); parent_iface_class = g_type_interface_peek_parent (iface_class); if (!parent_iface_class->init (initable, cancellable, error)) { return FALSE; } g_signal_connect (connman, "notify::g-name-owner", G_CALLBACK (_name_owner_notify_cb), NULL); var = g_dbus_proxy_call_sync (G_DBUS_PROXY (connman), "GetProperties", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, error); if (!var) { return FALSE; } g_variant_get (var, "(a{sv})", &iter); while (g_variant_iter_next (iter, "{sv}", &key, &value)) { g_hash_table_insert (connman->priv->properties, key, value); } g_variant_iter_free (iter); g_variant_unref (var); var = g_dbus_proxy_call_sync (G_DBUS_PROXY (connman), "GetServices", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, error); if (!var) { return FALSE; } connman->priv->services = var; return TRUE; }
static void mtn_connman_dispose (GObject *object) { MtnConnman *connman; connman = MTN_CONNMAN (object); if (connman->priv->properties) { g_hash_table_unref (connman->priv->properties); connman->priv->properties = NULL; } if (connman->priv->services) g_variant_unref (connman->priv->services); G_OBJECT_CLASS (mtn_connman_parent_class)->dispose (object); }
static void mtn_service_model_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { MtnServiceModel *model; model = MTN_SERVICE_MODEL (object); switch (property_id) { case PROP_CONNMAN: mtn_service_model_set_connman (model, MTN_CONNMAN (g_value_get_object (value))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }
static void _get_properties_cb (GObject *obj, GAsyncResult *res, gpointer user_data) { MtnConnman *connman; GError *error; GVariant *var; InitData *data; connman = MTN_CONNMAN (obj); data = (InitData*)user_data; error = NULL; var = g_dbus_proxy_call_finish (G_DBUS_PROXY (obj), res, &error); if (!var) { g_warning ("Initial Service.GetProperties() failed: %s\n", error->message); g_error_free (error); } else { GVariant *value; char *key; GVariantIter *iter; g_variant_get (var, "(a{sv})", &iter); while (g_variant_iter_next (iter, "{sv}", &key, &value)) { g_hash_table_insert (connman->priv->properties, key, value); } g_variant_iter_free (iter); g_variant_unref (var); } if (data->done_services) { g_simple_async_result_complete_in_idle (data->res); g_object_unref (data->res); g_free (data); } else { data->done_props = TRUE; } }
MtnConnman * mtn_connman_new_finish (GAsyncResult *res, GError **error) { return MTN_CONNMAN (g_dbus_proxy_new_finish (res, error)); }