[tracker] Cleanup of the old backup code, saving isn't yet ported with this, restoring is



commit cf0340d8e3f408c72d2235ecdefc63934e38993b
Author: Philip Van Hoof <philip codeminded be>
Date:   Wed Jul 1 12:43:22 2009 +0200

    Cleanup of the old backup code, saving isn't yet ported with this, restoring is

 data/dbus/tracker-backup.xml              |    4 +-
 src/libtracker-data/tracker-data-backup.c |  110 ++------------------------
 src/libtracker-data/tracker-data-backup.h |    9 +--
 src/tracker-store/tracker-backup.c        |  122 ++++++++++++++++++----------
 4 files changed, 90 insertions(+), 155 deletions(-)
---
diff --git a/data/dbus/tracker-backup.xml b/data/dbus/tracker-backup.xml
index a3f05d6..8e1274b 100644
--- a/data/dbus/tracker-backup.xml
+++ b/data/dbus/tracker-backup.xml
@@ -4,11 +4,11 @@
   <interface name="org.freedesktop.Tracker.Backup">
     <method name="Save">
       <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
-      <arg type="s" name="turtle-file" direction="in" />
+      <arg type="s" name="turtle-file-uri" direction="in" />
     </method>
     <method name="Restore">
       <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
-      <arg type="s" name="turtle-file" direction="in" />
+      <arg type="s" name="turtle-file-uri" direction="in" />
     </method>
   </interface>
 </node>
diff --git a/src/libtracker-data/tracker-data-backup.c b/src/libtracker-data/tracker-data-backup.c
index 88189f9..20e703e 100644
--- a/src/libtracker-data/tracker-data-backup.c
+++ b/src/libtracker-data/tracker-data-backup.c
@@ -30,87 +30,13 @@
 
 #include "tracker-data-backup.h"
 
-typedef struct BackupRestoreData BackupRestoreData;
-
-struct BackupRestoreData {
-	TrackerDataBackupRestoreFunc func;
-	gpointer user_data;
-};
-
-/*
- * (uri, metadataid, value)
- */
-static void
-extended_result_set_to_turtle (TrackerDBResultSet  *result_set,
-			       TurtleFile          *turtle_file)
-{
-	TrackerProperty *field = NULL;
-	gboolean valid = TRUE;
-
-	while (valid) {
-		gchar *uri, *service_type, *str;
-		gint metadata_id;
-
-		tracker_db_result_set_get (result_set,
-					   0, &uri,
-					   1, &service_type,
-					   2, &metadata_id,
-					   3, &str,
-					   -1);
-
-		/* TODO */
-#if 0
-		field = tracker_ontology_get_property_by_id (metadata_id);
-#endif
-
-		if (!field) {
-			g_critical ("Field id %d in database but not in tracker-ontology",
-				    metadata_id);
-			g_free (str);
-			g_free (service_type);
-			g_free (uri);
-			return;
-		}
-
-		g_debug ("Inserting in turtle <%s, %s, %s>",
-			 uri, tracker_property_get_name (field), str);
-		tracker_turtle_add_triple (turtle_file, uri, field, str);
-
-		g_free (str);
-		g_free (service_type);
-		g_free (uri);
-
-		valid = tracker_db_result_set_iter_next (result_set);
-	}
-}
-
-static void
-restore_backup_triple (gpointer                user_data,
-		       const raptor_statement *triple)
-{
-	BackupRestoreData *data;
-
-	data = (BackupRestoreData *) user_data;
-
-	g_debug ("Turtle loading <%s, %s, %s>",
-		 (gchar *)triple->subject,
-		 (gchar *)triple->predicate,
-		 (gchar *)triple->object);
-
-	(data->func) ((const gchar *) triple->subject,
-		      (const gchar *) triple->predicate,
-		      (const gchar *) triple->object,
-		      data->user_data);
-}
-
 gboolean
