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

« back to all changes in this revision

Viewing changes to camel/providers/local/camel-maildir-store.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:
89
89
        /* This is a pretty hacky version of create folder, but should basically work */
90
90
 
91
91
        service = CAMEL_SERVICE (store);
92
 
        settings = camel_service_get_settings (service);
 
92
 
 
93
        settings = camel_service_ref_settings (service);
93
94
 
94
95
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
95
96
        path = camel_local_settings_dup_path (local_settings);
96
97
 
 
98
        g_object_unref (settings);
 
99
 
97
100
        if (!g_path_is_absolute (path)) {
98
101
                g_set_error (
99
102
                        error, CAMEL_STORE_ERROR,
107
110
                        error, CAMEL_STORE_ERROR,
108
111
                        CAMEL_STORE_ERROR_NO_FOLDER,
109
112
                        _("Cannot create folder: %s: "
110
 
                          "Folder name cannot contain a dot"),
 
113
                        "Folder name cannot contain a dot"),
111
114
                        folder_name);
112
115
                goto exit;
113
116
        }
122
125
 
123
126
        if (parent_name && *parent_name) {
124
127
                gchar *dir_name = maildir_full_name_to_dir_name (parent_name);
125
 
                name = g_strdup_printf("%s/%s.%s", path, dir_name, folder_name);
 
128
                name = g_strdup_printf ("%s/%s.%s", path, dir_name, folder_name);
126
129
                g_free (dir_name);
127
130
        } else
128
131
                name = maildir_full_name_to_dir_name (folder_name);
140
143
        name = NULL;
141
144
 
142
145
        if (parent_name && *parent_name)
143
 
                name = g_strdup_printf("%s/%s", parent_name, folder_name);
 
146
                name = g_strdup_printf ("%s/%s", parent_name, folder_name);
144
147
        else
145
 
                name = g_strdup_printf("%s", folder_name);
 
148
                name = g_strdup_printf ("%s", folder_name);
146
149
 
147
150
        folder = maildir_store_get_folder_sync (
148
151
                store, name, CAMEL_STORE_FOLDER_CREATE, cancellable, error);
176
179
        CamelFolder *folder = NULL;
177
180
 
178
181
        service = CAMEL_SERVICE (store);
179
 
        settings = camel_service_get_settings (service);
 
182
 
 
183
        settings = camel_service_ref_settings (service);
180
184
 
181
185
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
182
186
        path = camel_local_settings_dup_path (local_settings);
183
187
 
 
188
        g_object_unref (settings);
 
189
 
184
190
        folder_name = md_canon_name (folder_name);
185
191
        dir_name = maildir_full_name_to_dir_name (folder_name);
186
192
 
303
309
        }
304
310
 
305
311
        service = CAMEL_SERVICE (store);
306
 
        settings = camel_service_get_settings (service);
 
312
 
 
313
        settings = camel_service_ref_settings (service);
307
314
 
308
315
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
309
316
        path = camel_local_settings_dup_path (local_settings);
310
317
 
 
318
        g_object_unref (settings);
 
319
 
311
320
        /* maildir++ directory names start with a '.' */
312
321
        dir_name = maildir_full_name_to_dir_name (folder_name);
313
322
        name = g_build_filename (path, dir_name, NULL);
345
354
                                while ((d = readdir (dir))) {
346
355
                                        gchar *name = d->d_name, *file;
347
356
 
348
 
                                        if (!strcmp(name, ".") || !strcmp(name, ".."))
 
357
                                        if (!strcmp (name, ".") || !strcmp (name, ".."))
349
358
                                                continue;
350
 
                                        file = g_strdup_printf("%s/%s", tmp, name);
 
359
                                        file = g_strdup_printf ("%s/%s", tmp, name);
351
360
                                        unlink (file);
352
361
                                        g_free (file);
353
362
                                }
410
419
                gchar *root;
411
420
 
412
421
                service = CAMEL_SERVICE (store);
413
 
                settings = camel_service_get_settings (service);
 
422
 
 
423
                settings = camel_service_ref_settings (service);
414
424
 
415
425
                local_settings = CAMEL_LOCAL_SETTINGS (settings);
416
426
                root = camel_local_settings_dup_path (local_settings);
417
427
 
 
428
                g_object_unref (settings);
 
429
 
418
430
                /* This should be fast enough not to have to test for INFO_FAST */
419
431
                dir_name = maildir_full_name_to_dir_name (fi->full_name);
420
432
 
457
469
        struct stat st;
458
470
 
459
471
        service = CAMEL_SERVICE (store);
460
 
        settings = camel_service_get_settings (service);
 
472
 
 
473
        settings = camel_service_ref_settings (service);
461
474
 
462
475
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
463
476
        path = camel_local_settings_dup_path (local_settings);
 
477
 
 
478
        g_object_unref (settings);
 
479
 
464
480
        g_return_val_if_fail (path != NULL, NULL);
465
481
 
466
482
        fi = camel_folder_info_new ();
475
491
                fi->flags = CAMEL_FOLDER_NOCHILDREN;
476
492
 
