[tracker/urho-sync] Made DBus's Restore() synchronous



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]