[epiphany/wip/ephy-sync: 89/126] ephy-sync: Add sync-bookmarks and sync-utils modules
- From: Gabriel - Cristian Ivascu <gabrielivascu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/wip/ephy-sync: 89/126] ephy-sync: Add sync-bookmarks and sync-utils modules
- Date: Fri, 19 Aug 2016 17:39:02 +0000 (UTC)
commit 9e80f74ca5298d54a29fac994f82a3c8dbd23190
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date: Fri Jul 29 16:51:34 2016 +0300
ephy-sync: Add sync-bookmarks and sync-utils modules
src/Makefile.am | 4 +
src/ephy-sync-bookmarks.c | 83 +++++++++++++++++++
src/ephy-sync-bookmarks.h | 32 +++++++
src/ephy-sync-service.c | 199 ++++++++++++---------------------------------
src/ephy-sync-service.h | 52 +++++++-----
src/ephy-sync-utils.c | 56 +++++++++++++
src/ephy-sync-utils.h | 35 ++++++++
src/prefs-dialog.c | 3 +-
8 files changed, 293 insertions(+), 171 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 2f92f9f..a69db75 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -69,12 +69,16 @@ libephymain_la_SOURCES = \
ephy-session.h \
ephy-shell.c \
ephy-shell.h \
+ ephy-sync-bookmarks.c \
+ ephy-sync-bookmarks.h \
ephy-sync-crypto.c \
ephy-sync-crypto.h \
ephy-sync-secret.c \
ephy-sync-secret.h \
ephy-sync-service.c \
ephy-sync-service.h \
+ ephy-sync-utils.c \
+ ephy-sync-utils.h \
ephy-title-box.c \
ephy-title-box.h \
ephy-toolbar.c \
diff --git a/src/ephy-sync-bookmarks.c b/src/ephy-sync-bookmarks.c
new file mode 100644
index 0000000..876dcbf
--- /dev/null
+++ b/src/ephy-sync-bookmarks.c
@@ -0,0 +1,83 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2016 Gabriel Ivascu <ivascu gabriel59 gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include "ephy-sync-bookmarks.h"
+
+#include "ephy-sync-utils.h"
+
+#define EPHY_BOOKMARKS_DUMMY_BSO "000000000000"
+#define EPHY_BOOKMARKS_BSO_COLLECTION "ephy-bookmarks"
+
+static void
+create_bso_collection_response_cb (SoupSession *session,
+ SoupMessage *message,
+ gpointer user_data)
+{
+ EphySyncService *service;
+ gchar *endpoint;
+
+ service = EPHY_SYNC_SERVICE (user_data);
+
+ /* Status code 412 means the BSO already exists. Since we will delete it
+ * anyway, we don't treat this as an error.
+ */
+ if (message->status_code != 200 && message->status_code != 412) {
+ g_warning ("Failed to add dummy BSO to collection, status code: %u, response: %s",
+ message->status_code, message->response_body->data);
+ return;
+ }
+
+ /* The EPHY_BOOKMARKS_BSO_COLLECTION collection is now created. We can safely
+ * delete the dummy BSO that we've uploaded. No need to check for response.
+ */
+ endpoint = g_strdup_printf ("storage/%s/%s",
+ EPHY_BOOKMARKS_BSO_COLLECTION,
+ EPHY_BOOKMARKS_DUMMY_BSO);
+ ephy_sync_service_send_storage_message (service,
+ endpoint, SOUP_METHOD_DELETE,
+ NULL, -1, -1,
+ NULL, NULL);
+ g_free (endpoint);
+}
+
+void
+ephy_sync_bookmarks_create_bso_collection (EphySyncService *service)
+{
+ gchar *endpoint;
+ gchar *bso_json;
+
+ endpoint = g_strdup_printf ("storage/%s/%s",
+ EPHY_BOOKMARKS_BSO_COLLECTION,
+ EPHY_BOOKMARKS_DUMMY_BSO);
+ bso_json = ephy_sync_utils_create_bso_json (EPHY_BOOKMARKS_DUMMY_BSO,
+ EPHY_BOOKMARKS_DUMMY_BSO);
+
+ /* Send a dummy BSO to the Storage Server so it will create the
+ * EPHY_BOOKMARKS_BSO_COLLECTION collection if it doesn't exist already.
+ * In the response callback we will delete the dummy BSO.
+ */
+ ephy_sync_service_send_storage_message (service,
+ endpoint, SOUP_METHOD_PUT,
+ bso_json, -1, 0,
+ create_bso_collection_response_cb,
+ service);
+
+ g_free (endpoint);
+ g_free (bso_json);
+}
diff --git a/src/ephy-sync-bookmarks.h b/src/ephy-sync-bookmarks.h
new file mode 100644
index 0000000..266c026
--- /dev/null
+++ b/src/ephy-sync-bookmarks.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2016 Gabriel Ivascu <ivascu gabriel59 gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef EPHY_SYNC_BOOKMARKS_H
+#define EPHY_SYNC_BOOKMARKS_H
+
+#include "ephy-sync-service.h"
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+void ephy_sync_bookmarks_create_bso_collection (EphySyncService *service);
+
+G_END_DECLS
+
+#endif
diff --git a/src/ephy-sync-service.c b/src/ephy-sync-service.c
index 425ce28..0e9fbf6 100644
--- a/src/ephy-sync-service.c
+++ b/src/ephy-sync-service.c
@@ -23,21 +23,17 @@
#include "ephy-settings.h"
#include "ephy-sync-crypto.h"
#include "ephy-sync-secret.h"
+#include "ephy-sync-utils.h"
#include <json-glib/json-glib.h>
-#include <libsoup/soup.h>
#include <string.h>
-#define EPHY_BOOKMARKS_DUMMY_BSO "000000000000"
-#define EPHY_BOOKMARKS_BSO_COLLECTION "ephy-bookmarks"
-
#define MOZILLA_TOKEN_SERVER_URL "https://token.services.mozilla.com/1.0/sync/1.5"
#define MOZILLA_FIREFOX_ACCOUNTS_BASE_URL "https://api.accounts.firefox.com/"
#define MOZILLA_FIREFOX_ACCOUNTS_VERSION "v1/"
#define EMAIL_REGEX "^[a-z0-9]([a-z0-9.]+[a-z0-9])?@[a-z0-9.-]+$"
#define CURRENT_TIME_IN_SECONDS (g_get_real_time () / 1000000)
-#define HTTP_STATUS_OK 200
struct _EphySyncService {
GObject parent_instance;
@@ -78,11 +74,6 @@ typedef struct {
gpointer user_data;
} StorageServerRequestAsyncData;
-static gchar *
-build_json_string (const gchar *first_key,
- const gchar *first_value,
- ...) G_GNUC_NULL_TERMINATED;
-
static StorageServerRequestAsyncData *
storage_server_request_async_data_new (EphySyncService *service,
gchar *endpoint,
@@ -121,35 +112,6 @@ storage_server_request_async_data_free (StorageServerRequestAsyncData *data)
}
static gchar *
-build_json_string (const gchar *first_key,
- const gchar *first_value,
- ...)
-{
- va_list args;
- gchar *json;
- gchar *key;
- gchar *value;
- gchar *tmp;
-
- json = g_strconcat ("{\"", first_key, "\": \"", first_value, "\"", NULL);
- va_start (args, first_value);
-
- while ((key = va_arg (args, gchar *)) != NULL) {
- value = va_arg (args, gchar *);
- tmp = json;
- json = g_strconcat (json, ", \"", key, "\": \"", value, "\"", NULL);
- g_free (tmp);
- }
-
- va_end (args);
- tmp = json;
- json = g_strconcat (json, "}", NULL);
- g_free (tmp);
-
- return json;
-}
-
-static gchar *
get_audience_for_url (const gchar *url)
{
SoupURI *uri;
@@ -210,7 +172,7 @@ destroy_session_response_cb (SoupSession *session,
JsonParser *parser;
JsonObject *json;
- if (message->status_code == HTTP_STATUS_OK) {
+ if (message->status_code == 200) {
LOG ("Session destroyed");
return;
}
@@ -485,7 +447,7 @@ obtain_storage_credentials_response_cb (SoupSession *session,
* password since the last time he signed in. If this happens, the user needs
* to be asked to sign in again with the new password.
*/
- if (message->status_code == HTTP_STATUS_OK) {
+ if (message->status_code == 200) {
service->storage_endpoint = g_strdup (json_object_get_string_member (json, "api_endpoint"));
service->storage_credentials_id = g_strdup (json_object_get_string_member (json, "id"));
service->storage_credentials_key = g_strdup (json_object_get_string_member (json, "key"));
@@ -580,7 +542,7 @@ obtain_signed_certificate_response_cb (SoupSession *session,
json_parser_load_from_data (parser, message->response_body->data, -1, NULL);
json = json_node_get_object (json_parser_get_root (parser));
- if (message->status_code != HTTP_STATUS_OK) {
+ if (message->status_code != 200) {
g_warning ("FxA server errno: %ld, errmsg: %s",
json_object_get_int_member (json, "errno"),
json_object_get_string_member (json, "message"));
@@ -629,10 +591,10 @@ ephy_sync_service_obtain_signed_certificate (EphySyncService *self,
n_str = mpz_get_str (NULL, 10, self->keypair->public.n);
e_str = mpz_get_str (NULL, 10, self->keypair->public.e);
- public_key_json = build_json_string ("algorithm", "RS",
- "n", n_str,
- "e", e_str,
- NULL);
+ public_key_json = ephy_sync_utils_build_json_string ("algorithm", "RS",
+ "n", n_str,
+ "e", e_str,
+ NULL);
/* Duration is the lifetime of the certificate in milliseconds. The FxA server
* limits the duration to 24 hours. For our purposes, a duration of 30 minutes
* will suffice.
@@ -657,88 +619,6 @@ ephy_sync_service_obtain_signed_certificate (EphySyncService *self,
}
static void
-ephy_sync_service_send_storage_message (EphySyncService *self,
- gchar *endpoint,
- const gchar *method,
- gchar *request_body,
- gint64 modified_since,
- gint64 unmodified_since,
- SoupSessionCallback callback,
- gpointer user_data)
-{
- StorageServerRequestAsyncData *data;
-
- data = storage_server_request_async_data_new (self, endpoint,
- method, request_body,
- modified_since, unmodified_since,
- callback, user_data);
-
- if (ephy_sync_service_storage_credentials_is_expired (self) == FALSE) {
- ephy_sync_service_send_storage_request (self, data);
- return;
- }
-
- /* If we are currently obtaining the storage credentials for another message,
- * then the new message is enqueued and will be sent after the credentials are
- * retrieved.
- */
- if (self->is_obtaining_storage_credentials == TRUE) {
- g_queue_push_tail (self->storage_message_queue, data);
- return;
- }
-
- /* This message is the one that will obtain the storage credentials. */
- self->is_obtaining_storage_credentials = TRUE;
-
- /* Drop the old certificate and storage credentials. */
- g_clear_pointer (&self->certificate, g_free);
- g_clear_pointer (&self->storage_credentials_id, g_free);
- g_clear_pointer (&self->storage_credentials_key, g_free);
- self->storage_credentials_expiry_time = 0;
-
- /* The only purpose of certificates is to obtain a signed BrowserID that is
- * needed to talk to the Token Server. From the Token Server we will obtain
- * the credentials needed to talk to the Storage Server. Since both
- * ephy_sync_service_obtain_signed_certificate() and
- * ephy_sync_service_obtain_storage_credentials() complete asynchronously, we
- * need to entrust them the task of sending the request to the Storage Server.
- */
- ephy_sync_service_obtain_signed_certificate (self, data);
-}
-
-static void
-create_bookmarks_bso_collection_response_cb (SoupSession *session,
- SoupMessage *message,
- gpointer user_data)
-{
- EphySyncService *service;
- gchar *endpoint;
-
- service = EPHY_SYNC_SERVICE (user_data);
-
- /* Status code 412 means the BSO already exists. Since we will delete it
- * anyway, we don't treat this as an error.
- */
- if (message->status_code != HTTP_STATUS_OK && message->status_code != 412) {
- g_warning ("Failed to add dummy BSO to collection, status code: %u, response: %s",
- message->status_code, message->response_body->data);
- return;
- }
-
- /* The EPHY_BOOKMARKS_BSO_COLLECTION collection is now created. We can safely
- * delete the dummy BSO that we've uploaded. No need to check for response.
- */
- endpoint = g_strdup_printf ("storage/%s/%s",
- EPHY_BOOKMARKS_BSO_COLLECTION,
- EPHY_BOOKMARKS_DUMMY_BSO);
- ephy_sync_service_send_storage_message (service,
- endpoint, SOUP_METHOD_DELETE,
- NULL, -1, -1,
- NULL, NULL);
- g_free (endpoint);
-}
-
-static void
ephy_sync_service_finalize (GObject *object)
{
EphySyncService *self = EPHY_SYNC_SERVICE (object);
@@ -1004,7 +884,7 @@ ephy_sync_service_fetch_sync_keys (EphySyncService *self,
&node);
json = json_node_get_object (node);
- if (status_code != HTTP_STATUS_OK) {
+ if (status_code != 200) {
g_warning ("FxA server errno: %ld, errmsg: %s",
json_object_get_int_member (json, "errno"),
json_object_get_string_member (json, "message"));
@@ -1040,28 +920,51 @@ out:
}
void
-ephy_sync_service_create_bookmarks_bso_collection (EphySyncService *self)
+ephy_sync_service_send_storage_message (EphySyncService *self,
+ gchar *endpoint,
+ const gchar *method,
+ gchar *request_body,
+ gint64 modified_since,
+ gint64 unmodified_since,
+ SoupSessionCallback callback,
+ gpointer user_data)
{
- gchar *endpoint;
- gchar *request_body;
+ StorageServerRequestAsyncData *data;
- endpoint = g_strdup_printf ("storage/%s/%s",
- EPHY_BOOKMARKS_BSO_COLLECTION,
- EPHY_BOOKMARKS_DUMMY_BSO);
- request_body = build_json_string ("id", EPHY_BOOKMARKS_DUMMY_BSO,
- "payload", EPHY_BOOKMARKS_DUMMY_BSO,
- NULL);
+ data = storage_server_request_async_data_new (self, endpoint,
+ method, request_body,
+ modified_since, unmodified_since,
+ callback, user_data);
- /* Send a dummy BSO to the Storage Server so it will create the
- * EPHY_BOOKMARKS_BSO_COLLECTION collection if it doesn't exist already.
- * In the response callback we will delete the dummy BSO.
+ if (ephy_sync_service_storage_credentials_is_expired (self) == FALSE) {
+ ephy_sync_service_send_storage_request (self, data);
+ return;
+ }
+
+ /* If we are currently obtaining the storage credentials for another message,
+ * then the new message is enqueued and will be sent after the credentials are
+ * retrieved.
*/
- ephy_sync_service_send_storage_message (self,
- endpoint, SOUP_METHOD_PUT,
- request_body, -1, 0,
- create_bookmarks_bso_collection_response_cb,
- self);
+ if (self->is_obtaining_storage_credentials == TRUE) {
+ g_queue_push_tail (self->storage_message_queue, data);
+ return;
+ }
- g_free (endpoint);
- g_free (request_body);
+ /* This message is the one that will obtain the storage credentials. */
+ self->is_obtaining_storage_credentials = TRUE;
+
+ /* Drop the old certificate and storage credentials. */
+ g_clear_pointer (&self->certificate, g_free);
+ g_clear_pointer (&self->storage_credentials_id, g_free);
+ g_clear_pointer (&self->storage_credentials_key, g_free);
+ self->storage_credentials_expiry_time = 0;
+
+ /* The only purpose of certificates is to obtain a signed BrowserID that is
+ * needed to talk to the Token Server. From the Token Server we will obtain
+ * the credentials needed to talk to the Storage Server. Since both
+ * ephy_sync_service_obtain_signed_certificate() and
+ * ephy_sync_service_obtain_storage_credentials() complete asynchronously, we
+ * need to entrust them the task of sending the request to the Storage Server.
+ */
+ ephy_sync_service_obtain_signed_certificate (self, data);
}
diff --git a/src/ephy-sync-service.h b/src/ephy-sync-service.h
index 0cbcf63..5d6027d 100644
--- a/src/ephy-sync-service.h
+++ b/src/ephy-sync-service.h
@@ -20,6 +20,7 @@
#define EPHY_SYNC_SERVICE_H
#include <glib-object.h>
+#include <libsoup/soup.h>
G_BEGIN_DECLS
@@ -36,38 +37,45 @@ typedef enum {
TOKEN_KB
} EphySyncServiceTokenType;
-EphySyncService *ephy_sync_service_new (void);
+EphySyncService *ephy_sync_service_new (void);
-const gchar *ephy_sync_service_token_name_from_type (EphySyncServiceTokenType token_type);
+const gchar *ephy_sync_service_token_name_from_type (EphySyncServiceTokenType token_type);
-gchar *ephy_sync_service_get_user_email (EphySyncService *self);
+gchar *ephy_sync_service_get_user_email (EphySyncService *self);
-void ephy_sync_service_set_user_email (EphySyncService *self,
- const gchar *email);
+void ephy_sync_service_set_user_email (EphySyncService *self,
+ const gchar *email);
-gchar *ephy_sync_service_get_token (EphySyncService *self,
- EphySyncServiceTokenType token_type);
+gchar *ephy_sync_service_get_token (EphySyncService *self,
+ EphySyncServiceTokenType token_type);
-void ephy_sync_service_set_token (EphySyncService *self,
- gchar *token_value,
- EphySyncServiceTokenType token_type);
+void ephy_sync_service_set_token (EphySyncService *self,
+ gchar *token_value,
+ EphySyncServiceTokenType token_type);
-void ephy_sync_service_set_and_store_tokens (EphySyncService *self,
- gchar *token_value,
- EphySyncServiceTokenType token_type,
- ...) G_GNUC_NULL_TERMINATED;
+void ephy_sync_service_set_and_store_tokens (EphySyncService *self,
+ gchar *token_value,
+ EphySyncServiceTokenType token_type,
+ ...) G_GNUC_NULL_TERMINATED;
-void ephy_sync_service_delete_all_tokens (EphySyncService *self);
+void ephy_sync_service_delete_all_tokens (EphySyncService *self);
-void ephy_sync_service_destroy_session (EphySyncService *self,
- const gchar *sessionToken);
+void ephy_sync_service_destroy_session (EphySyncService *self,
+ const gchar *sessionToken);
-gboolean ephy_sync_service_fetch_sync_keys (EphySyncService *self,
- const gchar *email,
- const gchar *keyFetchToken,
- const gchar *unwrapBKey);
+gboolean ephy_sync_service_fetch_sync_keys (EphySyncService *self,
+ const gchar *email,
+ const gchar *keyFetchToken,
+ const gchar *unwrapBKey);
-void ephy_sync_service_create_bookmarks_bso_collection (EphySyncService *self);
+void ephy_sync_service_send_storage_message (EphySyncService *self,
+ gchar *endpoint,
+ const gchar *method,
+ gchar *request_body,
+ gint64 modified_since,
+ gint64 unmodified_since,
+ SoupSessionCallback callback,
+ gpointer user_data);
G_END_DECLS
diff --git a/src/ephy-sync-utils.c b/src/ephy-sync-utils.c
new file mode 100644
index 0000000..c37f885
--- /dev/null
+++ b/src/ephy-sync-utils.c
@@ -0,0 +1,56 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2016 Gabriel Ivascu <ivascu gabriel59 gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include "ephy-sync-utils.h"
+
+gchar *
+ephy_sync_utils_build_json_string (const gchar *first_key,
+ const gchar *first_value,
+ ...)
+{
+ va_list args;
+ gchar *json;
+ gchar *key;
+ gchar *value;
+ gchar *tmp;
+
+ json = g_strconcat ("{\"", first_key, "\": \"", first_value, "\"", NULL);
+ va_start (args, first_value);
+
+ while ((key = va_arg (args, gchar *)) != NULL) {
+ value = va_arg (args, gchar *);
+ tmp = json;
+ json = g_strconcat (json, ", \"", key, "\": \"", value, "\"", NULL);
+ g_free (tmp);
+ }
+
+ va_end (args);
+ tmp = json;
+ json = g_strconcat (json, "}", NULL);
+ g_free (tmp);
+
+ return json;
+}
+
+gchar *
+ephy_sync_utils_create_bso_json (const gchar *id,
+ const gchar *payload)
+{
+ return ephy_sync_utils_build_json_string ("id", id, "payload", payload, NULL);
+}
diff --git a/src/ephy-sync-utils.h b/src/ephy-sync-utils.h
new file mode 100644
index 0000000..8cf72df
--- /dev/null
+++ b/src/ephy-sync-utils.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2016 Gabriel Ivascu <ivascu gabriel59 gmail com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef EPHY_SYNC_UTILS_H
+#define EPHY_SYNC_UTILS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+gchar *ephy_sync_utils_build_json_string (const gchar *first_key,
+ const gchar *first_value,
+ ...) G_GNUC_NULL_TERMINATED;
+
+gchar *ephy_sync_utils_create_bso_json (const gchar *id,
+ const gchar *payload);
+
+G_END_DECLS
+
+#endif
diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c
index cfd97a3..acf748d 100644
--- a/src/prefs-dialog.c
+++ b/src/prefs-dialog.c
@@ -35,6 +35,7 @@
#include "ephy-session.h"
#include "ephy-settings.h"
#include "ephy-shell.h"
+#include "ephy-sync-bookmarks.h"
#include "ephy-sync-secret.h"
#include "ephy-sync-service.h"
#include "clear-data-dialog.h"
@@ -296,7 +297,7 @@ server_message_received_cb (WebKitUserContentManager *manager,
NULL);
/* Create our own bookmarks BSO collection on the Storage Server. */
- ephy_sync_service_create_bookmarks_bso_collection (service);
+ ephy_sync_bookmarks_create_bso_collection (service);
/* Translators: the %s refers to the email of the currently logged in user. */
gtk_label_set_markup (GTK_LABEL (dialog->sync_sign_out_details),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]