-tracker_data_backup_save (const gchar  *turtle_filename,
-			  GError      **error)
+tracker_data_backup_save (GFile   *turtle_file,
+			  GError **error)
 {
-	TrackerDBResultSet *data;
 #if 0
+	TrackerDBResultSet *data;
 	TrackerClass *service;
-#endif
 	TurtleFile *turtle_file;
 
 	/* TODO: temporary location */
@@ -123,10 +49,9 @@ tracker_data_backup_save (const gchar  *turtle_filename,
 	g_message ("Saving metadata backup in turtle file");
 
 	/* TODO */
-#if 0
+
 	service = tracker_ontology_get_service_by_name ("Files");
 	data = tracker_data_query_backup_metadata (service);
-#endif
 
 	if (data) {
 		extended_result_set_to_turtle (data, turtle_file);
@@ -135,31 +60,10 @@ tracker_data_backup_save (const gchar  *turtle_filename,
 
 	tracker_turtle_close (turtle_file);
 
-	return TRUE;
-}
-
-gboolean
-tracker_data_backup_restore (const gchar                   *turtle_filename,
-			     TrackerDataBackupRestoreFunc   restore_func,
-			     gpointer                       user_data,
-			     GError                       **error)
-{
-	BackupRestoreData data;
-
-	data.func = restore_func;
-	data.user_data = user_data;
-
-	g_message ("Restoring metadata backup from turtle file");
+#endif
 
-	if (!g_file_test (turtle_filename, G_FILE_TEST_EXISTS)) {
-		g_set_error (error, 0, 0,
-			     "Turtle file does not exist");
-		return FALSE;
-	}
+	g_warning ("tracker_data_backup_save is unimplemented");
 
-	tracker_turtle_process (turtle_filename,
-				"/",
-				(TurtleTripleCallback) restore_backup_triple,
-				&data);
 	return TRUE;
 }
+
diff --git a/src/libtracker-data/tracker-data-backup.h b/src/libtracker-data/tracker-data-backup.h
index a05f6a5..5a111e0 100644
--- a/src/libtracker-data/tracker-data-backup.h
+++ b/src/libtracker-data/tracker-data-backup.h
@@ -22,6 +22,7 @@
 #define __TRACKER_DATA_BACKUP_H__
 
 #include <glib.h>
+#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
@@ -30,12 +31,8 @@ typedef void (* TrackerDataBackupRestoreFunc) (const gchar *subject,
 					       const gchar *object,
 					       gpointer     user_data);
 
-gboolean tracker_data_backup_save    (const gchar                   *turtle_filename,
-				      GError                       **error);
-gboolean tracker_data_backup_restore (const gchar                   *turtle_filename,
-				      TrackerDataBackupRestoreFunc   restore_func,
-				      gpointer                       user_data,
-				      GError                       **error);
+gboolean        tracker_data_backup_save      (GFile     *turtle_file,
+					       GError   **error);
 
 G_END_DECLS
 
diff --git a/src/tracker-store/tracker-backup.c b/src/tracker-store/tracker-backup.c
index 852f2aa..6dd2529 100644
--- a/src/tracker-store/tracker-backup.c
+++ b/src/tracker-store/tracker-backup.c
@@ -30,6 +30,12 @@
 
 #include "tracker-dbus.h"
 #include "tracker-backup.h"
+#include "tracker-store.h"
+
+typedef struct {
+	DBusGMethodInvocation *context;
+	guint request_id;
+} TrackerDBusMethodInfo;
 
 G_DEFINE_TYPE (TrackerBackup, tracker_backup, G_TYPE_OBJECT)
 
@@ -51,31 +57,42 @@ tracker_backup_new (void)
 
 void
 tracker_backup_save (TrackerBackup          *object,
-		     const gchar            *path,
-		     DBusGMethodInvocation  *context,
-		     GError                **error)
+                     const gchar            *uri,
+                     DBusGMethodInvocation  *context,
+                     GError                **error)
 {
 	guint request_id;
 	GError *err = NULL;
+	GFile *file;
 
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
 				  "DBus request to save backup into '%s'",
-				  path);
+				  uri);
+
+	g_message ("Backing up metadata (unfinished, unsupported)");
+
+	/* Previous DBus API accepted paths. For this reason I decided to try
+	 * to support both paths and uris. Perhaps we should just remove the
+	 * support for paths here? */
+
+	if (!strchr (uri, ':')) {
+		file = g_file_new_for_path (uri);
+	} else {
+		file = g_file_new_for_uri (uri);
+	}
+
+	tracker_data_backup_save (file, &err);
 
-	g_message ("Backing up metadata");
-	/* TODO: Port to SPARQL */
-#if 0
-	tracker_data_backup_save (path, &err);
-#endif
+	g_object_unref (file);
 
 	if (err) {
 		GError *actual_error = NULL;
 
 		tracker_dbus_request_failed (request_id,
-					     &actual_error,
-					     err->message);
+		                             &actual_error,
+		                             err->message);
 
 		dbus_g_method_return_error (context, actual_error);
 
@@ -88,62 +105,79 @@ tracker_backup_save (TrackerBackup          *object,
 }
 
 static void
-restore_backup_cb (const gchar *subject,
-		   const gchar *predicate,
-		   const gchar *object,
-		   gpointer     user_data)
+destroy_method_info (gpointer user_data)
 {
-	tracker_data_insert_statement (subject, predicate, object);
+	g_slice_free (TrackerDBusMethodInfo, user_data);
+}
+
+static void
+backup_callback (GError *error, gpointer user_data)
+{
+	TrackerDBusMethodInfo *info = user_data;
+
+	if (error) {
+		tracker_dbus_request_failed (info->request_id,
+		                             &error,
+		                             NULL);
+		dbus_g_method_return_error (info->context, error);
+		return;
+	}
 
-	g_main_context_iteration (NULL, FALSE);
+	dbus_g_method_return (info->context);
+
+	tracker_dbus_request_success (info->request_id);
 }
 
 void
 tracker_backup_restore (TrackerBackup          *object,
-			const gchar            *path,
-			DBusGMethodInvocation  *context,
-			GError                **error)
+                        const gchar            *uri,
+                        DBusGMethodInvocation  *context,
+                        GError                **error)
 {
 	guint request_id;
 	GError *actual_error = NULL;
-	GError *restore_error = NULL;
+	TrackerDBusMethodInfo *info;
+	GFile *file;
 
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
-				  "DBus request to restore backup from '%s'",
-				  path);
+	                          "DBus request to restore backup from '%s'",
+	                          uri);
+
+	/* First check we have disk space */
 
