~ubuntu-branches/ubuntu/saucy/evolution-data-server/saucy

« back to all changes in this revision

Viewing changes to camel/camel-vee-data-cache.c

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-10-08 12:58:16 UTC
  • mfrom: (181.1.7 quantal)
  • Revision ID: package-import@ubuntu.com-20121008125816-i3n76e8c0m64e7xp
Tags: 3.6.0-0ubuntu2
* Fix LP: #1038047 part 1 - Don't abort in e_source_registry_new* when a
  problem occurs connecting to the Dbus service
  - add debian/patches/dont-abort-in-e_source_registry_new.patch
  - update debian/patches/series
* Fix LP: #1038047 part 2 - libedataserver depends on
  evolution-data-server-common to ensure that the GSettings schemas are
  present
  - update debian/control

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
#include "camel-vee-data-cache.h"
29
29
 
30
 
struct _CamelVeeSubfolderDataPrivate
31
 
{
 
30
struct _CamelVeeSubfolderDataPrivate {
32
31
        CamelFolder *folder;
33
32
        const gchar *folder_id; /* stored in string pool */
34
33
};
111
110
        }
112
111
}
113
112
 
 
113
/**
 
114
 * camel_vee_subfolder_data_new:
 
115
 *
 
116
 * FIXME Document me!
 
117
 *
 
118
 * Since: 3.6
 
119
 **/
114
120
CamelVeeSubfolderData *
115
121
camel_vee_subfolder_data_new (CamelFolder *folder)
116
122
{
130
136
        return data;
131
137
}
132
138
 
 
139
/**
 
140
 * camel_vee_subfolder_data_get_folder:
 
141
 *
 
142
 * FIXME Document me!
 
143
 *
 
144
 * Since: 3.6
 
145
 **/
133
146
CamelFolder *
134
147
camel_vee_subfolder_data_get_folder (CamelVeeSubfolderData *data)
135
148
{
138
151
        return data->priv->folder;
139
152
}
140
153
 
 
154
/**
 
155
 * camel_vee_subfolder_data_get_folder_id:
 
156
 *
 
157
 * FIXME Document me!
 
158
 *
 
159
 * Since: 3.6
 
160
 **/
