aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-migrate.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/em-migrate.c')
-rw-r--r--mail/em-migrate.c642
1 files changed, 321 insertions, 321 deletions
diff --git a/mail/em-migrate.c b/mail/em-migrate.c
index c290b60330..1c64c5e659 100644
--- a/mail/em-migrate.c
+++ b/mail/em-migrate.c
@@ -86,15 +86,15 @@ emm_load_xml (const char *dirname, const char *filename)
xmlDocPtr doc;
struct stat st;
char *path;
-
+
path = g_strdup_printf ("%s/%s", dirname, filename);
if (stat (path, &st) == -1 || !(doc = xmlParseFile (path))) {
g_free (path);
return NULL;
}
-
+
g_free (path);
-
+
return doc;
}
@@ -103,11 +103,11 @@ emm_save_xml (xmlDocPtr doc, const char *dirname, const char *filename)
{
char *path;
int retval;
-
+
path = g_strdup_printf ("%s/%s", dirname, filename);
retval = e_xml_save_file (path, doc);
g_free (path);
-
+
return retval;
}
@@ -115,15 +115,15 @@ static xmlNodePtr
xml_find_node (xmlNodePtr parent, const char *name)
{
xmlNodePtr node;
-
+
node = parent->children;
while (node != NULL) {
if (node->name && !strcmp ((char *)node->name, name))
return node;
-
+
node = node->next;
}
-
+
return NULL;
}
@@ -132,25 +132,25 @@ upgrade_xml_uris (xmlDocPtr doc, char * (* upgrade_uri) (const char *uri))
{
xmlNodePtr root, node;
char *uri, *new;
-
+
if (!doc || !(root = xmlDocGetRootElement (doc)))
return;
-
+
if (!root->name || strcmp ((char *)root->name, "filteroptions") != 0) {
/* root node is not <filteroptions>, nothing to upgrade */
return;
}
-
+
if (!(node = xml_find_node (root, "ruleset"))) {
/* no ruleset node, nothing to upgrade */
return;
}
-
+
node = node->children;
while (node != NULL) {
if (node->name && !strcmp ((char *)node->name, "rule")) {
xmlNodePtr actionset, part, val, n;
-
+
if ((actionset = xml_find_node (node, "actionset"))) {
/* filters.xml */
part = actionset->children;
@@ -160,26 +160,26 @@ upgrade_xml_uris (xmlDocPtr doc, char * (* upgrade_uri) (const char *uri))
while (val != NULL) {
if (val->name && !strcmp ((char *)val->name, "value")) {
char *type;
-
+
type = (char *)xmlGetProp (val, (const unsigned char *)"type");
if (type && !strcmp ((char *)type, "folder")) {
if ((n = xml_find_node (val, "folder"))) {
uri = (char *)xmlGetProp (n, (const unsigned char *)"uri");
new = upgrade_uri (uri);
xmlFree (uri);
-
+
xmlSetProp (n, (const unsigned char *)"uri", (unsigned char *)new);
g_free (new);
}
}
-
+
xmlFree (type);
}
-
+
val = val->next;
}
}
-
+
part = part->next;
}
} else if ((actionset = xml_find_node (node, "sources"))) {
@@ -190,16 +190,16 @@ upgrade_xml_uris (xmlDocPtr doc, char * (* upgrade_uri) (const char *uri))
uri = (char *)xmlGetProp (n, (const unsigned char *)"uri");
new = upgrade_uri (uri);
xmlFree (uri);
-
+
xmlSetProp (n, (const unsigned char *)"uri", (unsigned char *)new);
g_free (new);
}
-
+
n = n->next;
}
}
}
-
+
node = node->next;
}
}
@@ -255,7 +255,7 @@ static char *
get_base_uri(const char *val)
{
const char *tmp;
-
+
tmp = strchr(val, ':');
if (tmp) {
tmp++;
@@ -263,7 +263,7 @@ get_base_uri(const char *val)
tmp += 2;
tmp = strchr(tmp, '/');
}
-
+
if (tmp)
return g_strndup(val, tmp-val);
else
@@ -274,21 +274,21 @@ static char *
upgrade_xml_uris_1_0 (const char *uri)
{
char *out = NULL;
-
+
/* upgrades camel uri's */
if (strncmp (uri, "imap:", 5) == 0) {
char *base_uri, dir_sep, *folder, *p;
struct _account_info_1_0 *ai;
-
+
/* add namespace, canonicalise dir_sep to / */
base_uri = get_base_uri (uri);
ai = g_hash_table_lookup (accounts_1_0, base_uri);
-
+
if (ai == NULL) {
g_free (base_uri);
return NULL;
}
-
+
dir_sep = ai->u.imap.dir_sep;
if (dir_sep == 0) {
/* no dir_sep listed, try get it from the namespace, if set */
@@ -304,34 +304,34 @@ upgrade_xml_uris_1_0 (const char *uri)
p++;
}
}
-
+
/* give up ... */
if (dir_sep == 0) {
g_free (base_uri);
return NULL;
}
}
-
+
folder = g_strdup (uri + strlen (base_uri) + 1);
-
+
/* Add the namespace before the mailbox name, unless the mailbox is INBOX */
if (ai->u.imap.namespace && strcmp ((char *)folder, "INBOX") != 0)
out = g_strdup_printf ("%s/%s/%s", base_uri, ai->u.imap.namespace, folder);
else
out = g_strdup_printf ("%s/%s", base_uri, folder);
-
+
p = out;
while (*p) {
if (*p == dir_sep)
*p = '/';
p++;
}
-
+
g_free (folder);
g_free (base_uri);
} else if (strncmp (uri, "exchange:", 9) == 0) {
char *base_uri, *folder, *p;
-
+
/* exchange://user@host/exchange/ * -> exchange://user@host/personal/ * */
/* Any url encoding (%xx) in the folder name is also removed */
base_uri = get_base_uri (uri);
@@ -346,7 +346,7 @@ upgrade_xml_uris_1_0 (const char *uri)
/* these should be converted in the accounts table when it is loaded */
g_warning ("exchanget: uri not converted: '%s'", uri);
}
-
+
return out;
}
@@ -357,7 +357,7 @@ parse_lsub (const char *lsub, char *dir_sep)
static regex_t pat;
regmatch_t match[3];
char *m = "^\\* LSUB \\([^)]*\\) \"?([^\" ]+)\"? \"?(.*)\"?$";
-
+
if (!comp) {
if (regcomp (&pat, m, REG_EXTENDED|REG_ICASE) == -1) {
g_warning ("reg comp '%s' failed: %s", m, g_strerror (errno));
@@ -365,7 +365,7 @@ parse_lsub (const char *lsub, char *dir_sep)
}
comp = 1;
}
-
+
if (regexec (&pat, lsub, 3, match, 0) == 0) {
if (match[1].rm_so != -1 && match[2].rm_so != -1) {
if (dir_sep)
@@ -373,7 +373,7 @@ parse_lsub (const char *lsub, char *dir_sep)
return g_strndup (lsub + match[2].rm_so, match[2].rm_eo - match[2].rm_so);
}
}
-
+
return NULL;
}
@@ -384,19 +384,19 @@ read_imap_storeinfo (struct _account_info_1_0 *si)
guint32 tmp;
char *buf, *folder, dir_sep, *path, *name, *p;
struct _imap_folder_info_1_0 *fi;
-
+
si->u.imap.folders = g_hash_table_new_full (
g_str_hash, g_str_equal,
(GDestroyNotify) NULL,
(GDestroyNotify) imap_folder_info_1_0_free);
-
+
/* get details from uri first */
name = strstr (si->uri, ";override_namespace");
if (name) {
name = strstr (si->uri, ";namespace=");
if (name) {
char *end;
-
+
name += strlen (";namespace=");
if (*name == '\"') {
name++;
@@ -404,11 +404,11 @@ read_imap_storeinfo (struct _account_info_1_0 *si)
} else {
end = strchr (name, ';');
}
-
+
if (end) {
/* try get the dir_sep from the namespace */
si->u.imap.namespace = g_strndup (name, end-name);
-
+
p = si->u.imap.namespace;
while ((dir_sep = *p++)) {
if (dir_sep < '0'
@@ -423,7 +423,7 @@ read_imap_storeinfo (struct _account_info_1_0 *si)
}
}
}
-
+
/* now load storeinfo if it exists */
path = g_build_filename (g_get_home_dir (), "evolution", "mail", "imap", si->base_uri + 7, "storeinfo", NULL);
storeinfo = fopen (path, "r");
@@ -432,7 +432,7 @@ read_imap_storeinfo (struct _account_info_1_0 *si)
g_warning ("could not find imap store info '%s'", path);
return -1;
}
-
+
/* ignore version */
camel_file_util_decode_uint32 (storeinfo, &tmp);
camel_file_util_decode_uint32 (storeinfo, &si->u.imap.capabilities);
@@ -446,9 +446,9 @@ read_imap_storeinfo (struct _account_info_1_0 *si)
|| si->u.imap.namespace[strlen (si->u.imap.namespace) - 1] == '/')) {
si->u.imap.namespace[strlen (si->u.imap.namespace) - 1] = 0;
}
-
+
d(printf ("namespace '%s' dir_sep '%c'\n", si->u.imap.namespace, si->u.imap.dir_sep ? si->u.imap.dir_sep : '?'));
-
+
while (camel_file_util_decode_string (storeinfo, &buf) == 0) {
folder = parse_lsub (buf, &dir_sep);
if (folder) {
@@ -467,9 +467,9 @@ read_imap_storeinfo (struct _account_info_1_0 *si)
g_warning ("Could not parse LIST result '%s'\n", buf);
}
}
-
+
fclose (storeinfo);
-
+
return 0;
}
@@ -480,37 +480,37 @@ load_accounts_1_0 (xmlDocPtr doc)
char *val, *tmp;
int count = 0, i;
char key[32];
-
+
if (!(source = e_bconf_get_path (doc, "/Mail/Accounts")))
return 0;
-
+
if ((val = e_bconf_get_value (source, "num"))) {
count = atoi (val);
xmlFree (val);
}
-
+
/* load account upgrade info for each account */
for (i = 0; i < count; i++) {
struct _account_info_1_0 *ai;
char *rawuri;
-
+
sprintf (key, "source_url_%d", i);
if (!(rawuri = e_bconf_get_value (source, key)))
continue;
-
+
ai = g_malloc0 (sizeof (struct _account_info_1_0));
ai->uri = e_bconf_hex_decode (rawuri);
ai->base_uri = get_base_uri (ai->uri);
sprintf (key, "account_name_%d", i);
ai->name = e_bconf_get_string (source, key);
-
+
d(printf("load account '%s'\n", ai->uri));
-
+
if (!strncmp (ai->uri, "imap:", 5)) {
read_imap_storeinfo (ai);
} else if (!strncmp (ai->uri, "exchange:", 9)) {
xmlNodePtr node;
-
+
d(printf (" upgrade exchange account\n"));
/* small hack, poke the source_url into the transport_url for exchanget: transports
- this will be picked up later in the conversion */
@@ -527,12 +527,12 @@ load_accounts_1_0 (xmlDocPtr doc)
}
}
xmlFree (rawuri);
-
+
g_hash_table_insert (accounts_1_0, ai->base_uri, ai);
if (ai->name)
g_hash_table_insert (accounts_name_1_0, ai->name, ai);
}
-
+
return 0;
}
@@ -543,15 +543,15 @@ em_migrate_1_0 (const char *evolution_dir, xmlDocPtr config_xmldb, xmlDocPtr fil
g_str_hash, g_str_equal,
(GDestroyNotify) NULL,
(GDestroyNotify) account_info_1_0_free);
- accounts_name_1_0 = g_hash_table_new (g_str_hash, g_str_equal);
+ accounts_name_1_0 = g_hash_table_new (g_str_hash, g_str_equal);
load_accounts_1_0 (config_xmldb);
upgrade_xml_uris(filters, upgrade_xml_uris_1_0);
upgrade_xml_uris(vfolders, upgrade_xml_uris_1_0);
-
+
g_hash_table_destroy (accounts_1_0);
g_hash_table_destroy (accounts_name_1_0);
-
+
return 0;
}
@@ -562,7 +562,7 @@ is_xml1encoded (const char *txt)
const unsigned char *p;
int isxml1 = FALSE;
int is8bit = FALSE;
-
+
p = (const unsigned char *)txt;
while (*p) {
if (p[0] == '\\' && p[1] == 'U' && p[2] == '+'
@@ -574,11 +574,11 @@ is_xml1encoded (const char *txt)
is8bit = TRUE;
p++;
}
-
+
/* check for invalid utf8 that needs cleaning */
if (is8bit && !isxml1)
isxml1 = !g_utf8_validate (txt, -1, NULL);
-
+
return isxml1;
}
@@ -588,11 +588,11 @@ decode_xml1 (const char *txt)
GString *out = g_string_new ("");
const unsigned char *p;
char *res;
-
+
/* convert:
\U+XXXX\ -> utf8
8 bit characters -> utf8 (iso-8859-1) */
-
+
p = (const unsigned char *) txt;
while (*p) {
if (p[0] > 0x80
@@ -601,7 +601,7 @@ decode_xml1 (const char *txt)
&& p[7] == '\\')) {
char utf8[8];
gunichar u;
-
+
if (p[0] == '\\') {
memcpy (utf8, p + 3, 4);
utf8[4] = 0;
@@ -616,10 +616,10 @@ decode_xml1 (const char *txt)
}
p++;
}
-
+
res = out->str;
g_string_free (out, FALSE);
-
+
return res;
}
@@ -629,17 +629,17 @@ utf8_reencode (const char *txt)
GString *out = g_string_new ("");
gchar *p;
char *res;
-
+
/* convert:
libxml1 8 bit utf8 converted to xml entities byte-by-byte chars -> utf8 */
-
+
p = (gchar *)txt;
-
+
while (*p) {
g_string_append_c (out, (gchar)g_utf8_get_char ((const gchar *)p));
p = (gchar *)g_utf8_next_char (p);
}
-
+
res = out->str;
if (g_utf8_validate (res, -1, NULL)) {
g_string_free (out, FALSE);
@@ -669,9 +669,9 @@ upgrade_xml_1_2_rec (xmlNodePtr node)
xmlNodePtr work;
int i,j;
char *txt, *tmp;
-
+
/* upgrades the content of a node, if the node has a specific parent/node name */
-
+
for (i = 0; tags[i].name; i++) {
if (!strcmp ((char *)node->name, tags[i].name)) {
if (tags[i].tags != NULL) {
@@ -694,7 +694,7 @@ upgrade_xml_1_2_rec (xmlNodePtr node)
}
break;
}
-
+
if (tags[i].props != NULL) {
for (j = 0; tags[i].props[j]; j++) {
txt = (char *)xmlGetProp (node, (unsigned char *)tags[i].props[j]);
@@ -708,13 +708,13 @@ upgrade_xml_1_2_rec (xmlNodePtr node)
}
}
}
-
+
node = node->children;
while (node) {
upgrade_xml_1_2_rec (node);
node = node->next;
}
-
+
return 0;
}
@@ -722,10 +722,10 @@ static int
em_upgrade_xml_1_2 (xmlDocPtr doc)
{
xmlNodePtr root;
-
+
if (!doc || !(root = xmlDocGetRootElement (doc)))
return 0;
-
+
return upgrade_xml_1_2_rec (root);
}
@@ -771,7 +771,7 @@ upgrade_passwords_1_2(void)
if (!strcmp((char *)entry->name, "entry")) {
char *namep = (char *)xmlGetProp(entry, (const unsigned char *)"name"),
*valuep = (char *)xmlGetProp(entry, (const unsigned char *)"value");
-
+
if (namep && valuep) {
char *value = e_bconf_hex_decode(valuep);
guchar *decoded;
@@ -1038,11 +1038,11 @@ static e_gconf_map_list_t gconf_remap_list[] = {
{ "/Mail/Notify", mail_notify_map },
{ "/Mail/Filesel", mail_filesel_map },
{ "/Mail/Composer", mail_composer_map },
-
+
{ "/Importer/Elm", importer_elm_map },
{ "/Importer/Pine", importer_pine_map },
{ "/Importer/Netscape", importer_netscape_map },
-
+
{ 0 },
};
@@ -1066,9 +1066,9 @@ bconf_import(GConfClient *gconf, xmlDocPtr config_xmldb)
char *val, *lab, *col;
GSList *list, *l;
int i;
-
+
e_bconf_import(gconf, config_xmldb, gconf_remap_list);
-
+
/* Labels:
label string + label colour as integer
-> label string:# colour as hex */
@@ -1084,12 +1084,12 @@ bconf_import(GConfClient *gconf, xmlDocPtr config_xmldb)
g_free(col);
} else
strcpy(colx, label_default[i].colour);
-
+
val = g_strdup_printf("%s:%s", lab ? lab : label_default[i].label, colx);
list = g_slist_append(list, val);
g_free(lab);
}
-
+
gconf_client_set_list(gconf, "/apps/evolution/mail/labels", GCONF_VALUE_STRING, list, NULL);
while (list) {
l = list->next;
@@ -1100,15 +1100,15 @@ bconf_import(GConfClient *gconf, xmlDocPtr config_xmldb)
} else {
g_warning("could not find /Mail/Labels in old config database, skipping");
}
-
+
/* Accounts: The flat bonobo-config structure is remapped to a list of xml blobs. Upgrades as necessary */
e_bconf_import_xml_blob(gconf, config_xmldb, account_map, "/Mail/Accounts",
"/apps/evolution/mail/accounts", "account", "uid");
-
+
/* Same for signatures */
e_bconf_import_xml_blob(gconf, config_xmldb, signature_map, "/Mail/Signatures",
"/apps/evolution/mail/signatures", "signature", NULL);
-
+
return 0;
}
@@ -1116,11 +1116,11 @@ static int
em_migrate_1_2(const char *evolution_dir, xmlDocPtr config_xmldb, xmlDocPtr filters, xmlDocPtr vfolders, CamelException *ex)
{
GConfClient *gconf;
-
+
gconf = gconf_client_get_default();
bconf_import(gconf, config_xmldb);
g_object_unref(gconf);
-
+
em_upgrade_xml_1_2(filters);
em_upgrade_xml_1_2(vfolders);
upgrade_passwords_1_2();
@@ -1137,14 +1137,14 @@ em_migrate_1_2(const char *evolution_dir, xmlDocPtr config_xmldb, xmlDocPtr filt
typedef struct _EMMigrateSession {
CamelSession parent_object;
-
+
CamelStore *store; /* new folder tree store */
char *srcdir; /* old folder tree path */
} EMMigrateSession;
typedef struct _EMMigrateSessionClass {
CamelSessionClass parent_class;
-
+
} EMMigrateSessionClass;
static CamelType em_migrate_session_get_type (void);
@@ -1160,7 +1160,7 @@ static CamelType
em_migrate_session_get_type (void)
{
static CamelType type = CAMEL_INVALID_TYPE;
-
+
if (type == CAMEL_INVALID_TYPE) {
type = camel_type_register (
camel_session_get_type (),
@@ -1172,7 +1172,7 @@ em_migrate_session_get_type (void)
NULL,
NULL);
}
-
+
return type;
}
@@ -1180,11 +1180,11 @@ static CamelSession *
em_migrate_session_new (const char *path)
{
CamelSession *session;
-
+
session = CAMEL_SESSION (camel_object_new (EM_MIGRATE_SESSION_TYPE));
-
+
camel_session_construct (session, path);
-
+
return session;
}
@@ -1197,35 +1197,35 @@ static void
em_migrate_setup_progress_dialog (void)
{
GtkWidget *vbox, *hbox, *w;
-
+
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title ((GtkWindow *) window, _("Migrating..."));
gtk_window_set_modal ((GtkWindow *) window, TRUE);
gtk_container_set_border_width ((GtkContainer *) window, 6);
-
+
vbox = gtk_vbox_new (FALSE, 6);
gtk_widget_show (vbox);
gtk_container_add ((GtkContainer *) window, vbox);
-
+
w = gtk_label_new (_("The location and hierarchy of the Evolution mailbox "
"folders has changed since Evolution 1.x.\n\nPlease be "
"patient while Evolution migrates your folders..."));
gtk_label_set_line_wrap ((GtkLabel *) w, TRUE);
gtk_widget_show (w);
gtk_box_pack_start_defaults ((GtkBox *) vbox, w);
-
+
hbox = gtk_hbox_new (FALSE, 6);
gtk_widget_show (hbox);
gtk_box_pack_start_defaults ((GtkBox *) vbox, hbox);
-
+
label = (GtkLabel *) gtk_label_new ("");
gtk_widget_show ((GtkWidget *) label);
gtk_box_pack_start_defaults ((GtkBox *) hbox, (GtkWidget *) label);
-
+
progress = (GtkProgressBar *) gtk_progress_bar_new ();
gtk_widget_show ((GtkWidget *) progress);
gtk_box_pack_start_defaults ((GtkBox *) hbox, (GtkWidget *) progress);
-
+
gtk_widget_show (window);
}
@@ -1239,13 +1239,13 @@ static void
em_migrate_set_folder_name (const char *folder_name)
{
char *text;
-
+
text = g_strdup_printf (_("Migrating `%s':"), folder_name);
gtk_label_set_text (label, text);
g_free (text);
-
+
gtk_progress_bar_set_fraction (progress, 0.0);
-
+
while (gtk_events_pending ())
gtk_main_iteration ();
}
@@ -1254,12 +1254,12 @@ static void
em_migrate_set_progress (double percent)
{
char text[5];
-
+
snprintf (text, sizeof (text), "%d%%", (int) (percent * 100.0f));
-
+
gtk_progress_bar_set_fraction (progress, percent);
gtk_progress_bar_set_text (progress, text);
-
+
while (gtk_events_pending ())
gtk_main_iteration ();
}
@@ -1270,24 +1270,24 @@ is_mail_folder (const char *metadata)
xmlNodePtr node;
xmlDocPtr doc;
char *type;
-
+
if (!(doc = xmlParseFile (metadata))) {
g_warning ("Cannot parse `%s'", metadata);
return FALSE;
}
-
+
if (!(node = xmlDocGetRootElement (doc))) {
g_warning ("`%s' corrupt: document contains no root node", metadata);
xmlFreeDoc (doc);
return FALSE;
}
-
+
if (!node->name || strcmp ((char *)node->name, "efolder") != 0) {
g_warning ("`%s' corrupt: root node is not 'efolder'", metadata);
xmlFreeDoc (doc);
return FALSE;
}
-
+
node = node->children;
while (node != NULL) {
if (node->name && !strcmp ((char *)node->name, "type")) {
@@ -1295,20 +1295,20 @@ is_mail_folder (const char *metadata)
if (!strcmp ((char *)type, "mail")) {
xmlFreeDoc (doc);
xmlFree (type);
-
+
return TRUE;
}
-
+
xmlFree (type);
-
+
break;
}
-
+
node = node->next;
}
-
+
xmlFreeDoc (doc);
-
+
return FALSE;
}
@@ -1320,38 +1320,38 @@ get_local_et_expanded (const char *dirname)
struct stat st;
char *buf, *p;
int thread_list;
-
+
buf = g_strdup_printf ("%s/evolution/config/file:%s", g_get_home_dir (), dirname);
p = buf + strlen (g_get_home_dir ()) + strlen ("/evolution/config/file:");
e_filename_make_safe (p);
-
+
if (stat (buf, &st) == -1) {
g_free (buf);
return -1;
}
-
+
if (!(doc = xmlParseFile (buf))) {
g_free (buf);
return -1;
}
-
+
g_free (buf);
-
+
if (!(node = xmlDocGetRootElement (doc)) || strcmp ((char *)node->name, "expanded_state") != 0) {
xmlFreeDoc (doc);
return -1;
}
-
+
if (!(buf = (char *)xmlGetProp (node, (const unsigned char *)"default"))) {
xmlFreeDoc (doc);
return -1;
}
-
+
thread_list = strcmp (buf, "0") == 0 ? 0 : 1;
xmlFree (buf);
-
+
xmlFreeDoc (doc);
-
+
return thread_list;
}
@@ -1383,7 +1383,7 @@ get_local_store_uri (const char *dirname, char **namep, int *indexp)
node = doc->children;
if (strcmp((char *)node->name, "folderinfo"))
goto dodefault;
-
+
for (node = node->children; node; node = node->next) {
if (node->name && !strcmp ((char *)node->name, "folder")) {
tmp = (char *)xmlGetProp (node, (const unsigned char *)"type");
@@ -1446,7 +1446,7 @@ cp (const char *src, const char *dest, gboolean show_progress, int mode)
errno = EEXIST;
return -1;
}
-
+
if (g_stat (src, &st) == -1
|| (readfd = g_open (src, O_RDONLY | O_BINARY, 0)) == -1)
return -1;
@@ -1457,58 +1457,58 @@ cp (const char *src, const char *dest, gboolean show_progress, int mode)
errno = errnosav;
return -1;
}
-
+
do {
do {
nread = read (readfd, readbuf, sizeof (readbuf));
} while (nread == -1 && errno == EINTR);
-
+
if (nread == 0)
break;
else if (nread < 0)
goto exception;
-
+
do {
nwritten = write (writefd, readbuf, nread);
} while (nwritten == -1 && errno == EINTR);
-
+
if (nwritten < nread)
goto exception;
-
+
total += nwritten;
-#ifndef G_OS_WIN32
+#ifndef G_OS_WIN32
if (show_progress)
em_migrate_set_progress (((double) total) / ((double) st.st_size));
#endif
} while (total < st.st_size);
-
+
if (fsync (writefd) == -1)
goto exception;
-
+
close (readfd);
if (close (writefd) == -1)
goto failclose;
-
+
ut.actime = st.st_atime;
ut.modtime = st.st_mtime;
utime (dest, &ut);
chmod (dest, st.st_mode);
-
+
return 0;
-
+
exception:
-
+
errnosav = errno;
close (readfd);
close (writefd);
errno = errnosav;
-
+
failclose:
-
+
errnosav = errno;
unlink (dest);
errno = errnosav;
-
+
return -1;
}
@@ -1522,46 +1522,46 @@ cp_r (const char *src, const char *dest, const char *pattern, int mode)
size_t slen, dlen;
struct stat st;
DIR *dir;
-
+
if (g_mkdir_with_parents (dest, 0777) == -1)
return -1;
-
+
if (!(dir = opendir (src)))
return -1;
-
+
srcpath = g_string_new (src);
g_string_append_c (srcpath, '/');
slen = srcpath->len;
-
+
destpath = g_string_new (dest);
g_string_append_c (destpath, '/');
dlen = destpath->len;
-
+
while ((dent = readdir (dir))) {
if (!strcmp (dent->d_name, ".") || !strcmp (dent->d_name, ".."))
continue;
-
+
g_string_truncate (srcpath, slen);
g_string_truncate (destpath, dlen);
-
+
g_string_append (srcpath, dent->d_name);
g_string_append (destpath, dent->d_name);
-
+
if (stat (srcpath->str, &st) == -1)
continue;
-
+
if (S_ISDIR (st.st_mode)) {
cp_r (srcpath->str, destpath->str, pattern, mode);
} else if (!pattern || !strcmp (dent->d_name, pattern)) {
cp (srcpath->str, destpath->str, FALSE, mode);
}
}
-
+
closedir (dir);
-
+
g_string_free (destpath, TRUE);
g_string_free (srcpath, TRUE);
-
+
return 0;
}
@@ -1570,7 +1570,7 @@ mbox_build_filename (GString *path, const char *toplevel_dir, const char *full_n
{
const char *start, *inptr = full_name;
int subdirs = 0;
-
+
while (*inptr != '\0') {
if (*inptr == '/')
subdirs++;
@@ -1579,19 +1579,19 @@ mbox_build_filename (GString *path, const char *toplevel_dir, const char *full_n
g_string_assign(path, toplevel_dir);
g_string_append_c (path, '/');
-
+
inptr = full_name;
while (*inptr != '\0') {
start = inptr;
while (*inptr != '/' && *inptr != '\0')
inptr++;
-
+
g_string_append_len (path, start, inptr - start);
-
+
if (*inptr == '/') {
g_string_append (path, ".sbd/");
inptr++;
-
+
/* strip extranaeous '/'s */
while (*inptr == '/')
inptr++;
@@ -1622,7 +1622,7 @@ em_migrate_folder(EMMigrateSession *session, const char *dirname, const char *fu
g_string_free(src, TRUE);
return 0;
}
-
+
dest = g_string_new("");
uri = get_local_store_uri(dirname, &name, &index);
em_migrate_set_folder_name (full_name);
@@ -1635,22 +1635,22 @@ em_migrate_folder(EMMigrateSession *session, const char *dirname, const char *fu
FILE *fp;
char *p;
int mode;
-
+
g_string_printf (src, "%s/%s", uri + 5, name);
mbox_build_filename (dest, ((CamelService *)session->store)->url->path, full_name);
p = strrchr (dest->str, '/');
*p = '\0';
-
+
slen = src->len;
dlen = dest->len;
-
+
if (g_mkdir_with_parents (dest->str, 0777) == -1 && errno != EEXIST) {
camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
_("Unable to create new folder `%s': %s"),
dest->str, g_strerror(errno));
goto fatal;
}
-
+
*p = '/';
mode = CP_UNIQUE;
retry_copy:
@@ -1677,47 +1677,47 @@ em_migrate_folder(EMMigrateSession *session, const char *dirname, const char *fu
goto fatal;
}
ignore:
-
+
/* create a .cmeta file specifying to index and/or thread the folder */
g_string_truncate (dest, dlen);
g_string_append (dest, ".cmeta");
if ((fp = fopen (dest->str, "w")) != NULL) {
int fd = fileno (fp);
-
+
/* write the magic string */
if (fwrite ("CLMD", 4, 1, fp) != 1)
goto cmeta_err;
-
+
/* write the version (1) */
if (camel_file_util_encode_uint32 (fp, 1) == -1)
goto cmeta_err;
-
+
/* write the meta count */
if (camel_file_util_encode_uint32 (fp, thread_list != -1 ? 1 : 0) == -1)
goto cmeta_err;
-
+
if (thread_list != -1) {
if (camel_file_util_encode_string (fp, "evolution:thread_list") == -1)
goto cmeta_err;
-
+
if (camel_file_util_encode_string (fp, thread_list ? "1" : "0") == -1)
goto cmeta_err;
}
-
+
/* write the prop count (only prop is the index prop) */
if (camel_file_util_encode_uint32 (fp, 1) == -1)
goto cmeta_err;
-
+
/* write the index prop tag (== CAMEL_FOLDER_ARG_LAST|CAMEL_ARG_BOO) */
if (camel_file_util_encode_uint32 (fp, CAMEL_FOLDER_ARG_LAST|CAMEL_ARG_BOO) == -1)
goto cmeta_err;
-
+
/* write the index prop value */
if (camel_file_util_encode_uint32 (fp, 1) == -1)
goto cmeta_err;
-
+
fflush (fp);
-
+
if (fsync (fd) == -1) {
cmeta_err:
fclose (fp);
@@ -1726,12 +1726,12 @@ em_migrate_folder(EMMigrateSession *session, const char *dirname, const char *fu
fclose (fp);
}
}
-
+
/* copy over the metadata files */
for (i = 0; i < sizeof(meta_ext)/sizeof(meta_ext[0]); i++) {
g_string_truncate (src, slen);
g_string_truncate (dest, dlen);
-
+
g_string_append (src, meta_ext[i]);
g_string_append (dest, meta_ext[i]);
cp (src->str, dest->str, FALSE, CP_OVERWRITE);
@@ -1742,42 +1742,42 @@ em_migrate_folder(EMMigrateSession *session, const char *dirname, const char *fu
if (!(local_store = camel_session_get_store ((CamelSession *) session, uri, ex))
|| !(old_folder = camel_store_get_folder (local_store, name, 0, ex)))
goto fatal;
-
+
flags |= (index ? CAMEL_STORE_FOLDER_BODY_INDEX : 0);
if (!(new_folder = camel_store_get_folder (session->store, full_name, flags, ex)))
goto fatal;
-
+
if (thread_list != -1) {
camel_object_meta_set (new_folder, "evolution:thread_list", thread_list ? "1" : "0");
camel_object_state_write (new_folder);
}
-
+
uids = camel_folder_get_uids (old_folder);
for (i = 0; i < uids->len; i++) {
CamelMimeMessage *message;
CamelMessageInfo *info;
-
+
if (!(info = camel_folder_get_message_info (old_folder, uids->pdata[i])))
continue;
-
+
if (!(message = camel_folder_get_message (old_folder, uids->pdata[i], ex))) {
camel_folder_free_message_info (old_folder, info);
camel_folder_free_uids (old_folder, uids);
goto fatal;
}
-
+
camel_folder_append_message (new_folder, message, info, NULL, ex);
camel_folder_free_message_info (old_folder, info);
camel_object_unref (message);
-
+
if (camel_exception_is_set (ex))
break;
-
+
em_migrate_set_progress (((double) i + 1) / ((double) uids->len));
}
-
+
camel_folder_free_uids (old_folder, uids);
-
+
if (camel_exception_is_set (ex))
goto fatal;
}
@@ -1815,33 +1815,33 @@ em_migrate_dir (EMMigrateSession *session, const char *dirname, const char *full
g_free (path);
return 0;
}
-
+
if (!(dir = opendir (path))) {
g_free (path);
return 0;
}
-
+
while (res == 0 && (dent = readdir (dir))) {
char *full_path;
char *name;
if (dent->d_name[0] == '.')
continue;
-
+
full_path = g_strdup_printf ("%s/%s", path, dent->d_name);
if (stat (full_path, &st) == -1 || !S_ISDIR (st.st_mode)) {
g_free (full_path);
continue;
}
-
+
name = g_strdup_printf ("%s/%s", full_name, dent->d_name);
res = em_migrate_dir (session, full_path, name, ex);
g_free (full_path);
g_free (name);
}
-
+
closedir (dir);
-
+
g_free (path);
return res;
@@ -1861,27 +1861,27 @@ em_migrate_local_folders_1_4 (EMMigrateSession *session, CamelException *ex)
session->srcdir, g_strerror(errno));
return -1;
}
-
+
em_migrate_setup_progress_dialog ();
-
+
while (res == 0 && (dent = readdir (dir))) {
char *full_path;
-
+
if (dent->d_name[0] == '.')
continue;
-
+
full_path = g_strdup_printf ("%s/%s", session->srcdir, dent->d_name);
if (stat (full_path, &st) == -1 || !S_ISDIR (st.st_mode)) {
g_free (full_path);
continue;
}
-
+
res = em_migrate_dir (session, full_path, dent->d_name, ex);
g_free (full_path);
}
-
+
closedir (dir);
-
+
em_migrate_close_progress_dialog ();
return res;
@@ -1892,39 +1892,39 @@ upgrade_xml_uris_1_4 (const char *uri)
{
char *path, *prefix, *p;
CamelURL *url;
-
+
if (!strncmp (uri, "file:", 5)) {
url = camel_url_new (uri, NULL);
camel_url_set_protocol (url, "email");
camel_url_set_user (url, "local");
camel_url_set_host (url, "local");
-
+
prefix = g_build_filename (g_get_home_dir (), "evolution", "local", NULL);
if (strncmp (url->path, prefix, strlen (prefix)) != 0) {
/* uri is busticated - user probably copied from another user's home directory */
camel_url_free (url);
g_free (prefix);
-
+
return g_strdup (uri);
}
path = g_strdup (url->path + strlen (prefix));
g_free (prefix);
-
+
/* modify the path in-place */
p = path + strlen (path) - 12;
while (p > path) {
if (!strncmp (p, "/subfolders/", 12))
memmove (p, p + 11, strlen (p + 11) + 1);
-
+
p--;
}
-
+
camel_url_set_path (url, path);
g_free (path);
-
+
path = camel_url_to_string (url, 0);
camel_url_free (url);
-
+
return path;
} else {
return em_uri_from_camel (uri);
@@ -1935,38 +1935,38 @@ static void
upgrade_vfolder_sources_1_4 (xmlDocPtr doc)
{
xmlNodePtr root, node;
-
+
if (!doc || !(root = xmlDocGetRootElement (doc)))
return;
-
+
if (!root->name || strcmp ((char *)root->name, "filteroptions") != 0) {
/* root node is not <filteroptions>, nothing to upgrade */
return;
}
-
+
if (!(node = xml_find_node (root, "ruleset"))) {
/* no ruleset node, nothing to upgrade */
return;
}
-
+
node = node->children;
while (node != NULL) {
if (node->name && !strcmp ((char *)node->name, "rule")) {
xmlNodePtr sources;
char *src;
-
+
if (!(src = (char *)xmlGetProp (node, (const unsigned char *)"source")))
src = (char *)xmlStrdup ((const unsigned char *)"local"); /* default to all local folders? */
-
+
xmlSetProp (node, (const unsigned char *)"source", (const unsigned char *)"incoming");
-
+
if (!(sources = xml_find_node (node, "sources")))
sources = xmlNewChild (node, NULL, (const unsigned char *)"sources", NULL);
-
+
xmlSetProp (sources, (const unsigned char *)"with", (unsigned char *)src);
xmlFree (src);
}
-
+
node = node->next;
}
}
@@ -1979,22 +1979,22 @@ get_nth_sig (int id)
EIterator *iter;
char *uid = NULL;
int i = 0;
-
+
list = mail_config_get_signatures ();
iter = e_list_get_iterator ((EList *) list);
-
+
while (e_iterator_is_valid (iter) && i < id) {
e_iterator_next (iter);
i++;
}
-
+
if (i == id && e_iterator_is_valid (iter)) {
sig = (ESignature *) e_iterator_get (iter);
uid = g_strdup (sig->uid);
}
-
+
g_object_unref (iter);
-
+
return uid;
}
@@ -2003,40 +2003,40 @@ em_upgrade_accounts_1_4 (void)
{
EAccountList *accounts;
EIterator *iter;
-
+
if (!(accounts = mail_config_get_accounts ()))
return;
-
+
iter = e_list_get_iterator ((EList *) accounts);
while (e_iterator_is_valid (iter)) {
EAccount *account = (EAccount *) e_iterator_get (iter);
char *url;
-
+
if (account->drafts_folder_uri) {
url = upgrade_xml_uris_1_4 (account->drafts_folder_uri);
g_free (account->drafts_folder_uri);
account->drafts_folder_uri = url;
}
-
+
if (account->sent_folder_uri) {
url = upgrade_xml_uris_1_4 (account->sent_folder_uri);
g_free (account->sent_folder_uri);
account->sent_folder_uri = url;
}
-
+
if (account->id->sig_uid && !strncmp (account->id->sig_uid, "::", 2)) {
int sig_id;
-
+
sig_id = strtol (account->id->sig_uid + 2, NULL, 10);
g_free (account->id->sig_uid);
account->id->sig_uid = get_nth_sig (sig_id);
}
-
+
e_iterator_next (iter);
}
-
+
g_object_unref (iter);
-
+
mail_config_save_accounts ();
}
@@ -2059,19 +2059,19 @@ em_migrate_pop_uid_caches_1_4 (const char *evolution_dir, CamelException *ex)
g_free(cache_dir);
return 0;
}
-
+
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Unable to open old POP keep-on-server data `%s': %s"),
cache_dir, g_strerror (errno));
g_free (cache_dir);
return -1;
}
-
+
oldpath = g_string_new (cache_dir);
g_string_append_c (oldpath, '/');
olen = oldpath->len;
g_free (cache_dir);
-
+
cache_dir = g_build_filename (evolution_dir, "mail", "pop", NULL);
if (g_mkdir_with_parents (cache_dir, 0777) == -1) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
@@ -2082,25 +2082,25 @@ em_migrate_pop_uid_caches_1_4 (const char *evolution_dir, CamelException *ex)
closedir (dir);
return -1;
}
-
+
newpath = g_string_new (cache_dir);
g_string_append_c (newpath, '/');
nlen = newpath->len;
g_free (cache_dir);
-
+
while (res == 0 && (dent = readdir (dir))) {
if (strncmp (dent->d_name, "cache-pop:__", 12) != 0)
continue;
-
+
g_string_truncate (oldpath, olen);
g_string_truncate (newpath, nlen);
-
+
g_string_append (oldpath, dent->d_name);
g_string_append (newpath, dent->d_name + 12);
-
+
/* strip the trailing '_' */
g_string_truncate (newpath, newpath->len - 1);
-
+
if (g_mkdir_with_parents (newpath->str, 0777) == -1
|| cp(oldpath->str, (g_string_append(newpath, "/uid-cache"))->str, FALSE, CP_UNIQUE)) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
@@ -2110,12 +2110,12 @@ em_migrate_pop_uid_caches_1_4 (const char *evolution_dir, CamelException *ex)
}
}
-
+
g_string_free (oldpath, TRUE);
g_string_free (newpath, TRUE);
-
+
closedir (dir);
-
+
return res;
}
@@ -2124,21 +2124,21 @@ em_migrate_imap_caches_1_4 (const char *evolution_dir, CamelException *ex)
{
char *src, *dest;
struct stat st;
-
+
src = g_build_filename (g_get_home_dir (), "evolution", "mail", "imap", NULL);
if (stat (src, &st) == -1 || !S_ISDIR (st.st_mode)) {
g_free (src);
return 0;
}
-
+
dest = g_build_filename (evolution_dir, "mail", "imap", NULL);
-
+
/* we don't care if this fails, it's only a cache... */
cp_r (src, dest, "summary", CP_OVERWRITE);
-
+
g_free (dest);
g_free (src);
-
+
return 0;
}
@@ -2151,14 +2151,14 @@ em_migrate_folder_expand_state_1_4 (const char *evolution_dir, CamelException *e
struct dirent *dent;
struct stat st;
DIR *dir;
-
+
srcpath = g_string_new (g_get_home_dir ());
g_string_append (srcpath, "/evolution/config");
if (stat (srcpath->str, &st) == -1 || !S_ISDIR (st.st_mode)) {
g_string_free (srcpath, TRUE);
return 0;
}
-
+
destpath = g_string_new (evolution_dir);
g_string_append (destpath, "/mail/config");
if (g_mkdir_with_parents (destpath->str, 0777) == -1 || !(dir = opendir (srcpath->str))) {
@@ -2166,49 +2166,49 @@ em_migrate_folder_expand_state_1_4 (const char *evolution_dir, CamelException *e
g_string_free (srcpath, TRUE);
return 0;
}
-
+
g_string_append (srcpath, "/et-expanded-");
slen = srcpath->len;
g_string_append (destpath, "/et-expanded-");
dlen = destpath->len;
-
+
evo14_mbox_root = g_build_filename (g_get_home_dir (), "evolution", "local", NULL);
e_filename_make_safe (evo14_mbox_root);
rlen = strlen (evo14_mbox_root);
evo14_mbox_root = g_realloc (evo14_mbox_root, rlen + 2);
evo14_mbox_root[rlen++] = '_';
evo14_mbox_root[rlen] = '\0';
-
+
while ((dent = readdir (dir))) {
char *full_name, *inptr, *buf = NULL;
const char *filename;
GString *new;
-
+
if (strncmp (dent->d_name, "et-expanded-", 12) != 0)
continue;
-
+
if (!strncmp (dent->d_name + 12, "file:", 5)) {
/* need to munge the filename */
inptr = dent->d_name + 17;
-
+
if (!strncmp (inptr, evo14_mbox_root, rlen)) {
/* this should always be the case afaik... */
inptr += rlen;
new = g_string_new ("mbox:");
g_string_append_printf (new, "%s/mail/local#", evolution_dir);
-
+
full_name = g_strdup (inptr);
inptr = full_name + strlen (full_name) - 12;
while (inptr > full_name) {
if (!strncmp (inptr, "_subfolders_", 12))
memmove (inptr, inptr + 11, strlen (inptr + 11) + 1);
-
+
inptr--;
}
-
+
g_string_append (new, full_name);
g_free (full_name);
-
+
filename = buf = new->str;
g_string_free (new, FALSE);
e_filename_make_safe (buf);
@@ -2220,23 +2220,23 @@ em_migrate_folder_expand_state_1_4 (const char *evolution_dir, CamelException *e
/* no munging needed */
filename = dent->d_name + 12;
}
-
+
g_string_append (srcpath, dent->d_name + 12);
g_string_append (destpath, filename);
g_free (buf);
-
+
cp (srcpath->str, destpath->str, FALSE, CP_UNIQUE);
-
+
g_string_truncate (srcpath, slen);
g_string_truncate (destpath, dlen);
}
-
+
closedir (dir);
-
+
g_free (evo14_mbox_root);
g_string_free (destpath, TRUE);
g_string_free (srcpath, TRUE);
-
+
return 0;
}
@@ -2249,14 +2249,14 @@ em_migrate_folder_view_settings_1_4 (const char *evolution_dir, CamelException *
struct dirent *dent;
struct stat st;
DIR *dir;
-
+
srcpath = g_string_new (g_get_home_dir ());
g_string_append (srcpath, "/evolution/views/mail");
if (stat (srcpath->str, &st) == -1 || !S_ISDIR (st.st_mode)) {
g_string_free (srcpath, TRUE);
return 0;
}
-
+
destpath = g_string_new (evolution_dir);
g_string_append (destpath, "/mail/views");
if (g_mkdir_with_parents (destpath->str, 0777) == -1 || !(dir = opendir (srcpath->str))) {
@@ -2264,31 +2264,31 @@ em_migrate_folder_view_settings_1_4 (const char *evolution_dir, CamelException *
g_string_free (srcpath, TRUE);
return 0;
}
-
+
g_string_append_c (srcpath, '/');
slen = srcpath->len;
g_string_append_c (destpath, '/');
dlen = destpath->len;
-
+
evo14_mbox_root = g_build_filename (g_get_home_dir (), "evolution", "local", NULL);
e_filename_make_safe (evo14_mbox_root);
rlen = strlen (evo14_mbox_root);
evo14_mbox_root = g_realloc (evo14_mbox_root, rlen + 2);
evo14_mbox_root[rlen++] = '_';
evo14_mbox_root[rlen] = '\0';
-
+
while ((dent = readdir (dir))) {
char *full_name, *inptr, *buf = NULL;
const char *filename, *ext;
size_t prelen = 0;
GString *new;
-
+
if (dent->d_name[0] == '.')
continue;
-
+
if (!(ext = strrchr (dent->d_name, '.')))
continue;
-
+
if (!strcmp (ext, ".galview") || !strcmp ((char *)dent->d_name, "galview.xml")) {
/* just copy the file */
filename = dent->d_name;
@@ -2296,7 +2296,7 @@ em_migrate_folder_view_settings_1_4 (const char *evolution_dir, CamelException *
} else if (strcmp (ext, ".xml") != 0) {
continue;
}
-
+
if (!strncmp ((const char *)dent->d_name, "current_view-", 13)) {
prelen = 13;
} else if (!strncmp ((const char *)dent->d_name, "custom_view-", 12)) {
@@ -2305,29 +2305,29 @@ em_migrate_folder_view_settings_1_4 (const char *evolution_dir, CamelException *
/* huh? wtf is this file? */
continue;
}
-
+
if (!strncmp (dent->d_name + prelen, "file:", 5)) {
/* need to munge the filename */
inptr = dent->d_name + prelen + 5;
-
+
if (!strncmp (inptr, evo14_mbox_root, rlen)) {
/* this should always be the case afaik... */
inptr += rlen;
new = g_string_new ("mbox:");
g_string_append_printf (new, "%s/mail/local#", evolution_dir);
-
+
full_name = g_strdup (inptr);
inptr = full_name + strlen (full_name) - 12;
while (inptr > full_name) {
if (!strncmp (inptr, "_subfolders_", 12))
memmove (inptr, inptr + 11, strlen (inptr + 11) + 1);
-
+
inptr--;
}
-
+
g_string_append (new, full_name);
g_free (full_name);
-
+
filename = buf = new->str;
g_string_free (new, FALSE);
e_filename_make_safe (buf);
@@ -2339,26 +2339,26 @@ em_migrate_folder_view_settings_1_4 (const char *evolution_dir, CamelException *
/* no munging needed */
filename = dent->d_name + prelen;
}
-
+
copy:
g_string_append (srcpath, dent->d_name);
if (prelen > 0)
g_string_append_len (destpath, dent->d_name, prelen);
g_string_append (destpath, filename);
g_free (buf);
-
+
cp (srcpath->str, destpath->str, FALSE, CP_UNIQUE);
-
+
g_string_truncate (srcpath, slen);
g_string_truncate (destpath, dlen);
}
-
+
closedir (dir);
-
+
g_free (evo14_mbox_root);
g_string_free (destpath, TRUE);
g_string_free (srcpath, TRUE);
-
+
return 0;
}
@@ -2533,7 +2533,7 @@ remove_system_searches(xmlDocPtr searches)
if (!(node = xml_find_node(node, "ruleset")))
return;
-
+
node = node->children;
while (node != NULL) {
xmlNodePtr nnode = node->next;
@@ -2548,9 +2548,9 @@ remove_system_searches(xmlDocPtr searches)
}
xmlFree (src);
}
-
+
node = nnode;
- }
+ }
}
static int
@@ -2568,9 +2568,9 @@ em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders
camel_provider_init();
session = (EMMigrateSession *) em_migrate_session_new (path);
g_free (path);
-
- session->srcdir = g_build_filename (g_get_home_dir (), "evolution", "local", NULL);
-
+
+ session->srcdir = g_build_filename (g_get_home_dir (), "evolution", "local", NULL);
+
path = g_strdup_printf ("mbox:%s/.evolution/mail/local", g_get_home_dir ());
if (stat (path + 5, &st) == -1) {
if (errno != ENOENT || g_mkdir_with_parents (path + 5, 0777) == -1) {
@@ -2583,7 +2583,7 @@ em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders
return -1;
}
}
-
+
camel_exception_init (&lex);
if (!(session->store = camel_session_get_store ((CamelSession *) session, path, &lex))) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
@@ -2596,17 +2596,17 @@ em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders
return -1;
}
g_free (path);
-
+
if (em_migrate_local_folders_1_4 (session, ex) == -1)
return -1;
-
+
camel_object_unref (session->store);
g_free (session->srcdir);
-
+
camel_object_unref (session);
-
+
em_upgrade_accounts_1_4();
-
+
upgrade_xml_uris(filters, upgrade_xml_uris_1_4);
upgrade_vfolder_sources_1_4(vfolders);
upgrade_xml_uris(vfolders, upgrade_xml_uris_1_4);
@@ -2621,10 +2621,10 @@ em_migrate_1_4 (const char *evolution_dir, xmlDocPtr filters, xmlDocPtr vfolders
g_free(path);
xmlFreeDoc(searches);
}
-
+
if (em_migrate_pop_uid_caches_1_4 (evolution_dir, ex) == -1)
return -1;
-
+
/* these are non-fatal */
em_migrate_imap_caches_1_4 (evolution_dir, ex);
camel_exception_clear(ex);
@@ -2685,7 +2685,7 @@ emm_setup_initial(const char *evolution_dir)
/* FIXME: create default folders and stuff... */
d(printf("Setting up initial mail tree\n"));
-
+
base = g_build_filename(evolution_dir, "mail", "local", NULL);
if (g_mkdir_with_parents(base, 0777) == -1 && errno != EEXIST) {
g_free(base);
@@ -2733,28 +2733,28 @@ em_migrate (const char *evolution_dir, int major, int minor, int revision, Camel
{
struct stat st;
char *path;
-
+
/* make sure ~/.evolution/mail exists */
path = g_build_filename (evolution_dir, "mail", NULL);
if (g_stat (path, &st) == -1) {
if (errno != ENOENT || g_mkdir_with_parents (path, 0777) == -1) {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Unable to create local mail folders at `%s': %s"),
path, g_strerror (errno));
g_free (path);
return -1;
}
}
-
+
g_free (path);
-
+
if (major == 0)
return emm_setup_initial(evolution_dir);
#ifndef G_OS_WIN32
if (major == 1 && minor < 5) {
xmlDocPtr config_xmldb = NULL, filters, vfolders;
-
+
path = g_build_filename (g_get_home_dir (), "evolution", NULL);
if (minor <= 2 && !(config_xmldb = emm_load_xml (path, "config.xmldb"))) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
@@ -2766,7 +2766,7 @@ em_migrate (const char *evolution_dir, int major, int minor, int revision, Camel
filters = emm_load_xml (path, "filters.xml");
vfolders = emm_load_xml (path, "vfolders.xml");
g_free (path);
-
+
if (minor == 0) {
if (em_migrate_1_0 (evolution_dir, config_xmldb, filters, vfolders, ex) == -1) {
xmlFreeDoc (config_xmldb);
@@ -2775,7 +2775,7 @@ em_migrate (const char *evolution_dir, int major, int minor, int revision, Camel
return -1;
}
}
-
+
if (minor <= 2) {
if (em_migrate_1_2 (evolution_dir, config_xmldb, filters, vfolders, ex) == -1) {
xmlFreeDoc (config_xmldb);
@@ -2783,10 +2783,10 @@ em_migrate (const char *evolution_dir, int major, int minor, int revision, Camel
xmlFreeDoc (vfolders);
return -1;
}
-
+
xmlFreeDoc (config_xmldb);
}
-
+
if (minor <= 4) {
if (em_migrate_1_4 (evolution_dir, filters, vfolders, ex) == -1) {
xmlFreeDoc (filters);
@@ -2794,19 +2794,19 @@ em_migrate (const char *evolution_dir, int major, int minor, int revision, Camel
return -1;
}
}
-
+
path = g_build_filename (evolution_dir, "mail", NULL);
-
+
if (filters) {
emm_save_xml (filters, path, "filters.xml");
xmlFreeDoc (filters);
}
-
+
if (vfolders) {
emm_save_xml (vfolders, path, "vfolders.xml");
xmlFreeDoc (vfolders);
}
-
+
g_free (path);
}