[tracker] libtracker-data: Add rollback callback



commit 2f0f330ba7f1f8b458794dfa0d2262d6eae8df92
Author: Jürg Billeter <j bitron ch>
Date:   Mon Oct 26 15:45:56 2009 +0100

    libtracker-data: Add rollback callback
    
    This prevents sending events for updates that are rolled back.

 src/libtracker-data/tracker-data-update.c |   14 ++++++++++++++
 src/libtracker-data/tracker-data-update.h |    2 ++
 src/tracker-store/tracker-resources.c     |    8 ++++++++
 3 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 3574a8e..b321a1e 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -104,6 +104,8 @@ static TrackerStatementCallback delete_callback = NULL;
 static gpointer delete_data;
 static TrackerCommitCallback commit_callback = NULL;
 static gpointer commit_data;
+static TrackerCommitCallback rollback_callback = NULL;
+static gpointer rollback_data;
 
 void 
 tracker_data_set_commit_statement_callback (TrackerCommitCallback    callback,
@@ -114,6 +116,14 @@ tracker_data_set_commit_statement_callback (TrackerCommitCallback    callback,
 }
 
 void
+tracker_data_set_rollback_statement_callback (TrackerCommitCallback    callback,
+					      gpointer                 user_data)
+{
+	rollback_callback = callback;
+	rollback_data = user_data;
+}
+
+void
 tracker_data_set_insert_statement_callback (TrackerStatementCallback callback,
 					    gpointer                 user_data)
 {
@@ -1801,6 +1811,10 @@ tracker_data_update_sparql (const gchar  *update,
 	if (*error) {
 		tracker_data_update_buffer_clear ();
 		tracker_db_interface_execute_query (iface, NULL, "ROLLBACK TO sparql");
+
+		if (rollback_callback) {
+			rollback_callback (commit_data);
+		}
 	}
 
 	tracker_db_interface_execute_query (iface, NULL, "RELEASE sparql");
diff --git a/src/libtracker-data/tracker-data-update.h b/src/libtracker-data/tracker-data-update.h
index 3b30807..adfd7e6 100644
--- a/src/libtracker-data/tracker-data-update.h
+++ b/src/libtracker-data/tracker-data-update.h
@@ -90,6 +90,8 @@ void     tracker_data_set_delete_statement_callback (TrackerStatementCallback
 						     gpointer                   user_data);
 void     tracker_data_set_commit_statement_callback (TrackerCommitCallback      callback,
 						     gpointer                   user_data);
+void     tracker_data_set_rollback_statement_callback (TrackerCommitCallback      callback,
+						       gpointer                   user_data);
 
 G_END_DECLS
 
diff --git a/src/tracker-store/tracker-resources.c b/src/tracker-store/tracker-resources.c
index bf50ea6..46aabde 100644
--- a/src/tracker-store/tracker-resources.c
+++ b/src/tracker-store/tracker-resources.c
@@ -392,6 +392,13 @@ on_statements_committed (gpointer user_data)
 	tracker_events_reset ();
 }
 
+
+static void
+on_statements_rolled_back (gpointer user_data)
+{
+	tracker_events_reset ();
+}
+
 static void
 on_statement_inserted (const gchar *subject,
 		       const gchar *predicate,
@@ -434,6 +441,7 @@ tracker_resources_prepare (TrackerResources *object,
 	tracker_data_set_insert_statement_callback (on_statement_inserted, object);
 	tracker_data_set_delete_statement_callback (on_statement_deleted, object);
 	tracker_data_set_commit_statement_callback (on_statements_committed, object);
+	tracker_data_set_rollback_statement_callback (on_statements_rolled_back, object);
 
 	priv->event_sources = event_sources;
 }



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