141
161
const gchar *
142
162
camel_vee_subfolder_data_get_folder_id (CamelVeeSubfolderData *data)
143
163
{
148
168
 
149
169
/* ----------------------------------------------------------------------- */
150
170
 
151
 
struct _CamelVeeMessageInfoDataPrivate
152
 
{
 
171
struct _CamelVeeMessageInfoDataPrivate {
153
172
        CamelVeeSubfolderData *subfolder_data;
154
173
        const gchar *orig_message_uid; /* stored in string pool */
155
174
        const gchar *vee_message_uid; /* stored in string pool */
198
217
        data->priv = G_TYPE_INSTANCE_GET_PRIVATE (data, CAMEL_TYPE_VEE_MESSAGE_INFO_DATA, CamelVeeMessageInfoDataPrivate);
199
218
}
200
219
 
 
220
/**
 
221
 * camel_vee_message_info_data_new:
 
222
 *
 
223
 * FIXME Document me!
 
224
 *
 
225
 * Since: 3.6
 
226
 **/
201
227
CamelVeeMessageInfoData *
202
228
camel_vee_message_info_data_new (CamelVeeSubfolderData *subfolder_data,
203
229
                                 const gchar *orig_message_uid)
219
245
        return data;
220
246
}
221
247
 
 
248
/**
 
249
 * camel_vee_message_info_data_get_subfolder_data:
 
250
 *
 
251
 * FIXME Document me!
 
252
 *
 
253
 * Since: 3.6
 
254
 **/
222
255
CamelVeeSubfolderData *
223
256
camel_vee_message_info_data_get_subfolder_data (CamelVeeMessageInfoData *data)
224
257
{
227
260
        return data->priv->subfolder_data;
228
261
}
229
262
 
 
263
/**
 
264
 * camel_vee_message_info_data_get_orig_message_uid:
 
265
 *
 
266
 * FIXME Document me!
 
267
 *
 
268
 * Since: 3.6
 
269
 **/
230
270
const gchar *
231
271
camel_vee_message_info_data_get_orig_message_uid (CamelVeeMessageInfoData *data)
232
272
{
235
275
        return data->priv->orig_message_uid;
236
276
}
237
277
 
 
278
/**
 
279
 * camel_vee_message_info_data_get_vee_message_uid:
 
280
 *
 
281
 * FIXME Document me!
 
282
 *
 
283
 * Since: 3.6
 
284
 **/
238
285
const gchar *
239
286
camel_vee_message_info_data_get_vee_message_uid (CamelVeeMessageInfoData *data)
240
287
{
245
292
 
246
293
/* ----------------------------------------------------------------------- */
247
294
 
248
 
struct _CamelVeeDataCachePrivate
249
 
{
 
295
struct _CamelVeeDataCachePrivate {
250
296
        GMutex *sf_mutex; /* guards subfolder_hash */
251
297
        GHashTable *subfolder_hash; /* CamelFolder * => CamelVeeSubfolderData * */
252
298
 
257
303
 
258
304
G_DEFINE_TYPE (CamelVeeDataCache, camel_vee_data_cache, G_TYPE_OBJECT)
259
305
 
260
 
typedef struct _VeeData
261
 
{
 
306
typedef struct _VeeData {
262
307
        CamelFolder *folder;
263
308
        const gchar *orig_message_uid;
264
309
} VeeData;
346
391
        data_cache->priv->vee_message_uid_hash = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL);
347
392
}
348
393
 
 
394
/**
 
395
 * camel_vee_data_cache_new:
 
396
 *
 
397
 * FIXME Document me!
 
398
 *
 
399
 * Since: 3.6
 
400
 **/
349
401
CamelVeeDataCache *
350
402
camel_vee_data_cache_new (void)
351
403
{
352
404
        return g_object_new (CAMEL_TYPE_VEE_DATA_CACHE, NULL);
353
405
}
354
406
 
 
407
/**
 
408
 * camel_vee_data_cache_add_subfolder:
 
409
 *
 
410
 * FIXME Document me!
 
411
 *
 
412
 * Since: 3.6
 
413
 **/
355
414
void
356
415
camel_vee_data_cache_add_subfolder (CamelVeeDataCache *data_cache,
357
416
                                    CamelFolder *subfolder)
397
456
                                        hash_data->orig_message_uid = camel_vee_message_info_data_get_orig_message_uid (mi_data);
398
457
 
399
458
                                        g_hash_table_insert (data_cache->priv->orig_message_uid_hash, hash_data, mi_data);
400
 
                                        g_hash_table_insert (data_cache->priv->vee_message_uid_hash,
 
459
                                        g_hash_table_insert (
 
460
                                                data_cache->priv->vee_message_uid_hash,
401
461
                                                (gpointer) camel_vee_message_info_data_get_vee_message_uid (mi_data),
402
462
                                                mi_data);
403
463
                                }
440
500
        return vee_data && vee_data->folder == folder;
441
501
}
442
502
 
 
503
/**
 
504
 * camel_vee_data_cache_remove_subfolder:
 
505
 *
 
506
 * FIXME Document me!
 
507
 *
 
508
 * Since: 3.6
 
509
 **/
443
510
void
444
511
camel_vee_data_cache_remove_subfolder (CamelVeeDataCache *data_cache,
445
512
                                       CamelFolder *subfolder)
458
525
        g_mutex_unlock (data_cache->priv->mi_mutex);
459
526
}
460
527
 
 
528
/**
 
529
 * camel_vee_data_cache_get_subfolder_data:
 
530
 *
 
531
 * FIXME Document me!
 
532
 *
 
533
 * Since: 3.6
 
534
 **/
461
535
CamelVeeSubfolderData *
462
536
camel_vee_data_cache_get_subfolder_data (CamelVeeDataCache *data_cache,
463
537
                                         CamelFolder *folder)
482
556
        return res;
483
557
}
484
558
 
 
559
/**
 
560
 * camel_vee_data_cache_contains_message_info_data:
 
561
 *
 
562
 * Returns whether data_cache contains certain UID for certain folder;
 
563
 * instead of camel_vee_data_cache_get_message_info_data() only
 
564
 * returns FALSE if not, while camel_vee_data_cache_get_message_info_data()
 
565
 * auto-adds it to data_cache.
 
566
 *
 
567
 * Since: 3.6
 
568
 */
 
569
gboolean
 
570
camel_vee_data_cache_contains_message_info_data (CamelVeeDataCache *data_cache,
 
571
                                                 CamelFolder *folder,
 
572
                                                 const gchar *orig_message_uid)
 
