[Evolution-hackers] EBookSqlite support for EWS



I accidentally¹ ported the EWS addressbook to EBookSqlite. Patch
(against 3.12.5) attached.

It ends up hitting this check and not actually doing any database
writes:

(evolution-addressbook-factory:19473): libedata-book-WARNING **: The
GCancellable passed to `e_book_sqlite_add_contacts' is not the same as
the cancel object passed to e_book_sqlite_lock()

I think the check is wrong, because we're not using e_book_sqlite_lock()
at all. Does it make sense to fix it thus: 

diff --git a/addressbook/libedata-book/e-book-sqlite.c b/addressbook/libedata-book/e-book-sqlite.c
index 0ae89cd..9e5cb78 100644
--- a/addressbook/libedata-book/e-book-sqlite.c
+++ b/addressbook/libedata-book/e-book-sqlite.c
@@ -209,7 +209,7 @@ ebsql_init_debug (void)
 #define EBSQL_LOCK_OR_RETURN(ebsql, cancellable, val) \
        G_STMT_START { \
                EBSQL_LOCK_MUTEX (&(ebsql)->priv->lock); \
-               if (cancellable != NULL && \
+               if (cancellable != NULL && (ebsql)->priv->cancel &&         \
                    (ebsql)->priv->cancel != cancellable) { \
                        g_warning ("The GCancellable passed to `%s' " \
                                   "is not the same as the cancel object " \



-- 
dwmw2

¹ Seriously, it *was* an accident. I thought I needed to port to
  EBookSqlite to make cursors work, which I need for Yuuma's PKCS#11
  module. But EBookBackendSqliteDB can do cursors anyway, so I didn't
  need to do the conversion. Not that it's not worthwhile anyway...

