~ubuntu-branches/ubuntu/oneiric/tracker/oneiric

« back to all changes in this revision

Viewing changes to src/plugins/evolution/tracker-evolution-plugin.c

  • Committer: Package Import Robot
  • Author(s): Michael Biebl
  • Date: 2011-08-26 00:26:14 UTC
  • mfrom: (4.3.17 sid)
  • Revision ID: package-import@ubuntu.com-20110826002614-4qjfs9jhh5gs4p13
Tags: 0.10.24-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
#include <mail/em-utils.h>
47
47
#include <mail/mail-ops.h>
48
48
 
 
49
#ifdef EVOLUTION_SHELL_3_2
 
50
#include <mail/e-mail.h>
 
51
#endif
 
52
 
49
53
#ifdef EVOLUTION_SHELL_2_91
50
54
#include <mail/e-mail-session.h>
51
55
#else
571
575
        }
572
576
}
573
577
 
574
 
static gchar*
575
 
convert_url_to_whatever (CamelURL    *a_url,
576
 
                         const gchar *path,
577
 
                         const gchar *uid)
 
578
static gchar *
 
579
message_uri_build (CamelFolder *folder,
 
580
                   const gchar *uid)
578
581
{
579
 
        CamelURL *url;
580
 
        gchar *uri, *qry, *ppath = g_strdup_printf ("/%s", path);
 
582
#ifdef EVOLUTION_SHELL_3_2
 
583
        gchar *uri, *folder_uri;
 
584
 
 
585
        folder_uri = e_mail_folder_uri_from_folder (folder);
 
586
        uri = g_strdup_printf ("%s#%s", folder_uri, uid);
 
587
        g_free (folder_uri);
 
588
 
 
589
        return uri;
 
590
#else
 
591
        CamelURL *a_url, *url;
 
592
        const gchar *path;
 
593
        gchar *uri, *qry, *ppath;
 
594
 
 
595
        a_url = CAMEL_SERVICE (camel_folder_get_parent_store (folder))->url;
 
596
        path = camel_folder_get_full_name (folder);
 
597
 
 
598
        ppath = g_strdup_printf ("/%s", path);
581
599
 
582
600
        /* This converts a CamelURL plus path and uid components to a Evolution
583
601
         * compatible URL. Evolution has its own strange URL format, so .. ok */
602
620
        camel_url_free (url);
603
621
 
604
622
        return uri;
 
623
#endif
605
624
}
606
625
 
607
626
/* When new messages arrive to- or got deleted from the summary, called in
618
637
        OnSummaryChangedInfo *info = user_data;
619
638
        CamelFolderSummary *summary;
620
639
        GPtrArray *merged;
621
 
        CamelURL *a_url;
622
640
        gboolean did_work;
623
641
        guint i;
624
642
 
627
645
 
628
646
        summary = folder->summary;
629
647
 
630
 
        a_url = CAMEL_SERVICE (camel_folder_get_parent_store (folder))->url;
631
 
 
632
648
        merged = g_ptr_array_new ();
633
649
        did_work = FALSE;
634
650
 
698
714
                        /* This is not a path but a URI, don't use the
699
715
                         * OS's directory separator here */
700
716
 
701
 
                        uri = convert_url_to_whatever (a_url, camel_folder_get_full_name (folder), uid);
 
717
                        uri = message_uri_build (folder, uid);
702
718
 
703
719
                        sparql = tracker_sparql_builder_new_update ();
704
720
 
774
790
                        g_debug ("Tracker plugin setting progress to '%2.2f' and status to 'Updating an E-mail'",
775
791
                                 (gdouble) i / merged->len);
776
792
 
 
793
#ifdef EVOLUTION_SHELL_3_2
 
794
                        folder_name = camel_folder_get_display_name (folder);
 
795
#else
777
796
                        folder_name = camel_folder_get_name (folder);
 
797
#endif
778
798
 