477
493
        dir_name = maildir_full_name_to_dir_name (fi->full_name);
478
 
        d(printf("Adding maildir info: '%s' '%s' '%s'\n", fi->name, dir_name, fi->uri));
 
494
        d (printf ("Adding maildir info: '%s' '%s' '%s'\n", fi->name, dir_name, fi->uri));
479
495
 
480
496
        tmp = g_build_filename (path, dir_name, "tmp", NULL);
481
497
        cur = g_build_filename (path, dir_name, "cur", NULL);
551
567
        gchar *path;
552
568
 
553
569
        service = CAMEL_SERVICE (store);
554
 
        settings = camel_service_get_settings (service);
 
570
 
 
571
        settings = camel_service_ref_settings (service);
555
572
 
556
573
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
557
574
        path = camel_local_settings_dup_path (local_settings);
 
575
 
 
576
        g_object_unref (settings);
 
577
 
558
578
        g_return_val_if_fail (path != NULL, -1);
559
579
 
560
580
        folders = g_ptr_array_new ();
583
603
                CamelFolderInfo *fi;
584
604
                struct stat st;
585
605
 
586
 
                if (strcmp(d->d_name, "tmp") == 0
587
 
                                || strcmp(d->d_name, "cur") == 0
588
 
                                || strcmp(d->d_name, "new") == 0
589
 
                                || strcmp(d->d_name, ".#evolution") == 0
590
 
                                || strcmp(d->d_name, ".") == 0
591
 
                                || strcmp(d->d_name, "..") == 0
 
606
                if (strcmp (d->d_name, "tmp") == 0
 
607
                                || strcmp (d->d_name, "cur") == 0
 
608
                                || strcmp (d->d_name, "new") == 0
 
609
                                || strcmp (d->d_name, ".#evolution") == 0
 
610
                                || strcmp (d->d_name, ".") == 0
 
611
                                || strcmp (d->d_name, "..") == 0
592
612
                                || !g_str_has_prefix (d->d_name, "."))
593
613
 
594
614
                                continue;
606
626
                else
607
627
                        short_name++;
608
628
 
609
 
                if ((g_ascii_strcasecmp ((*topfi)->full_name, "Inbox") != 0 
 
629
                if ((g_ascii_strcasecmp ((*topfi)->full_name, "Inbox") != 0
610
630
                    && (!g_str_has_prefix (full_name, (*topfi)->full_name) ||
611
631
                        (full_name[strlen ((*topfi)->full_name)] != '\0' &&
612
632
                         full_name[strlen ((*topfi)->full_name)] != '/')))
613
633
                    || (!can_inbox_sibling
614
 
                    && g_ascii_strcasecmp ((*topfi)->full_name, "Inbox") == 0 
 
634
                    && g_ascii_strcasecmp ((*topfi)->full_name, "Inbox") == 0
615
635
                    && (!g_str_has_prefix (full_name, (*topfi)->full_name) ||
616
636
                        (full_name[strlen ((*topfi)->full_name)] != '\0' &&
617
637
                         full_name[strlen ((*topfi)->full_name)] != '/')))) {
659
679
}
660
680
 
661
681
static gboolean
662
 
maildir_store_compare_folder_name (gconstpointer a,
663
 
                                   gconstpointer b)
 
682
maildir_store_equal_folder_name (gconstpointer a,
 
683
                                 gconstpointer b)
664
684
{
665
685
        return g_str_equal (md_canon_name (a), md_canon_name (b));
666
686
}
676
696
 
677
697
        if (top == NULL || top[0] == 0) {
678
698
                /* create a dummy "." parent inbox, use to scan, then put back at the top level */
679
 
                fi = scan_fi(store, flags, "Inbox", _("Inbox"), cancellable);
 
699
                fi = scan_fi (store, flags, "Inbox", _("Inbox"), cancellable);
680
700
                if (scan_dirs (store, flags, TRUE, &fi, cancellable, error) == -1)
681
701
                        goto fail;
682
702
 
683
703
                fi->flags |= CAMEL_FOLDER_SYSTEM | CAMEL_FOLDER_TYPE_INBOX;
684
 
        } else if (!strcmp(top, ".")) {
685
 
                fi = scan_fi(store, flags, "Inbox", _("Inbox"), cancellable);
 
704
        } else if (!strcmp (top, ".")) {
 
705
                fi = scan_fi (store, flags, "Inbox", _("Inbox"), cancellable);
686
706
                fi->flags |= CAMEL_FOLDER_SYSTEM | CAMEL_FOLDER_TYPE_INBOX;
687
707
        } else {
688
708
                const gchar *name = strrchr (top, '/');
761
781
        gchar *old_dir, *new_dir;
762
782
        CamelFolderInfo *subfolders;
763
783
 
764
 
        if (strcmp(old, ".") == 0) {
 
784
        if (strcmp (old, ".") == 0) {
765
785
                g_set_error (
766
786
                        error, CAMEL_STORE_ERROR,
767
787
                        CAMEL_STORE_ERROR_NO_FOLDER,
818
838
 
819
839
        store_class = CAMEL_STORE_CLASS (class);
820
840
        store_class->hash_folder_name = maildir_store_hash_folder_name;
821
 
        store_class->compare_folder_name = maildir_store_compare_folder_name;
 
841
        store_class->equal_folder_name = maildir_store_equal_folder_name;
822
842
        store_class->create_folder_sync = maildir_store_create_folder_sync;
823
843
        store_class->free_folder_info = camel_store_free_folder_info_full;
824
844
        store_class->get_folder_sync = maildir_store_get_folder_sync;
849
869
        gchar *path;
850
870
 
851
871
        service = CAMEL_SERVICE (ls);
852
 
        settings = camel_service_get_settings (service);
 
872
 
 
873
        settings = camel_service_ref_settings (service);
853
874
 
854
875
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
855
876
        path = camel_local_settings_dup_path (local_settings);
856
877
 
 
878
        g_object_unref (settings);
 
879
 
857
880
        dir_name = maildir_full_name_to_dir_name (full_name);
858
881
        filename = g_build_filename (path, dir_name, NULL);
859
882
        g_free (dir_name);
877
900
        gchar *tmp;
878
901
 
879
902
        service = CAMEL_SERVICE (ls);
880
 
        settings = camel_service_get_settings (service);
 
903
 
 
904
        settings = camel_service_ref_settings (service);
881
905
 
882
906
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
883
907
        path = camel_local_settings_dup_path (local_settings);
884
908
 
 
909
        g_object_unref (settings);
 
910
 
885
911
        dir_name = maildir_full_name_to_dir_name (full_name);
886
912
        tmp = g_build_filename (path, dir_name, NULL);
887
913
        filename = g_strconcat (tmp, ext, NULL);
938
964
        gint res = -1;
939
965
 
940
966
        service = CAMEL_SERVICE (store);
941
 
        settings = camel_service_get_settings (service);
 
967
 
 
968
        settings = camel_service_ref_settings (service);
942
969
 
943
970
        local_settings = CAMEL_LOCAL_SETTINGS (settings);
944
971
        path = camel_local_settings_dup_path (local_settings);
945
972
 
 
973
        g_object_unref (settings);
 
974
 
946
975
        visited = g_hash_table_new (scan_hash, scan_equal);
947
976
 
948
977
        sn = g_malloc0 (sizeof (*sn));
960
989
 
961
990
                last = (CamelFolderInfo *) &sn->fi->child;
962
991
 
963
 
                if (!strcmp(sn->fi->full_name, "."))
 
992
                if (!strcmp (sn->fi->full_name, "."))
964
993
                        name = g_strdup (path);
965
994
                else
966
995
                        name = g_build_filename (path, sn->fi->full_name, NULL);
977
1006
                }
978
1007
 
979
1008
                while ((d = readdir (dir))) {
980
 
                        if (strcmp(d->d_name, "tmp") == 0
981
 
                            || strcmp(d->d_name, "cur") == 0
982
 
                            || strcmp(d->d_name, "new") == 0
983
 
                            || strcmp(d->d_name, ".#evolution") == 0
984
 
                            || strcmp(d->d_name, ".") == 0
985
 
                            || strcmp(d->d_name, "..") == 0)
 
1009
                        if (strcmp (d->d_name, "tmp") == 0
 
1010
                            || strcmp (d->d_name, "cur") == 0
 
1011
                            || strcmp (d->d_name, "new") == 0
 
1012
                            || strcmp (d->d_name, ".#evolution") == 0
 
1013
                            || strcmp (d->d_name, ".") == 0
 
1014
                            || strcmp (d->d_name, "..") == 0)
986
1015
                                continue;
987
1016
 
988
1017
                        tmp = g_build_filename (name, d->d_name, NULL);
1001
1030
                                        snew->dnode = in.dnode;
1002
1031
                                        snew->inode = in.inode;
1003
1032
 
1004
 
                                        if (!strcmp(sn->fi->full_name, "."))
 
1033
                                        if (!strcmp (sn->fi->full_name, "."))
1005
1034
                                                full = g_strdup (d->d_name);
1006
1035
                                        else
1007
 
                                                full = g_strdup_printf("%s/%s", sn->fi->full_name, d->d_name);
 
1036
                                                full = g_strdup_printf ("%s/%s", sn->fi->full_name, d->d_name);
1008
1037
 
1009
1038
                                        fi = camel_folder_info_new ();
1010
1039
                                        fi->full_name = full;
1067
1096
                if (fi->child)
1068
1097
                        traverse_rename_folder_info (mstore, fi->child, cancellable, error);
1069
1098
 
1070
 
                if (strcmp (fi->full_name, ".") && ((!g_str_has_prefix (fi->full_name, ".") && (!fi->parent || !strcmp(fi->parent->full_name, "."))) || 
 
1099
                if (strcmp (fi->full_name, ".") && ((!g_str_has_prefix (fi->full_name, ".") && (!fi->parent || !strcmp (fi->parent->full_name, "."))) ||
1071
1100
                                        (fi->parent && strcmp (fi->parent->full_name, "."))))
1072
1101
                        maildir_rename_old_folder (mstore, fi, cancellable, error);
1073
1102