From 0c43bcb20b82f8da6e6ffb71f85d27b251537e79 Mon Sep 17 00:00:00 2001 From: Not Zed Date: Wed, 24 Jul 2002 07:21:15 +0000 Subject: Propagate name changes or removes to the mail config. #15951. Doesn't 2002-07-24 Not Zed * mail-folder-cache.c (real_flush_updates): Propagate name changes or removes to the mail config. #15951. Doesn't enitrely work for local folders, because they are never renamed only removed and added thanks to the shell's api. * mail-config.c (mail_config_uri_renamed): If a store folder is renamed, this checks for any config that needs updating, so far sent and drafts folders. (mail_config_uri_deleted): Same, for deleted folders. svn path=/trunk/; revision=17568 --- mail/ChangeLog | 12 ++++++++++ mail/mail-config.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ mail/mail-config.h | 5 +++++ mail/mail-folder-cache.c | 3 +++ 4 files changed, 78 insertions(+) diff --git a/mail/ChangeLog b/mail/ChangeLog index 340e595bf7..0635273d3d 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,15 @@ +2002-07-24 Not Zed + + * mail-folder-cache.c (real_flush_updates): Propagate name changes + or removes to the mail config. #15951. Doesn't enitrely work for + local folders, because they are never renamed only removed and + added thanks to the shell's api. + + * mail-config.c (mail_config_uri_renamed): If a store folder is + renamed, this checks for any config that needs updating, so far + sent and drafts folders. + (mail_config_uri_deleted): Same, for deleted folders. + 2002-07-24 Jeffrey Stedfast * mail-format.c (handle_multipart_encrypted): Commit a fix that I diff --git a/mail/mail-config.c b/mail/mail-config.c index 9e639ee2a5..a6b47e92ad 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -2420,6 +2420,64 @@ mail_config_get_default_transport (void) return NULL; } +void +mail_config_uri_renamed(GCompareFunc uri_cmp, const char *old, const char *new) +{ + MailConfigAccount *ac; + const GSList *l; + int work = 0; + + l = mail_config_get_accounts(); + while (l) { + ac = l->data; + if (ac->sent_folder_uri && uri_cmp(ac->sent_folder_uri, old)) { + g_free(ac->sent_folder_uri); + ac->sent_folder_uri = g_strdup(new); + work = 1; + } + if (ac->drafts_folder_uri && uri_cmp(ac->drafts_folder_uri, old)) { + g_free(ac->drafts_folder_uri); + ac->drafts_folder_uri = g_strdup(new); + work = 1; + } + l = l->next; + } + + /* nasty ... */ + if (work) + mail_config_write(); +} + +void +mail_config_uri_deleted(GCompareFunc uri_cmp, const char *uri) +{ + MailConfigAccount *ac; + const GSList *l; + int work = 0; + /* assumes these can't be removed ... */ + extern char *default_sent_folder_uri, *default_drafts_folder_uri; + + l = mail_config_get_accounts(); + while (l) { + ac = l->data; + if (ac->sent_folder_uri && uri_cmp(ac->sent_folder_uri, uri)) { + g_free(ac->sent_folder_uri); + ac->sent_folder_uri = g_strdup(default_sent_folder_uri); + work = 1; + } + if (ac->drafts_folder_uri && uri_cmp(ac->drafts_folder_uri, uri)) { + g_free(ac->drafts_folder_uri); + ac->drafts_folder_uri = g_strdup(default_drafts_folder_uri); + work = 1; + } + l = l->next; + } + + /* nasty again */ + if (work) + mail_config_write(); +} + GSList * mail_config_get_sources (void) { diff --git a/mail/mail-config.h b/mail/mail-config.h index b6dd15bd80..1e4699f773 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -274,6 +274,11 @@ const MailConfigIdentity *mail_config_get_default_identity (void); const MailConfigService *mail_config_get_default_transport (void); +/* uri's got changed by the store, etc */ +void mail_config_uri_renamed(GCompareFunc uri_cmp, const char *old, const char *new); +void mail_config_uri_deleted(GCompareFunc uri_cmp, const char *uri); + + GtkType evolution_mail_config_get_type (void); /* convenience functions to help ease the transition over to the new codebase */ diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c index 91001fa577..0e352bd634 100644 --- a/mail/mail-folder-cache.c +++ b/mail/mail-folder-cache.c @@ -45,6 +45,7 @@ /* For notifications of changes */ #include "mail-vfolder.h" #include "mail-autofilter.h" +#include "mail-config.h" #define w(x) #define d(x) /*(printf("%s(%d):%s: ", __FILE__, __LINE__, __PRETTY_FUNCTION__), (x))*/ @@ -156,6 +157,7 @@ real_flush_updates(void *o, void *event_data, void *data) if (up->delete) { mail_vfolder_delete_uri(up->store, up->uri); mail_filter_delete_uri(up->store, up->uri); + mail_config_uri_deleted(CAMEL_STORE_CLASS(CAMEL_OBJECT_GET_CLASS(up->store))->compare_folder_name, up->uri); } else mail_vfolder_add_uri(up->store, up->uri, TRUE); } else { @@ -173,6 +175,7 @@ real_flush_updates(void *o, void *event_data, void *data) d(printf("renaming folder '%s' to '%s'\n", up->olduri, up->uri)); mail_vfolder_rename_uri(up->store, up->olduri, up->uri); mail_filter_rename_uri(up->store, up->olduri, up->uri); + mail_config_uri_renamed(CAMEL_STORE_CLASS(CAMEL_OBJECT_GET_CLASS(up->store))->compare_folder_name, up->olduri, up->uri); } if (up->name == NULL) { -- cgit v1.2.3