1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
3 * Authors: Michael Zucchi <notzed@ximian.com>
5 * Copyright (C) 2000 Ximian (www.ximian.com).
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of version 2 of the GNU Lesser General Public
9 * License as published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
29 #include <glib/gi18n-lib.h>
31 #include "camel-provider.h"
32 #include "camel-session.h"
33 #include "camel-url.h"
35 #include "camel-maildir-store.h"
36 #include "camel-mbox-store.h"
37 #include "camel-mh-store.h"
38 #include "camel-spool-store.h"
44 static CamelProviderConfEntry mh_conf_entries[] = {
45 CAMEL_PROVIDER_CONF_DEFAULT_PATH,
46 { CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
47 { CAMEL_PROVIDER_CONF_CHECKBOX, "dotfolders", NULL,
48 N_("Use the `.folders' folder summary file (exmh)"), "0" },
49 { CAMEL_PROVIDER_CONF_SECTION_END },
50 { CAMEL_PROVIDER_CONF_END }
53 static CamelProvider mh_provider = {
55 N_("MH-format mail directories"),
56 N_("For storing local mail in MH-like mail directories."),
58 CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
59 CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
66 static CamelProviderConfEntry mbox_conf_entries[] = {
67 CAMEL_PROVIDER_CONF_DEFAULT_PATH,
68 { CAMEL_PROVIDER_CONF_END }
71 static CamelProvider mbox_provider = {
74 N_("For retrieving (moving) local mail from standard mbox-formatted spools into folders managed by Evolution."),
76 CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
77 CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR |CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
84 static CamelProviderConfEntry maildir_conf_entries[] = {
85 CAMEL_PROVIDER_CONF_DEFAULT_PATH,
86 { CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
87 { CAMEL_PROVIDER_CONF_CHECKBOX, "filter", NULL,
88 N_("Apply filters to new messages in INBOX"), "0" },
89 { CAMEL_PROVIDER_CONF_SECTION_END },
90 { CAMEL_PROVIDER_CONF_END }
93 static CamelProvider maildir_provider = {
95 N_("Maildir-format mail directories"),
96 N_("For storing local mail in maildir directories."),
98 CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
99 CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
100 maildir_conf_entries,
104 static CamelProviderConfEntry spool_conf_entries[] = {
105 CAMEL_PROVIDER_CONF_DEFAULT_PATH,
106 { CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
107 { CAMEL_PROVIDER_CONF_CHECKBOX, "filter", NULL, N_("Apply filters to new messages in INBOX"), "0" },
108 { CAMEL_PROVIDER_CONF_CHECKBOX, "xstatus", NULL, N_("Store status headers in Elm/Pine/Mutt format"), "0" },
109 { CAMEL_PROVIDER_CONF_SECTION_END },
110 { CAMEL_PROVIDER_CONF_END }
113 static CamelProvider spool_file_provider = {
115 N_("Standard Unix mbox spool file"),
116 N_("For reading and storing local mail in external standard mbox spool files.\nMay also be used to read a tree of Elm, Pine, or Mutt style folders."),
118 CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
119 CAMEL_URL_NEED_PATH | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
124 static CamelProvider spool_directory_provider = {
126 N_("Standard Unix mbox spool directory"),
127 N_("For reading and storing local mail in external standard mbox spool files.\nMay also be used to read a tree of Elm, Pine, or Mutt style folders."),
129 CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
130 CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
137 /* build a canonical 'path' */
139 make_can_path(char *p, char *o)
141 char c, last, *start = o;
143 d(printf("canonical '%s' = ", p));
148 || (c=='/' && last != '/'))
152 if (o>start && o[-1] == '/')
157 d(printf("'%s'\n", start));
162 /* 'helper' function for it */
163 #define get_can_path(p) ((p == NULL) ? NULL : (make_can_path ((p), g_alloca (strlen (p) + 1))))
166 local_url_hash (const void *v)
168 const CamelURL *u = v;
171 #define ADD_HASH(s) if (s) hash ^= g_str_hash (s);
173 ADD_HASH (u->protocol);
175 ADD_HASH (u->authmech);
178 hash ^= g_str_hash(get_can_path(u->path));
187 check_equal (char *s1, char *s2)
189 if (s1 == NULL || *s1 == 0) {
190 if (s2 == NULL || *s2 == 0)
199 return strcmp (s1, s2) == 0;
203 local_url_equal(const void *v, const void *v2)
205 const CamelURL *u1 = v, *u2 = v2;
208 p1 = get_can_path(u1->path);
209 p2 = get_can_path(u2->path);
210 return check_equal(p1, p2)
211 && check_equal(u1->protocol, u2->protocol);
214 void camel_provider_module_init(void)
226 mh_conf_entries[0].value = ""; /* default path */
227 mh_provider.object_types[CAMEL_PROVIDER_STORE] = camel_mh_store_get_type ();
228 mh_provider.url_hash = local_url_hash;
229 mh_provider.url_equal = local_url_equal;
230 mh_provider.translation_domain = GETTEXT_PACKAGE;
231 camel_provider_register(&mh_provider);
235 if (!(path = getenv ("MAIL")))
236 path = g_strdup_printf (SYSTEM_MAIL_DIR "/%s", g_get_user_name ());
237 mbox_conf_entries[0].value = path; /* default path */
239 mbox_conf_entries[0].value = ""; /* default path */
241 mbox_provider.object_types[CAMEL_PROVIDER_STORE] = camel_mbox_store_get_type ();
242 mbox_provider.url_hash = local_url_hash;
243 mbox_provider.url_equal = local_url_equal;
244 mbox_provider.translation_domain = GETTEXT_PACKAGE;
245 camel_provider_register(&mbox_provider);
248 spool_conf_entries[0].value = path; /* default path - same as mbox; it's for both file and directory */
249 spool_file_provider.object_types[CAMEL_PROVIDER_STORE] = camel_spool_store_get_type ();
250 spool_file_provider.url_hash = local_url_hash;
251 spool_file_provider.url_equal = local_url_equal;
252 spool_file_provider.translation_domain = GETTEXT_PACKAGE;
253 camel_provider_register(&spool_file_provider);
255 spool_directory_provider.object_types[CAMEL_PROVIDER_STORE] = camel_spool_store_get_type ();
256 spool_directory_provider.url_hash = local_url_hash;
257 spool_directory_provider.url_equal = local_url_equal;
258 spool_directory_provider.translation_domain = GETTEXT_PACKAGE;
259 camel_provider_register(&spool_directory_provider);
261 path = getenv("MAILDIR");
262 maildir_conf_entries[0].value = path ? path : ""; /* default path */
263 maildir_provider.object_types[CAMEL_PROVIDER_STORE] = camel_maildir_store_get_type ();
264 maildir_provider.url_hash = local_url_hash;
265 maildir_provider.url_equal = local_url_equal;
266 maildir_provider.translation_domain = GETTEXT_PACKAGE;
267 camel_provider_register(&maildir_provider);