[tracker] Cleanup of the old backup code, saving isn't yet ported with this, restoring is
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker] Cleanup of the old backup code, saving isn't yet ported with this, restoring is
- Date: Wed, 1 Jul 2009 10:44:10 +0000 (UTC)
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]