diff --git a/src/addressbook/e-book-backend-ews.c b/src/addressbook/e-book-backend-ews.c
index 3315475..ec7bf38 100644
--- a/src/addressbook/e-book-backend-ews.c
+++ b/src/addressbook/e-book-backend-ews.c
@@ -73,7 +73,7 @@ struct _EBookBackendEwsPrivate {
        gchar *oab_url;
        gchar *folder_name;
 
-       EBookBackendSqliteDB *summary;
+       EBookSqlite *summary;
 
        gboolean only_if_exists;
        gboolean is_writable;
@@ -1371,7 +1371,7 @@ ews_create_contact_cb (GObject *object,
 
                e_contact_set (create_contact->contact, E_CONTACT_UID, item_id->id);
                e_contact_set (create_contact->contact, E_CONTACT_REV, item_id->change_key);
-               e_book_backend_sqlitedb_new_contact (ebews->priv->summary, ebews->priv->folder_id, 
create_contact->contact, TRUE, &error);
+               e_book_sqlite_add_contact (ebews->priv->summary, create_contact->contact, NULL, TRUE, 
create_contact->cancellable, &error);
 
                if (error == NULL) {
                        GSList *contacts;
@@ -1510,6 +1510,7 @@ typedef struct {
        EDataBook *book;
        guint32 opid;
        GSList *sl_ids;
+       GCancellable *cancellable;
 } EwsRemoveContact;
 
 static void
@@ -1529,7 +1530,7 @@ ews_book_remove_contact_cb (GObject *object,
        g_return_if_fail (priv->summary != NULL);
 
        if (!g_simple_async_result_propagate_error (simple, &error))
-               deleted = e_book_backend_sqlitedb_remove_contacts (priv->summary, priv->folder_id, 
remove_contact->sl_ids, &error);
+               deleted = e_book_sqlite_remove_contacts (priv->summary, remove_contact->sl_ids, 
remove_contact->cancellable, &error);
 
        if (deleted)
                e_data_book_respond_remove_contacts (remove_contact->book, remove_contact->opid, EDB_ERROR 
(SUCCESS),  remove_contact->sl_ids);
@@ -1542,6 +1543,7 @@ ews_book_remove_contact_cb (GObject *object,
        g_slist_free_full (remove_contact->sl_ids, g_free);
        g_object_unref (remove_contact->ebews);
        g_object_unref (remove_contact->book);
+       g_object_unref (remove_contact->cancellable);
        g_free (remove_contact);
        g_clear_error (&error);
 }
@@ -1593,6 +1595,7 @@ e_book_backend_ews_remove_contacts (EBookBackend *backend,
        remove_contact->book = g_object_ref (book);
        remove_contact->opid = opid;
        remove_contact->sl_ids = copy;
+       remove_contact->cancellable = g_object_ref(cancellable);
 
        e_ews_connection_delete_items (
                priv->cnc, EWS_PRIORITY_MEDIUM, (GSList *) id_list,
@@ -1647,12 +1650,11 @@ ews_modify_contact_cb (GObject *object,
 
                id = e_contact_get (modify_contact->old_contact, E_CONTACT_UID);
 
-               e_book_backend_sqlitedb_remove_contact (priv->summary, priv->folder_id, id, &error);
-               e_book_backend_sqlitedb_new_contact (
+               e_book_sqlite_remove_contact (ebews->priv->summary, id, modify_contact->cancellable, &error);
+               e_book_sqlite_add_contact (
                                ebews->priv->summary,
-                               ebews->priv->folder_id,
-                               modify_contact->new_contact,
-                               TRUE,
+                               modify_contact->new_contact, NULL,
+                               TRUE, modify_contact->cancellable,
                                &error);
 
                if (error == NULL) {
@@ -1830,10 +1832,7 @@ e_book_backend_ews_modify_contacts (EBookBackend *backend,
        id->id = e_contact_get (contact, E_CONTACT_UID);
        id->change_key = e_contact_get (contact, E_CONTACT_REV);
 
-       old_contact = e_book_backend_sqlitedb_get_contact (
-               priv->summary, priv->folder_id,
-               id->id, NULL, NULL, &error);
-       if (!old_contact) {
+       if (!e_book_sqlite_get_contact (priv->summary, id->id, TRUE, &old_contact, &error)) {
                g_object_unref (contact);
                e_data_book_respond_modify_contacts (book, opid, EDB_ERROR (NOT_SUPPORTED), NULL);
                return;
@@ -1900,20 +1899,25 @@ e_book_backend_ews_get_contact_list (EBookBackend *backend,
        GError *error = NULL;
        EBookBackendEws *ebews;
        EBookBackendEwsPrivate *priv;
+       gint populated = 0;
 
        ebews = E_BOOK_BACKEND_EWS (backend);
        priv = ebews->priv;
 
-       if (!e_backend_get_online (E_BACKEND (backend))) {
-               if (priv->summary && e_book_backend_sqlitedb_get_is_populated (priv->summary, 
priv->folder_id, NULL)) {
-                       list = e_book_backend_sqlitedb_search (priv->summary, priv->folder_id, query, NULL, 
NULL, NULL, &error);
-                       l = list;
-                       while (l) {
-                               EbSdbSearchData *s_data = (EbSdbSearchData *) l->data;
+       if (priv->summary)
+               e_book_sqlite_get_key_value_int (priv->summary, E_BOOK_SQL_IS_POPULATED_KEY, &populated, 
NULL);
 
-                               vcard_list = g_slist_append (vcard_list, g_strdup (s_data->vcard));
-                               e_book_backend_sqlitedb_search_data_free (s_data);
-                               l = l->next;
+       if (!e_backend_get_online (E_BACKEND (backend))) {
+               if (populated) {
+                       if (e_book_sqlite_search (priv->summary, query, FALSE, &list, cancellable, &error)) {
+                               l = list;
+                               while (l) {
+                                       EbSqlSearchData *s_data = (EbSqlSearchData *) l->data;
+
+                                       vcard_list = g_slist_append (vcard_list, g_strdup (s_data->vcard));
+                                       e_book_sqlite_search_data_free (s_data);
+                                       l = l->next;
+                               }
                        }
                        convert_error_to_edb_error (&error);
                        e_data_book_respond_get_contact_list (book, opid, error, vcard_list);
@@ -1932,15 +1936,16 @@ e_book_backend_ews_get_contact_list (EBookBackend *backend,
                return;
        }
 
-       if (priv->summary && e_book_backend_sqlitedb_get_is_populated (priv->summary, priv->folder_id, NULL)) 
{
-               list = e_book_backend_sqlitedb_search (priv->summary, priv->folder_id, query, NULL, NULL, 
NULL, &error);
-               l = list;
-               while (l) {
-                       EbSdbSearchData *s_data = (EbSdbSearchData *) l->data;
+       if (populated) {
+               if (e_book_sqlite_search (priv->summary, query, FALSE, &list, cancellable, &error)) {
+                       l = list;
+                       while (l) {
+                               EbSqlSearchData *s_data = (EbSqlSearchData *) l->data;
 
-                       vcard_list = g_slist_append (vcard_list, g_strdup (s_data->vcard));
-                       e_book_backend_sqlitedb_search_data_free (s_data);
-                       l = l->next;
+                               vcard_list = g_slist_append (vcard_list, g_strdup (s_data->vcard));
+                               e_book_sqlite_search_data_free (s_data);
+                               l = l->next;
+                       }
                }
 
                convert_error_to_edb_error (&error);
@@ -2282,9 +2287,8 @@ ews_download_gal (EBookBackendEws *cbews, EwsOALDetails *full, GSList *deltas, g
 
        cache_dir = e_book_backend_get_cache_dir (E_BOOK_BACKEND (cbews));
 
-       thisoab = e_book_backend_sqlitedb_get_key_value (priv->summary, priv->folder_id,
-                                                        "oab-filename", NULL);
-       if (!thisoab)
+       if (!e_book_sqlite_get_key_value (priv->summary, "oab-filename", &thisoab, NULL)
+           || !thisoab)
                goto full;
 
        for (p = deltas; p; p = p->next) {
@@ -2351,8 +2355,7 @@ ews_remove_old_gal_file (EBookBackendEws *cbews,
        if (!priv->summary)
                return FALSE;
 
-       filename = e_book_backend_sqlitedb_get_key_value (priv->summary, priv->folder_id, "oab-filename", 
error);
-       if (*error)
+       if (!e_book_sqlite_get_key_value (priv->summary, "oab-filename", &filename, error))
                return FALSE;
 
        if (filename)
@@ -2366,6 +2369,7 @@ struct _db_data {
        GSList *contact_collector;
        guint collected_length;
        EBookBackendEws *cbews;
+       GCancellable *cancellable;
 };
 
 static void
@@ -2398,7 +2402,7 @@ ews_gal_store_contact (EContact *contact,
                g_free (status_message);
 
                data->contact_collector = g_slist_reverse (data->contact_collector);
-               e_book_backend_sqlitedb_new_contacts (priv->summary, priv->folder_id, 
data->contact_collector, TRUE, error);
+               e_book_sqlite_add_contacts (priv->summary, data->contact_collector, NULL, TRUE, 
data->cancellable, error);
 
                for (l = data->contact_collector; l != NULL; l = g_slist_next (l))
                        e_book_backend_notify_update (E_BOOK_BACKEND (data->cbews), E_CONTACT (l->data));
@@ -2425,17 +2429,19 @@ ews_replace_gal_in_db (EBookBackendEws *cbews,
        EBookBackendEwsPrivate *priv = cbews->priv;
        EwsOabDecoder *eod;
        gboolean ret = TRUE;
+       gint populated = 0;
        struct _db_data data;
 
        g_return_val_if_fail (priv->summary != NULL, FALSE);
 
        /* remove the old address-book and create a new one in db */
-       if (e_book_backend_sqlitedb_get_is_populated (priv->summary, priv->folder_id, NULL)) {
-               GSList *uids;
+       e_book_sqlite_get_key_value_int (priv->summary, E_BOOK_SQL_IS_POPULATED_KEY, &populated, NULL);
+       if (populated) {
+               GSList *uids = NULL;
 
-               uids = e_book_backend_sqlitedb_search_uids (priv->summary, priv->folder_id, NULL, NULL, NULL);
+               e_book_sqlite_search_uids (priv->summary, NULL, &uids, cancellable, NULL);
                if (uids) {
-                       e_book_backend_sqlitedb_remove_contacts (priv->summary, priv->folder_id, uids, NULL);
+                       e_book_sqlite_remove_contacts (priv->summary, uids, cancellable, NULL);
                        g_slist_free_full (uids, g_free);
                }
 
@@ -2452,6 +2458,7 @@ ews_replace_gal_in_db (EBookBackendEws *cbews,
        data.contact_collector = NULL;
        data.collected_length = 0;
        data.cbews = cbews;
+       data.cancellable = cancellable;
 
        ret = ews_oab_decoder_decode (eod, ews_gal_store_contact, &data, cancellable, error);
 
@@ -2463,7 +2470,7 @@ ews_replace_gal_in_db (EBookBackendEws *cbews,
               return ret;
 
        /* mark the db as populated */
-       ret = e_book_backend_sqlitedb_set_is_populated (priv->summary, priv->folder_id, TRUE, error);
+       ret = e_book_sqlite_set_key_value_int (priv->summary, E_BOOK_SQL_IS_POPULATED_KEY, TRUE, error);
 
        return ret;
 }
@@ -2479,7 +2486,7 @@ ebews_start_gal_sync (gpointer data)
        GSList *full_l = NULL;
        GSList *deltas = NULL;
        gboolean ret = TRUE;
-       gboolean is_populated;
+       gint is_populated = 0;
        gchar *uncompressed_filename = NULL;
        gchar *password;
        gchar *old_etag = NULL, *etag = NULL;
@@ -2510,13 +2517,13 @@ ebews_start_gal_sync (gpointer data)
 
        d (printf ("Ewsgal: Fetching oal full details file \n");)
 
-       is_populated = e_book_backend_sqlitedb_get_is_populated (priv->summary, priv->folder_id, NULL);
+       e_book_sqlite_get_key_value_int (priv->summary, E_BOOK_SQL_IS_POPULATED_KEY, &is_populated, NULL);
        if (is_populated) {
-               gchar *tmp;
-               old_etag = e_book_backend_sqlitedb_get_key_value (
-                       priv->summary, priv->folder_id, "etag", NULL);
-               tmp = e_book_backend_sqlitedb_get_key_value (
-                       priv->summary, priv->folder_id, "seq", NULL);
+               gchar *tmp = NULL;
+               e_book_sqlite_get_key_value (
+                       priv->summary, "etag", &old_etag, NULL);
+               e_book_sqlite_get_key_value (
+                       priv->summary, "seq", &tmp, NULL);
                if (tmp)
                        old_seq = strtoul(tmp, NULL, 10);
                else
@@ -2578,31 +2585,33 @@ ebews_start_gal_sync (gpointer data)
 
        d (printf ("Ewsgal: Removing old gal \n");)
        /* remove old_gal_file */
-       ret = ews_remove_old_gal_file (cbews, &error);
-       if (!ret) {
-               goto exit;
-       }
+       ews_remove_old_gal_file (cbews, &error);
 
        d (printf ("Ewsgal: Replacing old gal with new gal contents in db \n");)
        ret = ews_replace_gal_in_db (cbews, uncompressed_filename, cancellable, &error);
        if (!ret)
                goto exit;
 
-       e_book_backend_sqlitedb_set_key_value (priv->summary, priv->folder_id, "etag", etag ? etag : "", 
NULL);
-       if (e_book_backend_sqlitedb_set_key_value (priv->summary, priv->folder_id,
-                                                  "oab-filename", uncompressed_filename,
-                                                  NULL)) {
+       e_book_sqlite_set_key_value (priv->summary, "etag", etag ? etag : "", NULL);
+       if (e_book_sqlite_set_key_value (priv->summary, "oab-filename",
+                                        uncompressed_filename, NULL)) {
                /* Don't let it get deleted */
                g_free (uncompressed_filename);
                uncompressed_filename = NULL;
        }
 
        seq = g_strdup_printf ("%"G_GUINT32_FORMAT, full->seq);
-       ret = e_book_backend_sqlitedb_set_key_value (priv->summary, priv->folder_id, "seq", seq, &error);
+       ret = e_book_sqlite_set_key_value (priv->summary, "seq", seq, &error);
        g_free (seq);
 
        if (!ret) {
-               e_book_backend_sqlitedb_delete_addressbook (priv->summary, priv->folder_id, &error);
+               gchar *db_filename = g_build_filename (
+                                                      e_book_backend_get_cache_dir (E_BOOK_BACKEND (cbews)),
+                                                      "contacts.dn", NULL);
+               g_object_unref (priv->summary);
+               priv->summary = NULL;
+               g_unlink (db_filename);
+               g_free (db_filename);
                goto exit;
        }
 
@@ -2647,6 +2656,7 @@ exit:
 static void
 ebews_sync_deleted_items (EBookBackendEws *ebews,
                           GSList *deleted_ids,
+                         GCancellable *cancellable,
                           GError **error)
 {
        GSList *l;
@@ -2658,10 +2668,10 @@ ebews_sync_deleted_items (EBookBackendEws *ebews,
 
        for (l = deleted_ids; l != NULL; l = g_slist_next (l)) {
                gchar *id = (gchar *) l->data;
-               gboolean partial_content;
+               gboolean exists = FALSE;
 
-               if (e_book_backend_sqlitedb_has_contact (priv->summary, priv->folder_id, id, 
&partial_content, NULL))
-                       e_book_backend_sqlitedb_remove_contact (priv->summary, priv->folder_id, id, error);
+               if (e_book_sqlite_has_contact (priv->summary, id, &exists, NULL) && exists)
+                       e_book_sqlite_remove_contact (priv->summary, id, cancellable, error);
                e_book_backend_notify_remove (E_BOOK_BACKEND (ebews), id);
        }
 
@@ -2724,7 +2734,7 @@ ebews_store_contact_items (EBookBackendEws *ebews,
                attr = e_vcard_attribute_new (NULL, "X-EWS-KIND");
                e_vcard_add_attribute_with_value (E_VCARD (contact), attr, "DT_MAILUSER");
 
-               e_book_backend_sqlitedb_new_contact (priv->summary, priv->folder_id, contact, TRUE, error);
+               e_book_sqlite_add_contact (priv->summary, contact, NULL, TRUE, cancellable, error);
                e_book_backend_notify_update (E_BOOK_BACKEND (ebews), contact);
 
                g_object_unref (item);
@@ -2875,6 +2885,7 @@ ebews_store_distribution_list_items (EBookBackendEws *ebews,
                                      const EwsId *id,
                                      const gchar *d_name,
                                      GSList *members,
+                                    GCancellable *cancellable,
                                      GError **error)
 {
        EContact *contact;
@@ -2890,7 +2901,7 @@ ebews_store_distribution_list_items (EBookBackendEws *ebews,
        attr = e_vcard_attribute_new (NULL, "X-EWS-KIND");
        e_vcard_add_attribute_with_value (E_VCARD (contact), attr, "DT_DISTLIST");
 
-       ret = e_book_backend_sqlitedb_new_contact (ebews->priv->summary, ebews->priv->folder_id, contact, 
TRUE, error);
+       ret = e_book_sqlite_add_contact (ebews->priv->summary, contact, NULL, TRUE, cancellable, error);
        if (ret)
                e_book_backend_notify_update (E_BOOK_BACKEND (ebews), contact);
 
@@ -3021,7 +3032,7 @@ ebews_fetch_items (EBookBackendEws *ebews,
                        goto cleanup;
 
                if (store_to_cache)
-                       ret = ebews_store_distribution_list_items (ebews, id, d_name, members, error);
+                       ret = ebews_store_distribution_list_items (ebews, id, d_name, members, cancellable, 
error);
                else
                        ret = ebews_vcards_append_dl (ebews, id, d_name, members, vcards, error);
 
@@ -3051,11 +3062,11 @@ ebews_forget_all_contacts (EBookBackendEws *ebews)
        backend = E_BOOK_BACKEND (ebews);
        g_return_if_fail (backend != NULL);
 
-       ids = e_book_backend_sqlitedb_search_uids (ebews->priv->summary, ebews->priv->folder_id, NULL, NULL, 
NULL);
+       e_book_sqlite_search_uids (ebews->priv->summary, NULL, &ids, ebews->priv->cancellable, NULL);
        if (ids) {
                GSList *id;
 
-               e_book_backend_sqlitedb_remove_contacts (ebews->priv->summary, ebews->priv->folder_id, ids, 
NULL);
+               e_book_sqlite_remove_contacts (ebews->priv->summary, ids, ebews->priv->cancellable, NULL);
                for (id = ids; id; id = id->next) {
                        e_book_backend_notify_remove (backend, id->data);
                }
@@ -3201,9 +3212,10 @@ static void
 fetch_from_offline (EBookBackendEws *ews,
                     EDataBookView *book_view,
                     const gchar *query,
+                   GCancellable *cancellable,
                     GError *error)
 {
-       GSList *contacts, *l;
+       GSList *contacts = NULL, *l;
        EBookBackendEwsPrivate *priv;
 
        priv = ews->priv;
@@ -3217,13 +3229,13 @@ fetch_from_offline (EBookBackendEws *ews,
 
        g_return_if_fail (priv->summary != NULL);
 
-       contacts = e_book_backend_sqlitedb_search (priv->summary, priv->folder_id, query, NULL, NULL, NULL, 
&error);
+       e_book_sqlite_search (priv->summary, query, FALSE, &contacts, cancellable, &error);
        for (l = contacts; l != NULL; l = g_slist_next (l)) {
-               EbSdbSearchData *s_data = (EbSdbSearchData *) l->data;
+               EbSqlSearchData *s_data = (EbSqlSearchData *) l->data;
 
                e_data_book_view_notify_update_prefiltered_vcard (book_view, s_data->uid, s_data->vcard);
 
-               e_book_backend_sqlitedb_search_data_free (s_data);
+               e_book_sqlite_search_data_free (s_data);
        }
 
        if (contacts)
@@ -3250,6 +3262,7 @@ e_book_backend_ews_start_view (EBookBackend *backend,
        const gchar *extension_name;
        GError *error = NULL;
        gboolean includes_last_item;
+       gint is_populated = 0;
 
        ebews = E_BOOK_BACKEND_EWS (backend);
        priv = ebews->priv;
@@ -3263,8 +3276,10 @@ e_book_backend_ews_start_view (EBookBackend *backend,
        e_data_book_view_notify_progress (book_view, -1, _("Searching..."));
 
        if (!e_backend_get_online (E_BACKEND (backend))) {
-               if (priv->summary && e_book_backend_sqlitedb_get_is_populated (priv->summary, 
priv->folder_id, NULL)) {
-                       fetch_from_offline (ebews, book_view, query, error);
+               if (priv->summary)
+                       e_book_sqlite_get_key_value_int (priv->summary, E_BOOK_SQL_IS_POPULATED_KEY, 
&is_populated, NULL);
+               if (!is_populated) {
+                       fetch_from_offline (ebews, book_view, query, /*XXX*/NULL, error);
                        return;
                }
 
@@ -3294,9 +3309,10 @@ e_book_backend_ews_start_view (EBookBackend *backend,
 
        ebews_start_refreshing (ebews);
 
-       if (priv->summary &&
-           e_book_backend_sqlitedb_get_is_populated (priv->summary, priv->folder_id, NULL)) {
-               fetch_from_offline (ebews, book_view, query, error);
+       if (priv->summary)
+               e_book_sqlite_get_key_value_int (priv->summary, E_BOOK_SQL_IS_POPULATED_KEY, &is_populated, 
NULL);
+       if (!is_populated) {
+               fetch_from_offline (ebews, book_view, query, /*XXX*/NULL, error);
                return;
        }
 
@@ -3404,24 +3420,26 @@ static void
 e_book_backend_ews_load_source (EBookBackend *backend,
                                 ESource *source,
                                 gboolean only_if_exists,
+                               GCancellable *cancellable,
                                 GError **perror)
 {
        EBookBackendEws *cbews;
        EBookBackendEwsPrivate *priv;
        CamelEwsSettings *settings;
        ESourceExtension *extension;
-       const gchar *cache_dir, *email;
+       const gchar *cache_dir;
        const gchar *display_name;
        const gchar *extension_name;
        const gchar *gal_uid;
        const gchar *uid;
+       gchar *db_filename;
 
        cbews = E_BOOK_BACKEND_EWS (backend);
        priv = cbews->priv;
 
        cache_dir = e_book_backend_get_cache_dir (backend);
+       db_filename = g_build_filename (cache_dir, "contacts.db", NULL);
        settings = book_backend_ews_get_collection_settings (cbews);
-       email = camel_ews_settings_get_email (settings);
 
        uid = e_source_get_uid (source);
        gal_uid = camel_ews_settings_get_gal_uid (settings);
@@ -3435,10 +3453,8 @@ e_book_backend_ews_load_source (EBookBackend *backend,
        priv->folder_id = e_source_ews_folder_dup_id (
                E_SOURCE_EWS_FOLDER (extension));
 
-       priv->summary = e_book_backend_sqlitedb_new (
-               cache_dir, email, priv->folder_id,
-               display_name, TRUE, perror);
-
+       priv->summary = e_book_sqlite_new (db_filename, /* 3.13 onwards: source,*/ cancellable, perror);
+       g_free (db_filename);
        if (priv->summary == NULL)
                return;
 
@@ -3641,13 +3657,13 @@ ews_update_items_thread (gpointer data)
 {
        EBookBackendEws *ebews = data;
        EBookBackendEwsPrivate *priv;
-       gchar *sync_state;
+       gchar *sync_state = NULL;
        GError *error = NULL;
        gboolean includes_last_item;
 
        priv = ebews->priv;
 
-       sync_state = e_book_backend_sqlitedb_get_sync_data (priv->summary, priv->folder_id, NULL);
+       e_book_sqlite_get_key_value (priv->summary, "sync_data", &sync_state, NULL);
        do {
                GSList *items_created = NULL;
                GSList *items_updated = NULL;
@@ -3678,7 +3694,7 @@ ews_update_items_thread (gpointer data)
                if (error != NULL) {
                        if (g_error_matches (error, EWS_CONNECTION_ERROR, 
EWS_CONNECTION_ERROR_INVALIDSYNCSTATEDATA)) {
                                g_clear_error (&error);
-                               e_book_backend_sqlitedb_set_sync_data (priv->summary, priv->folder_id, NULL, 
&error);
+                               e_book_sqlite_set_key_value (priv->summary, "sync_data", NULL, &error);
                                if (error != NULL)
                                        break;
 
@@ -3709,6 +3725,7 @@ ews_update_items_thread (gpointer data)
                        ebews_sync_deleted_items (
                                        ebews,
                                        items_deleted, /* freed inside the function */
+                                       priv->cancellable,
                                        &error);
                        if (error != NULL) {
                                g_slist_free_full (items_created, g_object_unref);
@@ -3743,13 +3760,13 @@ ews_update_items_thread (gpointer data)
                                break;
                }
 
-               e_book_backend_sqlitedb_set_sync_data (priv->summary, priv->folder_id, sync_state, &error);
+               e_book_sqlite_set_key_value (priv->summary, "sync_data", sync_state, &error);
                if (error != NULL)
                        break;
        } while (!includes_last_item);
 
        if (error == NULL)
-               e_book_backend_sqlitedb_set_is_populated (priv->summary, priv->folder_id, TRUE, &error);
+               e_book_sqlite_set_key_value_int (priv->summary, E_BOOK_SQL_IS_POPULATED_KEY, TRUE, &error);
 
        if (error != NULL) {
                g_warning ("%s: %s", G_STRFUNC, error->message);
@@ -3826,7 +3843,7 @@ e_book_backend_ews_open (EBookBackend *backend,
        priv = ebews->priv;
 
        source = e_backend_get_source (E_BACKEND (backend));
-       e_book_backend_ews_load_source (backend, source, only_if_exists, &error);
+       e_book_backend_ews_load_source (backend, source, only_if_exists, cancellable, &error);
        ews_settings = book_backend_ews_get_collection_settings (ebews);
 
        if (error == NULL) {

Attachment: smime.p7s
Description: S/MIME cryptographic signature



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