[tracker/external-crawler: 30/31] libtracker-miner: Add TrackerMiner::introspection-handler property
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/external-crawler: 30/31] libtracker-miner: Add TrackerMiner::introspection-handler property
- Date: Thu, 19 Jun 2014 14:10:57 +0000 (UTC)
commit b0023ab4305862b6b6f2c131eab45735dcefb68f
Author: Martyn Russell <martyn lanedo com>
Date: Fri Jun 13 12:40:08 2014 +0100
libtracker-miner: Add TrackerMiner::introspection-handler property
Allows miners to provide a GDBusInterfaceVTable structure to be called to
handle their extra method calls.
This is to be used with the TrackerMiner::introspection-xml property.
src/libtracker-miner/tracker-miner-object.c | 42 +++++++++++++++++++++++---
1 files changed, 37 insertions(+), 5 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-object.c b/src/libtracker-miner/tracker-miner-object.c
index f5d110b..10dbb29 100644
--- a/src/libtracker-miner/tracker-miner-object.c
+++ b/src/libtracker-miner/tracker-miner-object.c
@@ -122,6 +122,7 @@ struct _TrackerMinerPrivate {
gchar *status;
gdouble progress;
gchar *introspection_xml;
+ GDBusInterfaceVTable *introspection_handler;
gint remaining_time;
gint availability_cookie;
GDBusConnection *d_connection;
@@ -147,7 +148,8 @@ enum {
PROP_STATUS,
PROP_PROGRESS,
PROP_REMAINING_TIME,
- PROP_INTROSPECTION_XML
+ PROP_INTROSPECTION_XML,
+ PROP_INTROSPECTION_HANDLER
};
enum {
@@ -399,6 +401,12 @@ tracker_miner_class_init (TrackerMinerClass *klass)
"Introspection XML to *append* to the standard
miner interface provided",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_INTROSPECTION_HANDLER,
+ g_param_spec_pointer ("introspection-handler",
+ "Introspection Handler",
+ "Introspection Method Handler function,
expected to be a pointer to GDBusInterfaceVTable",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_type_class_add_private (object_class, sizeof (TrackerMinerPrivate));
}
@@ -481,10 +489,10 @@ miner_initable_init (GInitable *initable,
miner->priv->registration_id =
g_dbus_connection_register_object (miner->priv->d_connection,
miner->priv->full_path,
- miner->priv->introspection_data->interfaces[0],
- &interface_vtable,
- miner,
- NULL,
+ miner->priv->introspection_data->interfaces[0],
+ &interface_vtable,
+ miner,
+ NULL,
&inner_error);
if (inner_error) {
g_propagate_error (error, inner_error);
@@ -709,6 +717,11 @@ miner_set_property (GObject *object,
miner->priv->introspection_xml = g_value_dup_string (value);
break;
}
+ case PROP_INTROSPECTION_HANDLER: {
+ /* Only set on constructor */
+ miner->priv->introspection_handler = g_value_get_pointer (value);
+ break;
+ }
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -739,6 +752,9 @@ miner_get_property (GObject *object,
case PROP_INTROSPECTION_XML:
g_value_set_string (value, miner->priv->introspection_xml);
break;
+ case PROP_INTROSPECTION_HANDLER:
+ g_value_set_pointer (value, miner->priv->introspection_handler);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1468,7 +1484,23 @@ handle_method_call (GDBusConnection *connection,
handle_method_call_get_progress (miner, invocation, parameters);
} else if (g_strcmp0 (method_name, "GetStatus") == 0) {
handle_method_call_get_status (miner, invocation, parameters);
+ } else if (miner->priv->introspection_handler != NULL) {
+ /* Call introspection-handler functions next */
+ GDBusInterfaceMethodCallFunc func = miner->priv->introspection_handler->method_call;
+
+ if (func != NULL) {
+ (func) (connection,
+ sender,
+ object_path,
+ interface_name,
+ method_name,
+ parameters,
+ invocation,
+ user_data);
+ return;
+ }
} else {
+ /* No one to handle this function? */
g_assert_not_reached ();
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]