-	/* First check we have disk space, we do this with ALL our
-	 * indexer commands.
-	 */
 	if (tracker_status_get_is_paused_for_space ()) {
 		tracker_dbus_request_failed (request_id,
-					     &actual_error,
-					     "No disk space left to write to the databases");
+		                             &actual_error,
+		                             "No disk space left to write to"
+		                             " the databases");
 		dbus_g_method_return_error (context, actual_error);
 		g_error_free (actual_error);
 		return;
 	}
 
-	tracker_data_backup_restore (path,
-				     restore_backup_cb,
-				     NULL,
-				     &restore_error);
-
-	if (restore_error) {
-		GError *actual_error = NULL;
-
-		tracker_dbus_request_failed (request_id,
-					     &actual_error,
-					     restore_error->message);
+	tracker_dbus_request_new (request_id,
+	                          "DBus request to restore backup '%s'",
+	                          uri);
 
-		dbus_g_method_return_error (context, actual_error);
+	/* Previous DBus API accepted paths. For this reason I decided to try
+	 * to support both paths and uris. Perhaps we should just remove the
+	 * support for paths here? */
 
-		g_error_free (actual_error);
-		g_error_free (restore_error);
+	if (!strchr (uri, ':')) {
+		file = g_file_new_for_path (uri);
 	} else {
-		dbus_g_method_return (context);
-		tracker_dbus_request_success (request_id);
+		file = g_file_new_for_uri (uri);
 	}
+
+	info = g_slice_new (TrackerDBusMethodInfo);
+
+	info->request_id = request_id;
+	info->context = context;
+
+	tracker_store_queue_turtle_import (file, backup_callback,
+	                                   info, destroy_method_info);
+
+	g_object_unref (file);
 }



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