779
799
                        if (folder_name && *folder_name) {
780
800
                                str = g_strdup_printf ("Updating E-mails for %s",
821
841
 
822
842
                        /* This is not a path but a URI, don't use the OS's
823
843
                         * directory separator here */
824
 
                        uri = convert_url_to_whatever (a_url, camel_folder_get_full_name (folder), (char*) changes->uid_removed->pdata[i]);
 
844
                        uri = message_uri_build (folder, (char*) changes->uid_removed->pdata[i]);
825
845
 
826
846
                        g_string_append_printf (sparql, "DELETE FROM <%s> { <%s> a rdfs:Resource }\n ", uri, uri);
827
847
                        g_free (uri);
870
890
                                  GCancellable          *cancel)
871
891
{
872
892
        TrackerMinerEvolutionPrivate *priv = TRACKER_MINER_EVOLUTION_GET_PRIVATE (self);
873
 
        CamelURL *a_url;
874
893
        CamelDB *cdb_r;
875
894
        gboolean did_work;
876
895
 
879
898
        }
880
899
 
881
900
        cdb_r = camel_db_clone (store->cdb_r, NULL);
882
 
        a_url = CAMEL_SERVICE (store)->url;
883
901
        did_work = FALSE;
884
902
 
885
903
        while (iter) {
897
915
                                         iter->full_name,
898
916
                                         info->last_checkout);
899
917
 
 
918
#ifdef EVOLUTION_SHELL_3_2
 
919
                status = g_strdup_printf ("Processing folder %s", iter->display_name);
 
920
#else
900
921
                status = g_strdup_printf ("Processing folder %s", iter->name);
 
922
#endif
901
923
                g_object_set (self,  "progress", 0.01, "status", status, NULL);
902
924
 
903
925
                ret = sqlite3_prepare_v2 (cdb_r->db, query, -1, &stmt, NULL);
997
1019
 
998
1020
                                        folder = g_hash_table_lookup (priv->cached_folders, iter->full_name);
999
1021
 
1000
 
                                        uri = convert_url_to_whatever (a_url, iter->full_name, uid);
 
1022
                                        uri = message_uri_build (folder, uid);
1001
1023
 
1002
1024
                                        if (!sparql) {
1003
1025
                                                sparql = tracker_sparql_builder_new_update ();
1147
1169
                                   char                  *account_uri,
1148
1170
                                   gpointer               user_data)
1149
1171
{
 
1172
        TrackerMinerEvolutionPrivate *priv = TRACKER_MINER_EVOLUTION_GET_PRIVATE (self);
1150
1173
        ClientRegistry *info = user_data;
1151
1174
        gboolean more = TRUE;
1152
1175
        gchar *query;
1153
1176
        sqlite3_stmt *stmt = NULL;
1154
1177
        CamelDB *cdb_r;
1155
1178
        guint i, ret;
1156
 
        CamelURL *a_url;
1157
 
 
1158
 
        a_url = CAMEL_SERVICE (store)->url;
1159
1179
 
1160
1180
        query = sqlite3_mprintf ("SELECT uid, mailbox "
1161
1181
                                 "FROM Deletes "
1176
1196
                more = FALSE;
1177
1197
 
1178
1198
                while (ret == SQLITE_OK || ret == SQLITE_BUSY || ret == SQLITE_ROW) {
 
1199
                        CamelFolder *folder;
1179
1200
                        const gchar *uid;
1180
1201
                        const gchar *mailbox;
1181
1202
 
1194
1215
                        uid     = (const gchar *) sqlite3_column_text (stmt, 0);
1195
1216
                        mailbox = (const gchar *) sqlite3_column_text (stmt, 1);
1196
1217
 
 
1218
                        folder = g_hash_table_lookup (priv->cached_folders, mailbox);
 
1219
 
 
1220
 
1197
1221
                        /* This is not a path but a URI, don't use the OS's
1198
1222
                         * directory separator here */
1199
1223
 
1200
1224
                        g_ptr_array_add (subjects_a,
1201
 
                                         convert_url_to_whatever (a_url, mailbox, uid));
 
1225
                                         message_uri_build (folder, uid));
1202
1226
 
1203
1227
                        if (count > 100) {
1204
1228
                                more = TRUE;
1276
1300
                        }
1277
1301
 
1278
1302
                        if (!(store = (CamelStore *) camel_session_get_service (CAMEL_SESSION (session),
 
1303
#ifdef EVOLUTION_SHELL_3_2
 
1304
                                                                                account->uid))) {
 
1305
#else
1279
1306
                                                                                uri,
1280
1307
                                                                                CAMEL_PROVIDER_STORE,
1281
1308
                                                                                NULL))) {
 
1309
#endif
1282
1310
                                continue;
1283
1311
                        }
1284
1312
 
1312
1340
        return smallest;
1313
1341
}
1314
1342
 
 
1343
#ifdef EVOLUTION_SHELL_3_2
 
