aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-config.c
diff options
context:
space:
mode:
authorPeter Williams <peterw@ximian.com>2002-08-10 00:50:07 +0800
committerPeter Williams <peterw@src.gnome.org>2002-08-10 00:50:07 +0800
commitc585c8203f54c07e91104bdb6623124e5f795a2d (patch)
tree8bc54c699f5a540e5094f8af2068ed5b4f678499 /mail/mail-config.c
parenta22468499591d5279ed0cfda4455032270f0ba3d (diff)
downloadgsoc2013-evolution-c585c8203f54c07e91104bdb6623124e5f795a2d.tar.gz
gsoc2013-evolution-c585c8203f54c07e91104bdb6623124e5f795a2d.tar.zst
gsoc2013-evolution-c585c8203f54c07e91104bdb6623124e5f795a2d.zip
When a URI is changed, try to copy over threaded view settings, preview
2002-08-09 Peter Williams <peterw@ximian.com> * mail-config.c (mail_config_uri_renamed): When a URI is changed, try to copy over threaded view settings, preview pane shown settings, headers, hide state, tree expansion, and GAL view files. (uri_to_evname): New utility function. svn path=/trunk/; revision=17751
Diffstat (limited to 'mail/mail-config.c')
-rw-r--r--mail/mail-config.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/mail/mail-config.c b/mail/mail-config.c
index 491885f32c..0db4017ad8 100644
--- a/mail/mail-config.c
+++ b/mail/mail-config.c
@@ -2442,12 +2442,39 @@ mail_config_get_default_transport (void)
return NULL;
}
+static char *
+uri_to_evname (const char *uri, const char *prefix)
+{
+ char *safe;
+ char *tmp;
+
+ safe = g_strdup (uri);
+ e_filename_make_safe (safe);
+ /* blah, easiest thing to do */
+ if (prefix[0] == '*')
+ tmp = g_strdup_printf ("%s/%s%s.xml", evolution_dir, prefix + 1, safe);
+ else
+ tmp = g_strdup_printf ("%s/%s%s", evolution_dir, prefix, safe);
+ g_free (safe);
+ return tmp;
+}
+
void
mail_config_uri_renamed(GCompareFunc uri_cmp, const char *old, const char *new)
{
MailConfigAccount *ac;
const GSList *l;
int work = 0;
+ gpointer oldkey, newkey, hashkey;
+ gpointer val;
+ char *oldname, *newname;
+ char *cachenames[] = { "config/hidestate-",
+ "config/et-expanded-",
+ "config/et-header-",
+ "*views/mail/current_view-",
+ "*views/mail/custom_view-",
+ NULL };
+ int i;
l = mail_config_get_accounts();
while (l) {
@@ -2465,6 +2492,43 @@ mail_config_uri_renamed(GCompareFunc uri_cmp, const char *old, const char *new)
l = l->next;
}
+ oldkey = uri_to_key (old);
+ newkey = uri_to_key (new);
+
+ /* call this to load the hash table and the key */
+ mail_config_get_thread_list (old);
+ if (g_hash_table_lookup_extended (config->threaded_hash, oldkey, &hashkey, &val)) {
+ /*printf ("changing key in threaded_hash\n");*/
+ g_hash_table_remove (config->threaded_hash, hashkey);
+ g_hash_table_insert (config->threaded_hash, newkey, val);
+ work = 2;
+ }
+
+ /* ditto */
+ mail_config_get_show_preview (old);
+ if (g_hash_table_lookup_extended (config->preview_hash, oldkey, &hashkey, &val)) {
+ /*printf ("changing key in preview_hash\n");*/
+ g_hash_table_remove (config->preview_hash, hashkey);
+ g_hash_table_insert (config->preview_hash, newkey, val);
+ work = 2;
+ }
+
+ g_free (oldkey);
+ if (work != 2)
+ g_free (newkey);
+
+ /* ignore return values or if the files exist or
+ * not, doesn't matter */
+
+ for (i = 0; cachenames[i]; i++) {
+ oldname = uri_to_evname (old, cachenames[i]);
+ newname = uri_to_evname (new, cachenames[i]);
+ /*printf ("** renaming %s to %s\n", oldname, newname);*/
+ rename (oldname, newname);
+ g_free (oldname);
+ g_free (newname);
+ }
+
/* nasty ... */
if (work)
mail_config_write();