573
{
 
574
        gboolean res;
 
575
        VeeData vdata;
 
576
 
 
577
        g_return_val_if_fail (CAMEL_IS_VEE_DATA_CACHE (data_cache), FALSE);
 
578
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
 
579
        g_return_val_if_fail (orig_message_uid != NULL, FALSE);
 
580
 
 
581
        g_mutex_lock (data_cache->priv->mi_mutex);
 
582
 
 
583
        /* make sure the orig_message_uid comes from the string pool */
 
584
        vdata.folder = folder;
 
585
        vdata.orig_message_uid = camel_pstring_strdup (orig_message_uid);
 
586
 
 
587
        res = g_hash_table_lookup (data_cache->priv->orig_message_uid_hash, &vdata) != NULL;
 
588
 
 
589
        camel_pstring_free (vdata.orig_message_uid);
 
590
 
 
591
        g_mutex_unlock (data_cache->priv->mi_mutex);
 
592
 
 
593
        return res;
 
594
}
 
595
 
 
596
/**
 
597
 * camel_vee_data_cache_get_message_info_data:
 
598
 *
 
599
 * FIXME Document me!
 
600
 *
 
601
 * Since: 3.6
 
602
 **/
485
603
CamelVeeMessageInfoData *
486
604
camel_vee_data_cache_get_message_info_data (CamelVeeDataCache *data_cache,
487
605
                                            CamelFolder *folder,
523
641
                hash_data->orig_message_uid = camel_vee_message_info_data_get_orig_message_uid (res);
524
642
 
525
643
                g_hash_table_insert (data_cache->priv->orig_message_uid_hash, hash_data, res);
526
 
                g_hash_table_insert (data_cache->priv->vee_message_uid_hash,
 
644
                g_hash_table_insert (
 
645
                        data_cache->priv->vee_message_uid_hash,
527
646
                        (gpointer) camel_vee_message_info_data_get_vee_message_uid (res),
528
647
                        res);
529
648
        }
536
655
        return res;
537
656
}
538
657
 
 
658
/**
 
659
 * camel_vee_data_cache_get_message_info_data_by_vuid:
 
660
 *
 
661
 * FIXME Document me!
 
662
 *
 
663
 * Since: 3.6
 
664
 **/
539
665
CamelVeeMessageInfoData *
540
666
camel_vee_data_cache_get_message_info_data_by_vuid (CamelVeeDataCache *data_cache,
541
667
                                                    const gchar *vee_message_uid)
562
688
        return res;
563
689
}
564
690
 
565
 
struct ForeachMiData
566
 
{
 
691
struct ForeachMiData {
567
692
        CamelFolder *fromfolder;
568
693
        void (* func) (CamelVeeMessageInfoData *mi_data,
569
694
                        CamelFolder *subfolder,
588
713
                fmd->func (mi_data, vdata->folder, fmd->user_data);
589
714
}
590
715
 
 
716
/**
 
717
 * camel_vee_data_cache_foreach_message_info_data:
 
718
 *
 
719
 * FIXME Document me!
 
720
 *
 
721
 * Since: 3.6
 
722
 **/
591
723
void
592
724
camel_vee_data_cache_foreach_message_info_data (CamelVeeDataCache *data_cache,
593
725
                                                CamelFolder *fromfolder,
612
744
        g_mutex_unlock (data_cache->priv->mi_mutex);
613
745
}
614
746
 
 
747
/**
 
748
 * camel_vee_data_cache_remove_message_info_data:
 
749
 *
 
750
 * FIXME Document me!
 
751
 *
 
752
 * Since: 3.6
 
753
 **/
615
754
void
616
755
camel_vee_data_cache_remove_message_info_data (CamelVeeDataCache *data_cache,
617
756
                                               CamelVeeMessageInfoData *mi_data)
625
764
 
626
765
        g_mutex_lock (data_cache->priv->mi_mutex);
627
766
 
 
767
        g_object_ref (mi_data);
 
768
 
628
769
        sf_data = camel_vee_message_info_data_get_subfolder_data (mi_data);
629
770
 
630
771
        vdata.folder = camel_vee_subfolder_data_get_folder (sf_data);
634
775
        g_hash_table_remove (data_cache->priv->vee_message_uid_hash, vuid);
635
776
        g_hash_table_remove (data_cache->priv->orig_message_uid_hash, &vdata);
636
777
 
 
778
        g_object_unref (mi_data);
 
779
 
637
780
        g_mutex_unlock (data_cache->priv->mi_mutex);
638
781
}