1344
static void
 
1345
register_on_get_folder (GObject      *source_object,
 
1346
                        GAsyncResult *res,
 
1347
                        gpointer      user_data)
 
1348
{
 
1349
        CamelFolder *folder = camel_store_get_folder_finish (CAMEL_STORE (source_object), res, NULL);
 
1350
#else
1315
1351
static void
1316
1352
register_on_get_folder (gchar       *uri,
1317
1353
                        CamelFolder *folder,
1318
1354
                        gpointer     user_data)
1319
1355
{
 
1356
#endif
1320
1357
        GetFolderInfo *info = user_data;
1321
1358
        gchar *account_uri = info->account_uri;
1322
1359
        CamelFolderInfo *iter = info->iter;
1391
1428
                /* This is asynchronous and hooked to the mail/ API, so nicely
1392
1429
                 * integrated with the Evolution UI application */
1393
1430
 
 
1431
#ifdef EVOLUTION_SHELL_3_2
 
1432
                camel_store_get_folder (store,
 
1433
                                        iter->full_name,
 
1434
                                        0,
 
1435
                                        0,
 
1436
                                        NULL,
 
1437
                                        register_on_get_folder,
 
1438
                                        info);
 
1439
#else
1394
1440
                mail_get_folder (
1395
1441
#ifdef EVOLUTION_SHELL_2_91
1396
1442
                                 session,
1400
1446
                                 register_on_get_folder,
1401
1447
                                 info,
1402
1448
                                 mail_msg_unordered_push);
 
1449
#endif
1403
1450
 
1404
1451
                if (iter->child) {
1405
1452
                        register_walk_folders_in_folder (self, iter->child,
1411
1458
        }
1412
1459
}
1413
1460
 
 
1461
#ifdef EVOLUTION_SHELL_3_2
 
1462
static void
 
1463
unregister_on_get_folder (GObject      *source_object,
 
1464
                          GAsyncResult *res,
 
1465
                          gpointer      user_data)
 
1466
{
 
1467
        CamelFolder *folder = camel_store_get_folder_finish (CAMEL_STORE (source_object), res, NULL);
 
1468
#else
1414
1469
static void
1415
1470
unregister_on_get_folder (gchar       *uri,
1416
1471
                          CamelFolder *folder,
1417
1472
                          gpointer     user_data)
1418
1473
{
 
1474
#endif
1419
1475
        GetFolderInfo *info = user_data;
1420
1476
        CamelFolderInfo *titer = info->iter;
1421
1477
        TrackerMinerEvolution *self = info->self;
1469
1525
                /* This is asynchronous and hooked to the mail/ API, so nicely
1470
1526
                 * integrated with the Evolution UI application */
1471
1527
 
 
1528
#ifdef EVOLUTION_SHELL_3_2
 
1529
                camel_store_get_folder (store,
 
1530
                                        titer->full_name,
 
1531
                                        0,
 
1532
                                        0,
 
1533
                                        NULL,
 
1534
                                        unregister_on_get_folder,
 
1535
                                        info);
 
1536
#else
1472
1537
                mail_get_folder (
1473
1538
#ifdef EVOLUTION_SHELL_2_91
1474
1539
                                 session,
1478
1543
                                 unregister_on_get_folder,
1479
1544
                                 info,
1480
1545
                                 mail_msg_unordered_push);
 
1546
#endif
1481
1547
 
1482
1548
                if (titer->child) {
1483
1549
                        unregister_walk_folders_in_folder (self, titer->child,
1569
1635
        return TRUE;
1570
1636
}
1571
1637
 
 
1638
#ifdef EVOLUTION_SHELL_3_2
 
1639
static void
 
1640
on_got_folderinfo_introduce (GObject      *source_object,
 
1641
                             GAsyncResult *res,
 
1642
                             gpointer      data)
 
1643
{
 
1644
        CamelStore *store = CAMEL_STORE (source_object);
 
1645
        CamelFolderInfo *iter = camel_store_get_folder_info_finish (store, res, NULL);
 
1646
#else
1572
1647
static gboolean
1573
1648
on_got_folderinfo_introduce (CamelStore      *store,
1574
1649
                             CamelFolderInfo *iter,
1575
1650
                             void            *data)
1576
1651
{
 
1652
#endif
1577
1653
        TryAgainInfo *info = g_new0 (TryAgainInfo, 1);
1578
1654
 
1579
1655
        /* Ownership of these is transfered in try_again */
1610
1686
                g_free (info);
1611
1687
        }
1612
1688
 
 
1689
#ifdef EVOLUTION_SHELL_3_2
 
1690
        camel_store_free_folder_info (store, iter);
 
1691
#else
1613
1692
        return TRUE;
 
1693
#endif
1614
1694
}
1615
1695
 
1616
1696
static void
1634
1714
                return;
1635
1715
 
1636
1716
        if (!(store = (CamelStore *) camel_session_get_service (CAMEL_SESSION (session),
 
1717
#ifdef EVOLUTION_SHELL_3_2
 
1718
                                                                account->uid))) {
 
1719
#else
1637
1720
                                                                uri,
1638
1721
                                                                CAMEL_PROVIDER_STORE,
1639
1722
                                                                NULL))) {
 
1723
#endif
1640
1724
                return;
1641
1725
        }
1642
1726
 
1655
1739
        intro_info->info = client_registry_info_copy (info);
1656
1740
        intro_info->account_uri = account_uri; /* is freed in on_got above */
1657
1741
 
 
1742
#ifdef EVOLUTION_SHELL_3_2
 
1743
        camel_store_get_folder_info (store,
 
1744
                                     NULL,
 
1745
                                     CAMEL_STORE_FOLDER_INFO_FAST |
 
1746
                                     CAMEL_STORE_FOLDER_INFO_RECURSIVE |
 
1747
                                     CAMEL_STORE_FOLDER_INFO_SUBSCRIBED,
 
1748
                                     G_PRIORITY_DEFAULT,
 
1749
                                     NULL,
 
1750
                                     on_got_folderinfo_introduce,
 
1751
                                     intro_info);
 
1752
#else
1658
1753
        mail_get_folderinfo (store, NULL, on_got_folderinfo_introduce, intro_info);
 
1754
#endif
1659
1755
 
1660
1756
        g_object_unref (store);
1661
1757
 
1856
1952
}
1857
1953
 
1858
1954
 
 
1955
#ifdef EVOLUTION_SHELL_3_2
 
1956
static void
 
1957
on_got_folderinfo_register (GObject      *source_object,
 
1958
                            GAsyncResult *res,
 
1959
                            gpointer      data)
 
1960
{
 
1961
        CamelStore *store = CAMEL_STORE (source_object);
 
1962
        CamelFolderInfo *iter = camel_store_get_folder_info_finish (store, res, NULL);
 
1963
#else
1859
1964
static gboolean
1860
1965
on_got_folderinfo_register (CamelStore      *store,
1861
1966
                            CamelFolderInfo *iter,
1862
1967
                            void            *data)
1863
1968
{
 
1969
#endif
1864
1970
        RegisterInfo *reg_info = data;
1865
1971
        TrackerMinerEvolution *self = reg_info->self;
1866
1972
        TrackerMinerEvolutionPrivate *priv;
1917
2023
 
1918
2024
        walk_count--;
1919
2025
 
 
2026
#ifdef EVOLUTION_SHELL_3_2
 
2027
        camel_store_free_folder_info (store, iter);
 
2028
#else
1920
2029
        return TRUE;
 
2030
#endif
1921
2031
}
1922
2032
 
1923
2033
static void
1942
2052
        }
1943
2053
 
1944
2054
        if (!(store = (CamelStore *) camel_session_get_service (CAMEL_SESSION (session),
 
2055
#ifdef EVOLUTION_SHELL_3_2
 
2056
                                                                account->uid))) {
 
2057
#else
1945
2058
                                                                uri,
1946
2059
                                                                CAMEL_PROVIDER_STORE,
1947
2060
                                                                NULL))) {
 
2061
#endif
1948
2062
                return;
1949
2063
        }
