~ubuntu-branches/ubuntu/oneiric/evolution-couchdb/oneiric

« back to all changes in this revision

Viewing changes to addressbook/e-book-backend-couchdb.c

  • Committer: Bazaar Package Importer
  • Author(s): Rodrigo Moya
  • Date: 2011-05-25 17:39:14 UTC
  • mfrom: (1.1.18 upstream)
  • Revision ID: james.westby@ubuntu.com-20110525173914-sn09e6y8cl5i94kv
Tags: 0.5.90-0ubuntu1
* New upstream release
* debian/patches/02_use_correct_cache_dir.patch:
  - Remove upstream patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
}
51
51
#endif
52
52
 
 
53
static EContactField supported_fields[] = {
 
54
        /* Basic fields */
 
55
        E_CONTACT_UID,
 
56
        E_CONTACT_GIVEN_NAME,
 
57
        E_CONTACT_FAMILY_NAME,
 
58
        E_CONTACT_FULL_NAME,
 
59
        E_CONTACT_NAME,
 
60
        E_CONTACT_NICKNAME,
 
61
        E_CONTACT_SPOUSE,
 
62
        E_CONTACT_BIRTH_DATE,
 
63
        E_CONTACT_ANNIVERSARY,
 
64
        E_CONTACT_NOTE,
 
65
        E_CONTACT_CATEGORIES,
 
66
        E_CONTACT_REV,
 
67
 
 
68
        /* URLS */
 
69
        E_CONTACT_HOMEPAGE_URL,
 
70
        E_CONTACT_BLOG_URL,
 
71
 
 
72
        /* Company fields */
 
73
        E_CONTACT_ORG,
 
74
        E_CONTACT_ORG_UNIT,
 
75
        E_CONTACT_TITLE,
 
76
        E_CONTACT_MANAGER,
 
77
        E_CONTACT_ASSISTANT,
 
78
        E_CONTACT_OFFICE,
 
79
 
 
80
        /* Email addresses */
 
81
        E_CONTACT_EMAIL_1,
 
82
        E_CONTACT_EMAIL_2,
 
83
        E_CONTACT_EMAIL_3,
 
84
        E_CONTACT_EMAIL_4,
 
85
 
 
86
        /* Phone numbers */
 
87
        E_CONTACT_PHONE_HOME,
 
88
        E_CONTACT_PHONE_HOME_FAX,
 
89
        E_CONTACT_PHONE_BUSINESS,
 
90
        E_CONTACT_PHONE_BUSINESS_FAX,
 
91
        E_CONTACT_PHONE_OTHER,
 
92
        E_CONTACT_PHONE_OTHER_FAX,
 
93
        E_CONTACT_PHONE_PAGER,
 
94
        E_CONTACT_PHONE_MOBILE,
 
95
        E_CONTACT_PHONE_ASSISTANT,
 
96
        E_CONTACT_PHONE_CALLBACK,
 
97
        E_CONTACT_PHONE_CAR,
 
98
        E_CONTACT_PHONE_PRIMARY,
 
99
        E_CONTACT_PHONE_RADIO,
 
100
        E_CONTACT_PHONE_TELEX,
 
101
        E_CONTACT_PHONE_COMPANY,
 
102
 
 
103
        /* Postal addresses */
 
104
        E_CONTACT_ADDRESS_HOME,
 
105
        E_CONTACT_ADDRESS_WORK,
 
106
        E_CONTACT_ADDRESS_OTHER,
 
107
 
 
108
        /* IM addresses */
 
109
        E_CONTACT_IM_AIM,
 
110
        E_CONTACT_IM_GADUGADU,
 
111
        E_CONTACT_IM_GROUPWISE,
 
112
        E_CONTACT_IM_ICQ,
 
113
        E_CONTACT_IM_JABBER,
 
114
        E_CONTACT_IM_MSN,
 
115
        E_CONTACT_IM_SKYPE,
 
116
        E_CONTACT_IM_YAHOO
 
117
};
 
118
 
