summaryrefslogtreecommitdiff
path: root/addressbook/backends/google/google-book.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/backends/google/google-book.c')
-rw-r--r--addressbook/backends/google/google-book.c97
1 files changed, 52 insertions, 45 deletions
diff --git a/addressbook/backends/google/google-book.c b/addressbook/backends/google/google-book.c
index 879a52217..1dd5160c6 100644
--- a/addressbook/backends/google/google-book.c
+++ b/addressbook/backends/google/google-book.c
@@ -86,8 +86,6 @@ struct _GoogleBookPrivate
EProxy *proxy;
guint refresh_interval;
char *base_uri;
- /* FIXME - this one should not be needed */
- char *add_base_uri;
gboolean live_mode;
@@ -148,6 +146,7 @@ google_book_cache_add_contact (GoogleBook *book, GDataEntry *entry)
g_strdup (uid), g_object_ref (entry));
return contact;
case NO_CACHE:
+ default:
break;
}
return NULL;
@@ -166,7 +165,8 @@ google_book_cache_remove_contact (GoogleBook *book, const char *uid)
success = g_hash_table_remove (priv->cache.in_memory.contacts, uid);
return success && g_hash_table_remove (priv->cache.in_memory.gdata_entries, uid);
case NO_CACHE:
- break;
+ default:
+ break;
}
return FALSE;
}
@@ -182,9 +182,16 @@ google_book_cache_get_contact (GoogleBook *book, const char *uid, GDataEntry **e
contact = e_book_backend_cache_get_contact (priv->cache.on_disk, uid);
if (contact) {
if (entry) {
- const char *entry_xml;
- entry_xml = _e_contact_get_gdata_entry_xml (contact);
- *entry = GDATA_ENTRY (gdata_contacts_contact_new_from_xml (entry_xml, -1, NULL));
+ const char *entry_xml, *edit_link;
+
+ entry_xml = _e_contact_get_gdata_entry_xml (contact, &edit_link);
+ *entry = GDATA_ENTRY (gdata_parsable_new_from_xml (GDATA_TYPE_CONTACTS_CONTACT, entry_xml, -1, NULL));
+
+ if (*entry != NULL) {
+ GDataLink *link = gdata_link_new (edit_link, GDATA_LINK_EDIT);
+ gdata_entry_add_link (*entry, link);
+ g_object_unref (link);
+ }
}
_e_contact_remove_gdata_entry_xml (contact);
}
@@ -202,6 +209,7 @@ google_book_cache_get_contact (GoogleBook *book, const char *uid, GDataEntry **e
}
return contact;
case NO_CACHE:
+ default:
break;
}
return NULL;
@@ -241,6 +249,7 @@ google_book_cache_get_contacts (GoogleBook *book)
case IN_MEMORY_CACHE:
return _g_hash_table_to_list (priv->cache.in_memory.contacts);
case NO_CACHE:
+ default:
break;
}
return NULL;
@@ -280,6 +289,7 @@ google_book_cache_get_last_update (GoogleBook *book)
}
break;
case NO_CACHE:
+ default:
break;
}
return NULL;
@@ -302,6 +312,7 @@ google_book_cache_get_last_update_tv (GoogleBook *book, GTimeVal *tv)
memcpy (tv, &priv->cache.in_memory.last_updated, sizeof (GTimeVal));
return priv->cache.in_memory.contacts != NULL;
case NO_CACHE:
+ default:
break;
}
return FALSE;
@@ -311,19 +322,20 @@ static void
google_book_cache_set_last_update (GoogleBook *book, GTimeVal *tv)
{
GoogleBookPrivate *priv = GET_PRIVATE (book);
- char *time;
+ char *_time;
switch (priv->cache_type) {
case ON_DISK_CACHE:
- time = g_time_val_to_iso8601 (tv);
+ _time = g_time_val_to_iso8601 (tv);
/* Work around a bug in EBookBackendCache */
e_file_cache_remove_object (E_FILE_CACHE (priv->cache.on_disk), "last_update_time");
- e_book_backend_cache_set_time (priv->cache.on_disk, time);
- g_free (time);
+ e_book_backend_cache_set_time (priv->cache.on_disk, _time);
+ g_free (_time);
return;
case IN_MEMORY_CACHE:
memcpy (&priv->cache.in_memory.last_updated, tv, sizeof (GTimeVal));
case NO_CACHE:
+ default:
break;
}
}
@@ -443,6 +455,7 @@ google_book_cache_destroy (GoogleBook *book)
g_hash_table_destroy (priv->cache.in_memory.gdata_entries);
break;
case NO_CACHE:
+ default:
break;
}
priv->cache_type = NO_CACHE;
@@ -457,15 +470,9 @@ google_book_construct_base_uri (GoogleBook *book, gboolean use_ssl)
__debug__ (G_STRFUNC);
g_free (priv->base_uri);
- g_free (priv->add_base_uri);
esc_username = g_uri_escape_string (priv->username, NULL, FALSE);
priv->base_uri = g_strdup_printf (format, use_ssl ? "https://" : "http://", esc_username);
- /* FIXME - always use non ssl mode when adding entries. Somehow this does not
- * work on SSL; i.e. get duplicate entries and SOUP returns error 7 - connection
- * terminated unexpectedly
- */
- priv->add_base_uri = g_strdup_printf (format, "http://", esc_username);
g_free (esc_username);
}
@@ -539,8 +546,8 @@ google_book_dispose (GObject *object)
priv->service = NULL;
}
if (priv->proxy) {
- g_object_unref (priv->proxy);
- priv->proxy = NULL;
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
}
google_book_cache_destroy (GOOGLE_BOOK (object));
@@ -554,7 +561,6 @@ google_book_finalize (GObject *object)
GoogleBookPrivate *priv = GET_PRIVATE (object);
g_free (priv->base_uri);
- g_free (priv->add_base_uri);
g_free (priv->username);
if (G_OBJECT_CLASS (google_book_parent_class)->finalize)
@@ -738,17 +744,17 @@ google_book_new (const char *username, gboolean use_cache)
static void
proxy_settings_changed (EProxy *proxy, gpointer user_data)
{
- SoupURI *proxy_uri = NULL;
+ SoupURI *proxy_uri = NULL;
- GoogleBookPrivate *priv = (GoogleBookPrivate*) user_data;
- if (!priv || !priv->base_uri)
- return;
+ GoogleBookPrivate *priv = (GoogleBookPrivate*) user_data;
+ if (!priv || !priv->base_uri)
+ return;
- /* use proxy if necessary */
- if (e_proxy_require_proxy_for_uri (proxy, priv->base_uri)) {
- proxy_uri = e_proxy_peek_uri_for (proxy, priv->base_uri);
- }
- gdata_service_set_proxy_uri (GDATA_SERVICE (priv->service), proxy_uri);
+ /* use proxy if necessary */
+ if (e_proxy_require_proxy_for_uri (proxy, priv->base_uri)) {
+ proxy_uri = e_proxy_peek_uri_for (proxy, priv->base_uri);
+ }
+ gdata_service_set_proxy_uri (GDATA_SERVICE (priv->service), proxy_uri);
}
gboolean
@@ -782,9 +788,9 @@ google_book_connect_to_google (GoogleBook *book, const char *password, GError **
google_book_error_from_soup_error (soup_error, error,
"Connecting to Google failed");
priv->service = NULL;
- g_object_unref (service);
- g_object_unref (priv->proxy);
- priv->proxy = NULL;
+ g_object_unref (service);
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
return FALSE;
}
@@ -806,14 +812,14 @@ google_book_set_offline_mode (GoogleBook *book, gboolean offline)
priv->offline = offline;
if (offline) {
- if (priv->service) {
- g_object_unref (priv->service);
- priv->service = NULL;
- }
- if (priv->proxy) {
- g_object_unref (priv->proxy);
- priv->proxy = NULL;
- }
+ if (priv->service) {
+ g_object_unref (priv->service);
+ priv->service = NULL;
+ }
+ if (priv->proxy) {
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
+ }
}
if (offline == FALSE) {
if (priv->service) {
@@ -845,12 +851,12 @@ google_book_add_contact (GoogleBook *book,
g_return_val_if_fail (priv->service, FALSE);
entry = _gdata_entry_new_from_e_contact (contact);
- xml = gdata_entry_get_xml (entry);
+ xml = gdata_parsable_get_xml (GDATA_PARSABLE (entry));
__debug__ ("new entry with xml: %s", xml);
g_free (xml);
- new_entry = gdata_service_insert_entry (GDATA_SERVICE (priv->service),
- priv->add_base_uri, entry, NULL, &soup_error);
+ new_entry = GDATA_ENTRY (gdata_contacts_service_insert_contact (GDATA_CONTACTS_SERVICE (priv->service), GDATA_CONTACTS_CONTACT (entry),
+ NULL, &soup_error));
g_object_unref (entry);
if (soup_error) {
google_book_error_from_soup_error (soup_error, error,
@@ -901,11 +907,12 @@ google_book_update_contact (GoogleBook *book,
g_object_unref (cached_contact);
_gdata_entry_update_from_e_contact (entry, contact);
- xml = gdata_entry_get_xml (entry);
+ xml = gdata_parsable_get_xml (GDATA_PARSABLE (entry));
__debug__ ("Before:\n%s", xml);
g_free (xml);
- new_entry = gdata_service_update_entry (GDATA_SERVICE (priv->service), entry, NULL, &soup_error);
+ new_entry = GDATA_ENTRY (gdata_contacts_service_update_contact (GDATA_CONTACTS_SERVICE (priv->service), GDATA_CONTACTS_CONTACT (entry),
+ NULL, &soup_error));
g_object_unref (entry);
if (soup_error) {
@@ -916,7 +923,7 @@ google_book_update_contact (GoogleBook *book,
xml = NULL;
if (new_entry)
- xml = gdata_entry_get_xml (new_entry);
+ xml = gdata_parsable_get_xml (GDATA_PARSABLE (new_entry));
__debug__ ("After:\n%s", xml);
g_free (xml);