[tracker/rss-enclosures] tracker-store: Shutdown the events and reinit them during restore



commit 52020ff1dd1064de137dd30e64c3e6f2cda5d5ee
Author: Philip Van Hoof <philip codeminded be>
Date:   Thu Nov 4 15:46:18 2010 +0200

    tracker-store: Shutdown the events and reinit them during restore

 src/tracker-store/tracker-backup.c |    5 +++++
 src/tracker-store/tracker-events.c |    9 +++++++++
 src/tracker-store/tracker-events.h |    2 ++
 3 files changed, 16 insertions(+), 0 deletions(-)
---
diff --git a/src/tracker-store/tracker-backup.c b/src/tracker-store/tracker-backup.c
index 6ce51e4..aeb21eb 100644
--- a/src/tracker-store/tracker-backup.c
+++ b/src/tracker-store/tracker-backup.c
@@ -31,12 +31,14 @@
 #include "tracker-backup.h"
 #include "tracker-store.h"
 #include "tracker-resources.h"
+#include "tracker-events.h"
 
 typedef struct {
 	DBusGMethodInvocation *context;
 	guint request_id;
 	gchar *journal_uri;
 	TrackerResources *resources;
+	TrackerNotifyClassGetter getter;
 } TrackerDBusMethodInfo;
 
 G_DEFINE_TYPE (TrackerBackup, tracker_backup, G_TYPE_OBJECT)
@@ -99,6 +101,7 @@ restore_callback (GError *error, gpointer user_data)
 
 	tracker_store_set_active (TRUE, NULL, NULL);
 	if (info->resources) {
+		tracker_events_init (info->getter);
 		tracker_resources_enable_signals (info->resources);
 		g_object_unref (info->resources);
 	}
@@ -191,6 +194,8 @@ tracker_backup_restore (TrackerBackup          *object,
 	if (resources) {
 		info->resources = g_object_ref (resources);
 		tracker_resources_disable_signals (info->resources);
+		info->getter = tracker_events_get_class_getter ();
+		tracker_events_shutdown ();
 	}
 
 	tracker_store_set_active (FALSE, backup_idle_set_active_false_cb, info);
diff --git a/src/tracker-store/tracker-events.c b/src/tracker-store/tracker-events.c
index 001edb3..eafeff6 100644
--- a/src/tracker-store/tracker-events.c
+++ b/src/tracker-store/tracker-events.c
@@ -31,6 +31,7 @@ typedef struct {
 	GHashTable *allowances;
 	gboolean frozen;
 	guint total;
+	TrackerNotifyClassGetter getter;
 } EventsPrivate;
 
 static EventsPrivate *private;
@@ -176,6 +177,13 @@ free_private (EventsPrivate *private)
 	g_free (private);
 }
 
+TrackerNotifyClassGetter
+tracker_events_get_class_getter (void)
+{
+	g_return_val_if_fail (private != NULL, NULL);
+	return private->getter;
+}
+
 void
 tracker_events_init (TrackerNotifyClassGetter callback)
 {
@@ -190,6 +198,7 @@ tracker_events_init (TrackerNotifyClassGetter callback)
 
 	private->allowances = g_hash_table_new (g_direct_hash, g_direct_equal);
 	private->allowances_id = g_hash_table_new (g_direct_hash, g_direct_equal);
+	private->getter = callback;
 
 	classes_to_signal = (*callback)();
 
diff --git a/src/tracker-store/tracker-events.h b/src/tracker-store/tracker-events.h
index 74cbd39..cfb4fa7 100644
--- a/src/tracker-store/tracker-events.h
+++ b/src/tracker-store/tracker-events.h
@@ -31,6 +31,8 @@ G_BEGIN_DECLS
 typedef GStrv (*TrackerNotifyClassGetter)   (void);
 
 void       tracker_events_init              (TrackerNotifyClassGetter  callback);
+TrackerNotifyClassGetter
+           tracker_events_get_class_getter  (void);
 void       tracker_events_shutdown          (void);
 void       tracker_events_add_insert        (gint                      graph_id,
                                              gint                      subject_id,



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