53
119
static void
54
120
get_current_time (gchar time_string[100])
55
121
{
630
696
static CouchdbStructField *
631
697
contact_url_to_struct_field (EVCardAttribute *attr, const gchar *description)
632
698
{
633
 
        const gchar *address, *uuid;
 
699
        const gchar *address, *uuid = NULL;
634
700
        GList *params, *pl;
635
701
 
636
702
        address = e_vcard_attribute_get_value (attr);
974
1040
        e_book_backend_notify_remove (E_BOOK_BACKEND (couchdb_backend), docid);
975
1041
}
976
1042
 
977
 
#if EDS_CHECK_VERSION(2, 31, 0)
 
1043
#if EDS_CHECK_VERSION(3, 1, 2)
 
1044
static void
 
1045
e_book_backend_couchdb_open (EBookBackend *backend,
 
1046
                             EDataBook *book,
 
1047
                             guint32 opid,
 
1048
                             GCancellable *cancellable,
 
1049
                             gboolean only_if_exists)
 
1050
#elif EDS_CHECK_VERSION(2, 31, 0)
978
1051
static void
979
1052
e_book_backend_couchdb_load_source (EBookBackend *backend,
980
1053
                                    ESource *source,
987
1060
                                    gboolean only_if_exists)
988
1061
#endif
989
1062
{
990
 
        gchar *uri;
 
1063
        gchar *uri, *cache_filename;
 
1064
        const gchar *cache_dir;
991
1065
        const gchar *property;
992
1066
        GError *error = NULL;
993
1067
        GSList *doc_list, *sl;
994
1068
        const gchar *db_name;
995
1069
        EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
 
1070
#if EDS_CHECK_VERSION(3, 1, 2)
 
1071
        ESource *source = e_book_backend_get_source (backend);
 
1072
#endif
996
1073
 
997
1074
#if EDS_CHECK_VERSION(2, 31, 0)
998
1075
        g_return_if_fail (E_IS_BOOK_BACKEND_COUCHDB (couchdb_backend));
1017
1094
        property = e_source_get_property (source, "couchdb_instance");
1018
1095
        if (g_strcmp0 (property, "user") == 0) {
1019
1096
                if (! (couchdb_backend->couchdb = COUCHDB_SESSION (desktopcouch_session_new ()))) {
1020
 
#if EDS_CHECK_VERSION(2, 31, 0)
 
1097
#if EDS_CHECK_VERSION(3, 1, 2)
 
1098
                        e_book_backend_notify_opened (backend, e_data_book_create_error (E_DATA_BOOK_STATUS_OTHER_ERROR, _("Could not create DesktopcouchSession object")));
 
1099
                        return;
 
1100
#elif EDS_CHECK_VERSION(2, 31, 0)
1021
1101
                        g_set_error (ret_error, ERROR_QUARK, 100, _("Could not create DesktopcouchSession object"));
1022
1102
                        return;
1023
1103
#else
1035
1115
 
1036
1116
                if (! (couchdb_backend->couchdb = couchdb_session_new (uri))) {
1037
1117
                        g_free (uri);
1038
 
#if EDS_CHECK_VERSION(2, 31, 0)
 
1118
#if EDS_CHECK_VERSION(3, 1, 2)
 
1119
                        e_book_backend_notify_opened (backend, e_data_book_create_error (E_DATA_BOOK_STATUS_OTHER_ERROR, _("Could not create CouchdbSession object")));
 
1120
                        return;
 
1121
#elif EDS_CHECK_VERSION(2, 31, 0)
1039
1122
                        g_set_error (ret_error, ERROR_QUARK, 100, _("Could not create CouchdbSession object"));
1040
1123
                        return;
1041
1124
#else
1060
1143
                        g_warning ("Could not get CouchDB database info: %s", error->message);
1061
1144
 
1062
1145
                if (only_if_exists) {
1063
 
#if EDS_CHECK_VERSION(2, 31, 0)
 
1146
#if EDS_CHECK_VERSION(3, 1, 2)
 
1147
                        if (error) {
 
1148
                                e_book_backend_notify_opened (backend, e_data_book_create_error (E_DATA_BOOK_STATUS_NO_SUCH_BOOK, error->message));
 
1149
                                g_error_free (error);
 
1150
                        } else {
 
1151
                                e_book_backend_notify_opened (backend, e_data_book_create_error_fmt (E_DATA_BOOK_STATUS_NO_SUCH_BOOK, _("Could not open database %s"), db_name));
 
1152
                        }
 
1153
                        return;
 
1154
#elif EDS_CHECK_VERSION(2, 31, 0)
1064
1155
                        if (error) {
1065
1156
                                g_propagate_error (ret_error, error);
1066
1157
                                g_error_free (error);
1081
1172
                if (!couchdb_session_create_database (couchdb_backend->couchdb,
1082
1173
                                                      db_name,
1083
1174
                                                      &error)) {
1084
 
#if EDS_CHECK_VERSION(2, 31, 0)
 
1175
#if EDS_CHECK_VERSION(3, 1, 2)
 
1176
                        e_book_backend_notify_opened (backend, e_data_book_create_error (E_DATA_BOOK_STATUS_PERMISSION_DENIED, error->message));
 
1177
#elif EDS_CHECK_VERSION(2, 31, 0)
1085
1178
                        g_propagate_error (ret_error, error);
1086
1179
#endif
1087
1180
                        g_warning ("Could not create 'contacts' database: %s", error->message);
1100
1193
        }
1101
1194
 
1102
1195
        /* Create cache */
1103
 
        uri = e_source_get_uri (source);
1104
 
        couchdb_backend->cache = e_book_backend_cache_new ((const gchar *) uri);
1105
 
        g_free (uri);
 
1196
#if EDS_CHECK_VERSION(2, 31, 0)
 
1197
        cache_dir = e_book_backend_get_cache_dir (E_BOOK_BACKEND (couchdb_backend));
 
1198
        cache_filename = g_build_filename (cache_dir,
 
1199
                                           couchdb_session_get_uri (couchdb_backend->couchdb),
 
1200
                                           "cache.xml", NULL);
 
1201
        g_debug ("Creating cache at %s", cache_filename);
 
1202
        couchdb_backend->cache = e_book_backend_cache_new ((const gchar *) cache_filename);
 
1203
        g_free (cache_filename);
 
1204
#else
 
1205
        cache_dir = e_source_get_uri (source);
 
1206
        couchdb_backend->cache = e_book_backend_cache_new ((const gchar *) cache_dir);
 
1207
        g_free (cache_dir);
 
1208
#endif
1106
1209
 
1107
1210
        /* Populate the cache */
1108
1211
        e_file_cache_clean (E_FILE_CACHE (couchdb_backend->cache));
1130
1233
        g_signal_connect (G_OBJECT (couchdb_backend->database), "document_deleted",
1131
1234
                          G_CALLBACK (document_deleted_cb), couchdb_backend);
1132
1235
        couchdb_database_listen_for_changes (couchdb_backend->database);
1133
 
 
 
1236
#if EDS_CHECK_VERSION(3, 1, 2)
 
1237
        e_book_backend_notify_readonly (backend, FALSE);
 
1238
#else
1134
1239
        e_book_backend_set_is_loaded (backend, TRUE);
1135
1240
        e_book_backend_set_is_writable (backend, TRUE);
1136
 
#if EDS_CHECK_VERSION(2, 31, 0)
 
1241
#endif
 
1242
#if EDS_CHECK_VERSION(3, 1, 2)
 
1243
        e_book_backend_notify_online (backend, TRUE);
 
1244
        e_book_backend_notify_opened (backend, NULL);
 
1245
#elif EDS_CHECK_VERSION(2, 31, 0)
1137
1246
        e_book_backend_notify_connection_status (backend, TRUE);
1138
1247
#else
1139
1248
        return GNOME_Evolution_Addressbook_Success;
1141
1250
}
1142
1251
 
1143
1252
static void
1144
 
e_book_backend_couchdb_remove (EBookBackend *backend, EDataBook *book, guint32 opid)
 
1253
e_book_backend_couchdb_remove (EBookBackend *backend,
 
1254
                               EDataBook *book,
 
1255
                               guint32 opid
 
1256
#if EDS_CHECK_VERSION(3, 1, 2)
 
1257
                             , GCancellable *cancellable
 
1258
#endif
 
1259
                              )
1145
1260
{
1146
1261
        EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
1147
1262
 
1162
1277
#endif
1163
1278
}
1164
1279
 
1165
 
static char *
1166
 
e_book_backend_couchdb_get_static_capabilities (EBookBackend *backend)
1167
 
{
1168
 
        return g_strdup ("local,do-initial-query,bulk-removes");
1169
 
}
1170
 
 
1171
1280
static EContact *
1172
1281
put_document (EBookBackendCouchDB *couchdb_backend, CouchdbDocument *document, GError **error)
1173
1282
{
1196
1305
e_book_backend_couchdb_create_contact (EBookBackend *backend,
1197
1306
                                       EDataBook *book,
1198
1307
                                       guint32 opid,
 
1308
#if EDS_CHECK_VERSION(3, 1, 2)
 
1309
                                       GCancellable *cancellable,
 
1310
#endif
1199
1311
                                       const char *vcard)
1200
1312
{
1201
1313
        EContact *contact, *new_contact;
1231
1343
e_book_backend_couchdb_remove_contacts (EBookBackend *backend,
1232
1344
                                        EDataBook *book,
1233
1345
                                        guint32 opid,
 
1346
#if EDS_CHECK_VERSION(3, 1, 2)
 
1347
                                        GCancellable *cancellable,
 
1348
                                        const GSList *id_list)
 
1349
#else
1234
1350
                                        GList *id_list)
 
1351
#endif
1235
1352
{
 
1353
#if EDS_CHECK_VERSION(3, 1, 2)
 
1354
        const GSList *l;
 
1355
        GSList *deleted_ids = NULL;
 
1356
#else
1236
1357
        GList *l, *deleted_ids = NULL;
 
1358
#endif
1237
1359
        GError *error = NULL;
1238
1360
        EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
1239
1361
 
1267
1389
 
1268
1390
                                /* Now put the new revision of the document */
1269
1391
                                if (couchdb_database_put_document (couchdb_backend->database, document, &error)) {
 
1392
                                        #if EDS_CHECK_VERSION(3, 1, 2)
 
1393
                                        deleted_ids = g_slist_append (deleted_ids, (gpointer) uid);
 
1394
                                        #else
1270
1395
                                        deleted_ids = g_list_append (deleted_ids, (gpointer) uid);
 
1396
                                        #endif
1271
1397
                                        e_book_backend_cache_remove_contact (couchdb_backend->cache, uid);
1272
1398
                                } else {
1273
1399
                                        if (error != NULL)
1284
1410
                                g_object_unref (private_annotations);
1285
1411
                        } else {
1286
1412
                                if (couchdb_database_delete_document (couchdb_backend->database, document, &error)) {
 
1413
                                        #if EDS_CHECK_VERSION(3, 1, 2)
 
1414
                                        deleted_ids = g_slist_append (deleted_ids, (gpointer) uid);
 
1415
                                        #else
1287
1416
                                        deleted_ids = g_list_append (deleted_ids, (gpointer) uid);
 
1417
                                        #endif
1288
1418
                                        e_book_backend_cache_remove_contact (couchdb_backend->cache, uid);
1289
1419
                                        g_hash_table_remove (couchdb_backend->revisions, uid);
1290
1420
                                } else {
1313
1443
                e_data_book_respond_remove_contacts (book, opid,
1314
1444
                                                     GNOME_Evolution_Addressbook_Success, deleted_ids);
1315
1445
#endif
 
1446
                #if EDS_CHECK_VERSION(3, 1, 2)
 
1447
                g_slist_free (deleted_ids);
 
1448
                #else
1316
1449
                g_list_free (deleted_ids);
 
1450
                #endif
1317
1451
        } else {
1318
1452
#if EDS_CHECK_VERSION(2, 31, 0)
1319
1453
                if (error == NULL)
1330
1464
e_book_backend_couchdb_modify_contact (EBookBackend *backend,
1331
1465
                                       EDataBook *book,
1332
1466
                                       guint32 opid,
 
1467
#if EDS_CHECK_VERSION(3, 1, 2)
 
1468
                                       GCancellable *cancellable,
 
1469
#endif
1333
1470
                                       const char *vcard)
1334
1471
{
1335
1472
        EContact *contact, *new_contact;
1365
1502
e_book_backend_couchdb_get_contact (EBookBackend *backend,
1366
1503
                                    EDataBook *book,
1367
1504
                                    guint32 opid,
 
1505
#if EDS_CHECK_VERSION(3, 1, 2)
 
1506
                                    GCancellable *cancellable,
 
1507
#endif
1368
1508
                                    const char *id)
1369
1509
{
1370
1510
        EContact *contact;
1402
1542
static void
1403
1543
e_book_backend_couchdb_get_contact_list (EBookBackend *backend,
1404
1544
                                         EDataBook *book,
1405
 
                                         guint32 opid, const char *query)
 
1545
                                         guint32 opid,
 
1546
#if EDS_CHECK_VERSION(3, 1, 2)
 
1547
                                         GCancellable *cancellable,
 
1548
#endif
 
1549
                                         const char *query)
1406
1550
{
1407
 
        GList *doc_list, *contacts = NULL;
 
1551
        GList *doc_list;
 
1552
#if EDS_CHECK_VERSION(3, 1, 2)
 
1553
        GSList *contacts = NULL;
 
1554
#else
 
1555
        GList *contacts = NULL;
 
1556
#endif
1408
1557
        EBookBackendCouchDB *couchdb_backend = E_BOOK_BACKEND_COUCHDB (backend);
1409
1558
 
1410
1559
        /* Get the list of documents from cache */
1414
1563
                EContact *contact = E_CONTACT (doc_list->data);
1415
1564
 
1416
1565
                vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
1417
 
                if (vcard != NULL)
 
1566
                if (vcard != NULL) {
 
1567
                        #if EDS_CHECK_VERSION(3, 1, 2)
 
1568
                        contacts = g_slist_prepend (contacts, vcard);
 
1569
                        #else
1418
1570
                        contacts = g_list_prepend (contacts, vcard);
 
1571
                        #endif
 
1572
                }
1419
1573
 
1420
1574
                doc_list = g_list_remove (doc_list, contact);
1421
1575
                g_object_unref (G_OBJECT (contact));
1426
1580
#else
1427
1581
        e_data_book_respond_get_contact_list (book, opid, GNOME_Evolution_Addressbook_Success, contacts);
1428
1582
#endif
 
1583
        #if EDS_CHECK_VERSION(3, 1, 2)
 
1584
        g_slist_foreach (contacts, (GFunc) g_free, NULL);
 
1585
        g_slist_free (contacts);
 
1586
        #else
 
1587
        g_list_free (contacts);
 
1588
        #endif
1429
1589
}
1430
1590
 
1431
1591
static void
1468
1628
        e_book_backend_remove_book_view (backend, book_view);
1469
1629
}
1470
1630
 
 
1631
#if EDS_CHECK_VERSION(3, 1, 2)
 
1632
static void
 
1633
e_book_backend_couchdb_authenticate_user (EBookBackend *backend,
 
1634
                                          GCancellable *cancellable,
 
1635
                                          ECredentials *credentials)
 
1636
{
 
1637
}
 
1638
 
 
1639
static void
 
1640
e_book_backend_couchdb_get_backend_property (EBookBackend *backend,
 
1641
                                             EDataBook *book,
 
1642
                                             guint32 opid,
 
1643
                                             GCancellable *cancellable,
 
1644
                                             const gchar *prop_name)
 
1645
{
 
1646
        g_return_if_fail (backend != NULL);
 
1647
        g_return_if_fail (prop_name != NULL);
 
1648
 
 
1649
        if (g_str_equal (prop_name, CLIENT_BACKEND_PROPERTY_CAPABILITIES)) {
 
1650
                e_data_book_respond_get_backend_property (book, opid, NULL, "local,do-initial-query,bulk-removes");
 
1651
        } else if (g_str_equal (prop_name, BOOK_BACKEND_PROPERTY_REQUIRED_FIELDS)) {
 
1652
                e_data_book_respond_get_backend_property (book, opid, NULL, e_contact_field_name (E_CONTACT_GIVEN_NAME));
 
1653
        } else if (g_str_equal (prop_name, BOOK_BACKEND_PROPERTY_SUPPORTED_FIELDS)) {
 
1654
                gint ii;
 
1655
                gchar *value;
 
1656
                GSList *fields = NULL;
 
1657
 
 
1658
                for (ii = 0; ii < G_N_ELEMENTS (supported_fields); ii++) {
 
1659
                        fields = g_slist_prepend (fields, (gpointer) e_contact_field_name (supported_fields[ii]));
 
1660
                }
 
1661
                fields = g_slist_reverse (fields);
 
1662
                value = e_data_book_string_slist_to_comma_string (fields);
 
1663
 
 
1664
                e_data_book_respond_get_backend_property (book, opid, NULL, value);
 
1665
 
 
1666
                g_slist_free (fields);
 
1667
                g_free (value);
 
1668
        } else if (g_str_equal (prop_name, BOOK_BACKEND_PROPERTY_SUPPORTED_AUTH_METHODS)) {
 
1669
                e_data_book_respond_get_backend_property (book, opid, NULL, "plain/password");
 
1670
        } else {
 
1671
                (* E_BOOK_BACKEND_CLASS (e_book_backend_couchdb_parent_class)->get_backend_property) (backend, book, opid, cancellable, prop_name);
 
1672
        }
 
1673
}
 
1674
 
 
1675
static void
 
1676
e_book_backend_couchdb_set_online (EBookBackend *backend, gboolean is_online)
 
1677
{
 
1678
}
 
1679
 
 
1680
#else /* EDS_CHECK_VERSION(3, 1, 2) */
 
1681
static char *
 
1682
e_book_backend_couchdb_get_static_capabilities (EBookBackend *backend)
 
1683
{
 
1684
        return g_strdup ("local,do-initial-query,bulk-removes");
 
1685
}
 
1686
 
1471
1687
static void
1472
1688
e_book_backend_couchdb_get_changes (EBookBackend *backend,
1473
1689
                                    EDataBook *book,
1514
1730
                                             guint32 opid)
1515
1731
{
1516
1732
        GList *fields = NULL;
1517
 
 
1518
 
        /* Basic fields */
1519
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_UID)));
1520
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_GIVEN_NAME)));
1521
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_FAMILY_NAME)));
1522
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_FULL_NAME)));
1523
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_NAME)));
1524
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_NICKNAME)));
1525
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_SPOUSE)));
1526
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_BIRTH_DATE)));
1527
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_ANNIVERSARY)));
1528
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_NOTE)));
1529
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_CATEGORIES)));
1530
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_REV)));
1531
 
 
1532
 
        /* URLS */