1950
2064
 
1957
2071
        walk_count++;
1958
2072
 
1959
2073
        /* Get the account's folder-info and register it asynchronously */
 
2074
#ifdef EVOLUTION_SHELL_3_2
 
2075
        camel_store_get_folder_info (store,
 
2076
                                     NULL,
 
2077
                                     CAMEL_STORE_FOLDER_INFO_FAST |
 
2078
                                     CAMEL_STORE_FOLDER_INFO_RECURSIVE |
 
2079
                                     CAMEL_STORE_FOLDER_INFO_SUBSCRIBED,
 
2080
                                     G_PRIORITY_DEFAULT,
 
2081
                                     NULL,
 
2082
                                     on_got_folderinfo_register,
 
2083
                                     reg_info);
 
2084
#else
1960
2085
        mail_get_folderinfo (store, NULL, on_got_folderinfo_register, reg_info);
 
2086
#endif
1961
2087
 
1962
2088
        g_object_unref (store);
1963
2089
}
1964
2090
 
 
2091
#ifdef EVOLUTION_SHELL_3_2
 
2092
static void
 
2093
on_got_folderinfo_unregister (GObject      *source_object,
 
2094
                              GAsyncResult *res,
 
2095
                              gpointer      data)
 
2096
{
 
2097
        CamelStore *store = CAMEL_STORE (source_object);
 
2098
        CamelFolderInfo *titer = camel_store_get_folder_info_finish (store, res, NULL);
 
2099
#else
1965
2100
static gboolean
1966
2101
on_got_folderinfo_unregister (CamelStore      *store,
1967
2102
                              CamelFolderInfo *titer,
1968
2103
                              void            *data)
1969
2104
{
 
2105
#endif
1970
2106
        RegisterInfo *reg_info = data;
1971
2107
        TrackerMinerEvolution *self = reg_info->self;
1972
2108
        TrackerMinerEvolutionPrivate *priv;
1990
2126
        g_free (reg_info->uri);
1991
2127
        g_free (reg_info);
1992
2128
 
 
2129
#ifdef EVOLUTION_SHELL_3_2
 
2130
        camel_store_free_folder_info (store, titer);
 
2131
#else
1993
2132
        return TRUE;
 
2133
#endif
1994
2134
}
1995
2135
 
1996
2136
static void
2010
2150
                return;
2011
2151
 
2012
2152
        if (!(store = (CamelStore *) camel_session_get_service (CAMEL_SESSION (session),
 
2153
#ifdef EVOLUTION_SHELL_3_2
 
2154
                                                                account->uid))) {
 
2155
#else
2013
2156
                                                                uri,
2014
2157
                                                                CAMEL_PROVIDER_STORE,
2015
2158
                                                                NULL))) {
 
2159
#endif
2016
2160
                return;
2017
2161
        }
2018
2162
 
2023
2167
        reg_info->account = NULL;
2024
2168
 
2025
2169
        /* Get the account's folder-info and unregister asynchronously */
 
2170
#ifdef EVOLUTION_SHELL_3_2
 
2171
        camel_store_get_folder_info (store,
 
2172
                                     NULL,
 
2173
                                     CAMEL_STORE_FOLDER_INFO_FAST |
 
2174
                                     CAMEL_STORE_FOLDER_INFO_RECURSIVE |
 
2175
                                     CAMEL_STORE_FOLDER_INFO_SUBSCRIBED,
 
2176
                                     G_PRIORITY_DEFAULT,
 
2177
                                     NULL,
 
2178
                                     on_got_folderinfo_unregister,
 
2179
                                     reg_info);
 
2180
#else
2026
2181
        mail_get_folderinfo (store, NULL, on_got_folderinfo_unregister, reg_info);
 
2182
#endif
2027
2183
 
2028
2184
        g_object_unref (store);
2029
2185
}