[epiphany/wip/sync] sync: Make sure sync starts after all the managers are registered



commit cfbcccba1d11d1dddcf206c0c47316b297377fc0
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date:   Wed Jul 5 15:33:22 2017 +0300

    sync: Make sure sync starts after all the managers are registered

 lib/sync/ephy-sync-service.c |   11 ++++++-
 src/ephy-shell.c             |   58 +++++++++++++++++++++++++++--------------
 2 files changed, 47 insertions(+), 22 deletions(-)
---
diff --git a/lib/sync/ephy-sync-service.c b/lib/sync/ephy-sync-service.c
index 9683421..39bbf0c 100644
--- a/lib/sync/ephy-sync-service.c
+++ b/lib/sync/ephy-sync-service.c
@@ -86,6 +86,7 @@ static GParamSpec *obj_properties[LAST_PROP];
 
 enum {
   STORE_FINISHED,
+  LOAD_FINISHED,
   SIGN_IN_ERROR,
   SYNC_FINISHED,
   LAST_SIGNAL
@@ -1469,8 +1470,7 @@ load_secrets_cb (SecretService   *service,
     ephy_sync_service_set_secret (self, l->data,
                                   json_object_get_string_member (object, l->data));
 
-  if (self->sync_periodically)
-    ephy_sync_service_start_sync (self);
+  g_signal_emit (self, signals[LOAD_FINISHED], 0);
   goto out_no_error;
 
 out_error:
@@ -1653,6 +1653,13 @@ ephy_sync_service_class_init (EphySyncServiceClass *klass)
                   G_TYPE_NONE, 1,
                   G_TYPE_ERROR);
 
+  signals[LOAD_FINISHED] =
+    g_signal_new ("sync-secrets-load-finished",
+                  EPHY_TYPE_SYNC_SERVICE,
+                  G_SIGNAL_RUN_LAST,
+                  0, NULL, NULL, NULL,
+                  G_TYPE_NONE, 0);
+
   signals[SIGN_IN_ERROR] =
     g_signal_new ("sync-sign-in-error",
                   EPHY_TYPE_SYNC_SERVICE,
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index e6e26eb..979683f 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -312,12 +312,44 @@ download_started_cb (WebKitWebContext *web_context,
 }
 
 static void
+sync_secrets_load_finished_cb (EphySyncService *service,
+                               EphyShell       *shell)
+{
+  EphySynchronizableManager *manager;
+
+  g_assert (EPHY_IS_SYNC_SERVICE (service));
+  g_assert (EPHY_IS_SHELL (shell));
+
+  if (ephy_sync_utils_bookmarks_sync_is_enabled ()) {
+    manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_bookmarks_manager (shell));
+    ephy_sync_service_register_manager (service, manager);
+  }
+
+  if (ephy_sync_utils_passwords_sync_is_enabled ()) {
+    manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_password_manager (shell));
+    ephy_sync_service_register_manager (service, manager);
+  }
+
+  if (ephy_sync_utils_history_sync_is_enabled ()) {
+    manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_history_manager (shell));
+    ephy_sync_service_register_manager (service, manager);
+  }
+
+  if (ephy_sync_utils_open_tabs_sync_is_enabled ()) {
+    manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_open_tabs_manager (shell));
+    ephy_sync_service_register_manager (service, manager);
+  }
+
+  ephy_sync_service_start_sync (service);
+}
+
+static void
 ephy_shell_startup (GApplication *application)
 {
   EphyEmbedShell *embed_shell = EPHY_EMBED_SHELL (application);
   EphyShell *shell = EPHY_SHELL (application);
-  EphySynchronizableManager *manager;
   EphyEmbedShellMode mode;
+  EphySyncService *service;
   GtkBuilder *builder;
 
   G_APPLICATION_CLASS (ephy_shell_parent_class)->startup (application);
@@ -350,25 +382,11 @@ ephy_shell_startup (GApplication *application)
                               "enabled",
                               G_BINDING_SYNC_CREATE);
 
-      /* Register the synchronizable managers. */
-      if (ephy_sync_utils_bookmarks_sync_is_enabled ()) {
-        manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_bookmarks_manager (shell));
-        ephy_sync_service_register_manager (ephy_shell_get_sync_service (shell), manager);
-      }
-
-      if (ephy_sync_utils_passwords_sync_is_enabled ()) {
-        manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_password_manager (shell));
-        ephy_sync_service_register_manager (ephy_shell_get_sync_service (shell), manager);
-      }
-
-      if (ephy_sync_utils_history_sync_is_enabled ()) {
-        manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_history_manager (shell));
-        ephy_sync_service_register_manager (ephy_shell_get_sync_service (shell), manager);
-      }
-
-      if (ephy_sync_utils_open_tabs_sync_is_enabled ()) {
-        manager = EPHY_SYNCHRONIZABLE_MANAGER (ephy_shell_get_open_tabs_manager (shell));
-        ephy_sync_service_register_manager (ephy_shell_get_sync_service (shell), manager);
+      if (ephy_sync_utils_user_is_signed_in ()) {
+        service = ephy_shell_get_sync_service (shell);
+        g_signal_connect_object (service, "sync-secrets-load-finished",
+                                 G_CALLBACK (sync_secrets_load_finished_cb),
+                                 shell, 0);
       }
     }
 


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