1533
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_HOMEPAGE_URL)));
1534
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_BLOG_URL)));
1535
 
 
1536
 
        /* Company fields */
1537
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_ORG)));
1538
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_ORG_UNIT)));
1539
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_TITLE)));
1540
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_MANAGER)));
1541
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_ASSISTANT)));
1542
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_OFFICE)));
1543
 
 
1544
 
        /* Email addresses */
1545
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_EMAIL_1)));
1546
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_EMAIL_2)));
1547
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_EMAIL_3)));
1548
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_EMAIL_4)));
1549
 
 
1550
 
        /* Phone numbers */
1551
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_HOME)));
1552
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_HOME_FAX)));
1553
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_BUSINESS)));
1554
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_BUSINESS_FAX)));
1555
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_OTHER)));
1556
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_OTHER_FAX)));
1557
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_PAGER)));
1558
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_MOBILE)));
1559
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_ASSISTANT)));
1560
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_CALLBACK)));
1561
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_CAR)));
1562
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_PRIMARY)));
1563
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_RADIO)));
1564
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_TELEX)));
1565
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_PHONE_COMPANY)));
1566
 
 
1567
 
        /* Postal addresses */
1568
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_ADDRESS_HOME)));
1569
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_ADDRESS_WORK)));
1570
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_ADDRESS_OTHER)));
1571
 
 
1572
 
        /* IM addresses */
