[tracker/urho-sync] Made DBus's Restore() synchronous
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/urho-sync] Made DBus's Restore() synchronous
- Date: Mon, 24 Aug 2009 12:51:25 +0000 (UTC)
commit b7866eded285c138673c767e2979342c89fa1b37
Author: Philip Van Hoof <philip codeminded be>
Date: Mon Aug 24 14:50:38 2009 +0200
Made DBus's Restore() synchronous
src/libtracker-data/tracker-data-backup.c | 83 ++++++++++++++---------------
1 files changed, 40 insertions(+), 43 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-backup.c b/src/libtracker-data/tracker-data-backup.c
index 4f2e79e..4b2c6f9 100644
--- a/src/libtracker-data/tracker-data-backup.c
+++ b/src/libtracker-data/tracker-data-backup.c
@@ -34,6 +34,7 @@ typedef struct {
TrackerDataBackupFinished callback;
gpointer user_data;
GDestroyNotify destroy;
+ GError *error;
} BackupSaveInfo;
static void
@@ -53,6 +54,8 @@ free_backup_save_info (BackupSaveInfo *info)
info->destroy (info->user_data);
}
+ g_clear_error (&info->error);
+
g_free (info);
}
@@ -169,66 +172,55 @@ tracker_data_backup_save (GFile *destination,
}
}
-
-static void
-on_restore_done (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- tracker_db_journal_open ();
- tracker_db_manager_reconnect ();
-
- on_meta_copied (source_object, res, user_data);
-}
-
-static void
-on_journald_copied (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
+static gboolean
+on_restore_done (gpointer user_data)
{
BackupSaveInfo *info = user_data;
- GError *error = NULL;
- if (!g_file_copy_finish (info->journal, res, &error)) {
- if (info->callback) {
- info->callback (error, info->user_data);
- }
- free_backup_save_info (info);
- } else {
- g_file_copy_async (info->destination, info->file,
- G_FILE_COPY_OVERWRITE,
- G_PRIORITY_HIGH,
- NULL, NULL, NULL,
- on_restore_done,
- info);
+ if (info->callback) {
+ info->callback (info->error, info->user_data);
}
- g_clear_error (&error);
+ free_backup_save_info (info);
+
+ return FALSE;
}
static void
restore_copy_procedure (BackupSaveInfo *info)
{
GFile *journal_d;
+ GError *error = NULL;
+
+ /* Restore should block the mainloop until finished */
+
journal_d = g_file_new_for_path (tracker_db_journal_filename ());
if (g_file_query_exists (journal_d, NULL)) {
- g_file_copy_async (info->journal, journal_d,
- G_FILE_COPY_OVERWRITE,
- G_PRIORITY_HIGH,
- NULL, NULL, NULL,
- on_journald_copied,
- info);
- } else {
- g_file_copy_async (info->destination, info->file,
- G_FILE_COPY_OVERWRITE,
- G_PRIORITY_HIGH,
- NULL, NULL, NULL,
- on_restore_done,
- info);
+ g_file_copy (info->journal, journal_d,
+ G_FILE_COPY_OVERWRITE,
+ NULL, NULL, NULL,
+ &error);
}
g_object_unref (journal_d);
+
+ if (error) {
+ goto error_handle;
+ }
+
+ g_file_copy (info->destination, info->file,
+ G_FILE_COPY_OVERWRITE,
+ NULL, NULL, NULL,
+ &error);
+
+ if (error) {
+ goto error_handle;
+ }
+
+error_handle:
+
+ info->error = error;
}
void
@@ -253,4 +245,9 @@ tracker_data_backup_restore (GFile *backup,
info->file = tracker_db_backup_file (NULL, TRACKER_DB_BACKUP_META_FILENAME);
restore_copy_procedure (info);
+
+ tracker_db_journal_open ();
+ tracker_db_manager_reconnect ();
+
+ g_idle_add (on_restore_done, info);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]