[tracker/miner-writeback: 2/2] libtracker-miner: Add writeback signal to TrackerMiner
- From: Adrien Bustany <abustany src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/miner-writeback: 2/2] libtracker-miner: Add writeback signal to TrackerMiner
- Date: Fri, 26 Mar 2010 12:36:22 +0000 (UTC)
commit 9e19774a0e15150a20ce87f47a449eed451f3597
Author: Adrien Bustany <abustany gnome org>
Date: Thu Mar 25 13:37:40 2010 -0300
libtracker-miner: Add writeback signal to TrackerMiner
This commits add a new signal "writeback" to the TrackerMiner class. This
signal is emitted when the store emits the Writeback signal, and only if the
"writeback-enabled" property was set on the miner at construction time.
src/libtracker-miner/tracker-miner-0.7.vapi | 1 +
src/libtracker-miner/tracker-miner-object.c | 58 ++++++++++++++++++++++++++-
src/libtracker-miner/tracker-miner-object.h | 5 ++
3 files changed, 63 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-0.7.vapi b/src/libtracker-miner/tracker-miner-0.7.vapi
index d198810..a48862a 100644
--- a/src/libtracker-miner/tracker-miner-0.7.vapi
+++ b/src/libtracker-miner/tracker-miner-0.7.vapi
@@ -36,6 +36,7 @@ namespace Tracker {
public virtual void started ();
public void stop ();
public virtual void stopped ();
+ public virtual void writeback (GLib.HashTable properties);
public signal void error (GLib.Error e);
}
[CCode (ref_function = "tracker_miner_fs_ref", unref_function = "tracker_miner_fs_unref", cheader_filename = "libtracker-miner/tracker-miner-fs.h")]
diff --git a/src/libtracker-miner/tracker-miner-object.c b/src/libtracker-miner/tracker-miner-object.c
index 008c1bd..24e685d 100644
--- a/src/libtracker-miner/tracker-miner-object.c
+++ b/src/libtracker-miner/tracker-miner-object.c
@@ -54,6 +54,7 @@ struct TrackerMinerPrivate {
gchar *name;
gchar *status;
gdouble progress;
+ gboolean writeback_enabled;
gint availability_cookie;
@@ -81,7 +82,8 @@ enum {
PROP_0,
PROP_NAME,
PROP_STATUS,
- PROP_PROGRESS
+ PROP_PROGRESS,
+ PROP_WRITEBACK_ENABLED
};
enum {
@@ -92,6 +94,7 @@ enum {
PROGRESS,
ERROR,
IGNORE_NEXT_UPDATE,
+ WRITEBACK,
LAST_SIGNAL
};
@@ -121,6 +124,8 @@ static void sparql_cancelled_cb (GCancellable *cancellable,
static void store_name_monitor_cb (TrackerMiner *miner,
const gchar *name,
gboolean available);
+static void store_writeback_cb (const GHashTable *properties,
+ gpointer user_data);
G_DEFINE_ABSTRACT_TYPE (TrackerMiner, tracker_miner, G_TYPE_OBJECT)
@@ -258,6 +263,29 @@ tracker_miner_class_init (TrackerMinerClass *klass)
G_TYPE_NONE, 1,
G_TYPE_STRV);
+ /**
+ * TrackerMiner::writeback:
+ * @miner: the #TrackerMiner
+ * @properties: a hash table where the keys are the uris of the resource,
+ * and the values the name of the properties to writeback.
+ *
+ * the ::writeback signal is emitted when a RDF property annotated with
+ * tracker:writeback is modified. The miner can use that signal to sync
+ * back the changes from the RDF store to the file.
+ *
+ * This signal is only emitted if the "writeback-enabled" property is set
+ * to true
+ */
+ signals[WRITEBACK] =
+ g_signal_new ("writeback",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (TrackerMinerClass, writeback),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE, 1,
+ G_TYPE_PTR_ARRAY);
+
g_object_class_install_property (object_class,
PROP_NAME,
g_param_spec_string ("name",
@@ -281,6 +309,13 @@ tracker_miner_class_init (TrackerMinerClass *klass)
1.0,
0.0,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_WRITEBACK_ENABLED,
+ g_param_spec_boolean ("writeback-enabled",
+ "Writeback enabled",
+ "Writeback enabled",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_type_class_add_private (object_class, sizeof (TrackerMinerPrivate));
@@ -355,6 +390,9 @@ miner_set_property (GObject *object,
miner_update_progress (miner);
break;
}
+ case PROP_WRITEBACK_ENABLED:
+ miner->private->writeback_enabled = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -379,6 +417,9 @@ miner_get_property (GObject *object,
case PROP_PROGRESS:
g_value_set_double (value, miner->private->progress);
break;
+ case PROP_WRITEBACK_ENABLED:
+ g_value_set_boolean (value, miner->private->writeback_enabled);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -431,6 +472,10 @@ miner_constructed (GObject *object)
tracker_miner_dbus_init (miner, &dbus_glib_tracker_miner_object_info);
tracker_miner_dbus_add_name_watch (miner, "org.freedesktop.Tracker1",
store_name_monitor_cb);
+
+ if (miner->private->writeback_enabled) {
+ tracker_resources_writeback_connect (miner->private->client, store_writeback_cb, miner);
+ }
}
static void
@@ -469,6 +514,17 @@ store_name_monitor_cb (TrackerMiner *miner,
}
}
+static void
+store_writeback_cb (const GHashTable *properties,
+ gpointer user_data)
+{
+ g_return_if_fail (properties != NULL);
+ g_return_if_fail (TRACKER_IS_MINER (user_data));
+
+ g_signal_emit (user_data, signals[WRITEBACK], 0,
+ properties);
+}
+
static PauseData *
pause_data_new (const gchar *application,
const gchar *reason)
diff --git a/src/libtracker-miner/tracker-miner-object.h b/src/libtracker-miner/tracker-miner-object.h
index 3792742..b9200a8 100644
--- a/src/libtracker-miner/tracker-miner-object.h
+++ b/src/libtracker-miner/tracker-miner-object.h
@@ -63,6 +63,8 @@ struct TrackerMiner {
* @progress: progress.
* @error: error.
* @ignore_next_update: Called after ignore on next update event happens.
+ * @writeback: Called when the store issues a Writeback signal, and if the
+ * "writeback-enabled" property is set to true.
*
* Virtual methods left to implement.
**/
@@ -85,6 +87,9 @@ typedef struct {
void (* ignore_next_update) (TrackerMiner *miner,
const GStrv urls);
+
+ void (* writeback) (TrackerMiner *miner,
+ const GHashTable *properties);
} TrackerMinerClass;
GType tracker_miner_get_type (void) G_GNUC_CONST;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]