1573
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_AIM)));
1574
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_GADUGADU)));
1575
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_GROUPWISE)));
1576
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_ICQ)));
1577
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_JABBER)));
1578
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_MSN)));
1579
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_SKYPE)));
1580
 
        fields = g_list_append (fields, g_strdup (e_contact_field_name (E_CONTACT_IM_YAHOO)));
 
1733
        gint ii;
 
1734
 
 
1735
        for (ii = 0; ii < G_N_ELEMENTS (supported_fields); ii++) {
 
1736
                fields = g_list_prepend (fields, (gpointer) e_contact_field_name (supported_fields[ii]));
 
1737
        }
 
1738
        fields = g_list_reverse (fields);
1581
1739
 
1582
1740
#if EDS_CHECK_VERSION(2, 31, 0)
1583
1741
        e_data_book_respond_get_supported_fields (book, opid, NULL, fields);
1586
1744
                                                  GNOME_Evolution_Addressbook_Success, fields);
1587
1745
#endif
1588
1746
 
1589
 
        g_list_foreach (fields, (GFunc) g_free, NULL);
1590
1747
        g_list_free (fields);
1591
1748
}
1592
1749
 
1629
1786
#endif
1630
1787
{
1631
1788
}
 
1789
#endif /* else of EDS_CHECK_VERSION(3, 1, 2) */
1632
1790
 
1633
1791
/**
1634
1792
 * e_book_backend_couchdb_new:
1676
1834
 
1677
1835
        parent_class = E_BOOK_BACKEND_CLASS (klass);
1678
1836
 
 
1837
#if EDS_CHECK_VERSION(3, 1, 2)
 
1838
        parent_class->open                    = e_book_backend_couchdb_open;
 
1839
        parent_class->get_backend_property    = e_book_backend_couchdb_get_backend_property;
 
1840
        parent_class->set_online              = e_book_backend_couchdb_set_online;
 
1841
#else
1679
1842
        parent_class->load_source             = e_book_backend_couchdb_load_source;
1680
1843
        parent_class->get_static_capabilities = e_book_backend_couchdb_get_static_capabilities;
1681
 
 
 
1844
        parent_class->get_changes             = e_book_backend_couchdb_get_changes;
 
1845
        parent_class->get_required_fields     = e_book_backend_couchdb_get_required_fields;
 
1846
        parent_class->get_supported_fields    = e_book_backend_couchdb_get_supported_fields;
 
1847
        parent_class->get_supported_auth_methods = e_book_backend_couchdb_get_supported_auth_methods;
 
1848
        parent_class->cancel_operation        = e_book_backend_couchdb_cancel_operation;
 
1849
        parent_class->set_mode                = e_book_backend_couchdb_set_mode;
 
1850
#endif
1682
1851
        parent_class->create_contact          = e_book_backend_couchdb_create_contact;
1683
1852
        parent_class->remove_contacts         = e_book_backend_couchdb_remove_contacts;
1684
1853
        parent_class->modify_contact          = e_book_backend_couchdb_modify_contact;
1686
1855
        parent_class->get_contact_list        = e_book_backend_couchdb_get_contact_list;
1687
1856
        parent_class->start_book_view         = e_book_backend_couchdb_start_book_view;
1688
1857
        parent_class->stop_book_view          = e_book_backend_couchdb_stop_book_view;
1689
 
        parent_class->get_changes             = e_book_backend_couchdb_get_changes;
1690
1858
        parent_class->authenticate_user       = e_book_backend_couchdb_authenticate_user;
1691
 
        parent_class->get_required_fields     = e_book_backend_couchdb_get_required_fields;
1692
 
        parent_class->get_supported_fields    = e_book_backend_couchdb_get_supported_fields;
1693
 
        parent_class->get_supported_auth_methods = e_book_backend_couchdb_get_supported_auth_methods;
1694
 
        parent_class->cancel_operation        = e_book_backend_couchdb_cancel_operation;
1695
1859
        parent_class->remove                  = e_book_backend_couchdb_remove;
1696
 
        parent_class->set_mode                = e_book_backend_couchdb_set_mode;
1697
1860
 
1698
1861
        object_class->dispose                 = e_book_backend_couchdb_dispose;
1699
1862
}