aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog13
-rw-r--r--mail/mail-vfolder.c75
2 files changed, 56 insertions, 32 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index a7adecd251..7b8809f848 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,16 @@
+2005-01-14 Not Zed <NotZed@Ximian.com>
+
+ ** Related to changes for #65178.
+
+ * mail-vfolder.c (mv_find_folder): changed from my_list_find, take
+ store arg and use camel_Store_Folder_uri_equal() instead of wrong
+ uri_cmp function.
+ (mail_vfolder_delete_uri): same.
+ (mail_vfolder_rename_uri): same.
+ (uri_is_ignore): take store arg, and same as above. use the right
+ uri for checking sent folder.
+ (mail_vfolder_*): convert to storing uri's in camel form.
+
2005-01-13 Not Zed <NotZed@Ximian.com>
** See bug #71029.
diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c
index e600a34635..bbb839eb9a 100644
--- a/mail/mail-vfolder.c
+++ b/mail/mail-vfolder.c
@@ -321,12 +321,11 @@ vfolder_adduri(const char *uri, GList *folders, int remove)
/* ********************************************************************** */
-/* So, uh, apparently g_list_find_custom expect the compare func to return 0 to mean true? */
static GList *
-my_list_find(GList *l, const char *uri, GCompareFunc cmp)
+mv_find_folder(GList *l, CamelStore *store, const char *uri)
{
while (l) {
- if (cmp(l->data, uri))
+ if (camel_store_folder_uri_equal(store, l->data, uri))
break;
l = l->next;
}
@@ -335,7 +334,7 @@ my_list_find(GList *l, const char *uri, GCompareFunc cmp)
/* uri is a camel uri */
static int
-uri_is_ignore(const char *uri, GCompareFunc uri_cmp)
+uri_is_ignore(CamelStore *store, const char *uri)
{
EAccountList *accounts;
EAccount *account;
@@ -347,9 +346,9 @@ uri_is_ignore(const char *uri, GCompareFunc uri_cmp)
mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_SENT),
mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_DRAFTS)));
- found = uri_cmp(mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_OUTBOX), uri)
- || uri_cmp(mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_SENT), uri)
- || uri_cmp(mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_DRAFTS), uri);
+ found = camel_store_folder_uri_equal(store, mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_OUTBOX), uri)
+ || camel_store_folder_uri_equal(store, mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_SENT), uri)
+ || camel_store_folder_uri_equal(store, mail_component_get_folder_uri(NULL, MAIL_COMPONENT_FOLDER_DRAFTS), uri);
if (found)
return found;
@@ -357,14 +356,24 @@ uri_is_ignore(const char *uri, GCompareFunc uri_cmp)
accounts = mail_config_get_accounts ();
iter = e_list_get_iterator ((EList *) accounts);
while (e_iterator_is_valid (iter)) {
+ char *curi;
+
account = (EAccount *) e_iterator_get (iter);
-
+
d(printf("checking sent_folder_uri '%s' == '%s'\n",
account->sent_folder_uri ? account->sent_folder_uri : "empty", uri));
-
- found = (account->sent_folder_uri && uri_cmp (account->sent_folder_uri, uri))
- || (account->drafts_folder_uri && uri_cmp (account->drafts_folder_uri, uri));
-
+
+ if (account->sent_folder_uri) {
+ curi = em_uri_to_camel(account->sent_folder_uri);
+ found = camel_store_folder_uri_equal(store, uri, curi);
+ g_free(curi);
+ }
+ if (!found && account->drafts_folder_uri) {
+ curi = em_uri_to_camel(account->drafts_folder_uri);
+ found = camel_store_folder_uri_equal(store, uri, curi);
+ g_free(curi);
+ }
+
if (found)
break;
@@ -420,7 +429,6 @@ mail_vfolder_add_uri(CamelStore *store, const char *curi, int remove)
CamelVeeFolder *vf;
GList *folders = NULL, *link;
int remote = (((CamelService *)store)->provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0;
- GCompareFunc uri_cmp = CAMEL_STORE_CLASS(CAMEL_OBJECT_GET_CLASS(store))->compare_folder_name;
int is_ignore;
char *uri;
@@ -432,7 +440,7 @@ mail_vfolder_add_uri(CamelStore *store, const char *curi, int remove)
g_assert(pthread_self() == mail_gui_thread);
- is_ignore = uri_is_ignore(curi, uri_cmp);
+ is_ignore = uri_is_ignore(store, curi);
LOCK();
@@ -443,12 +451,12 @@ mail_vfolder_add_uri(CamelStore *store, const char *curi, int remove)
is_ignore = TRUE;
} else if (remove) {
if (remote) {
- if ((link = my_list_find(source_folders_remote, (void *)uri, uri_cmp)) != NULL) {
+ if ((link = mv_find_folder(source_folders_remote, store, curi)) != NULL) {
g_free(link->data);
source_folders_remote = g_list_remove_link(source_folders_remote, link);
}
} else {
- if ((link = my_list_find(source_folders_local, (void *)uri, uri_cmp)) != NULL) {
+ if ((link = mv_find_folder(source_folders_local, store, curi)) != NULL) {
g_free(link->data);
source_folders_local = g_list_remove_link(source_folders_local, link);
}
@@ -456,11 +464,11 @@ mail_vfolder_add_uri(CamelStore *store, const char *curi, int remove)
} else if (!is_ignore) {
/* we ignore drafts/sent/outbox here */
if (remote) {
- if (my_list_find(source_folders_remote, (void *)uri, uri_cmp) == NULL)
- source_folders_remote = g_list_prepend(source_folders_remote, g_strdup(uri));
+ if (mv_find_folder(source_folders_remote, store, curi) == NULL)
+ source_folders_remote = g_list_prepend(source_folders_remote, g_strdup(curi));
} else {
- if (my_list_find(source_folders_local, (void *)uri, uri_cmp) == NULL)
- source_folders_local = g_list_prepend(source_folders_local, g_strdup(uri));
+ if (mv_find_folder(source_folders_local, store, curi) == NULL)
+ source_folders_local = g_list_prepend(source_folders_local, g_strdup(curi));
}
}
@@ -481,15 +489,14 @@ mail_vfolder_add_uri(CamelStore *store, const char *curi, int remove)
|| (((EMVFolderRule *)rule)->with == EM_VFOLDER_RULE_WITH_LOCAL_REMOTE_ACTIVE)))
found = TRUE;
- /* we check using the store uri_cmp since its more accurate */
source = NULL;
while (!found && (source = em_vfolder_rule_next_source((EMVFolderRule *)rule, source))) {
- char *esource;
+ char *csource;
- esource = em_uri_from_camel(source);
- found = uri_cmp(uri, esource);
- d(printf(found?" '%s' == '%s'?\n":" '%s' != '%s'\n", uri, esource));
- g_free(esource);
+ csource = em_uri_to_camel(source);
+ found = camel_store_folder_uri_equal(store, curi, csource);
+ d(printf(found?" '%s' == '%s'?\n":" '%s' != '%s'\n", curi, csource));
+ g_free(csource);
}
if (found) {
@@ -512,7 +519,6 @@ mail_vfolder_add_uri(CamelStore *store, const char *curi, int remove)
void
mail_vfolder_delete_uri(CamelStore *store, const char *curi)
{
- GCompareFunc uri_cmp = CAMEL_STORE_CLASS(CAMEL_OBJECT_GET_CLASS(store))->compare_folder_name;
FilterRule *rule;
const char *source;
CamelVeeFolder *vf;
@@ -538,9 +544,11 @@ mail_vfolder_delete_uri(CamelStore *store, const char *curi)
while ((rule = rule_context_next_rule ((RuleContext *) context, rule, NULL))) {
source = NULL;
while ((source = em_vfolder_rule_next_source ((EMVFolderRule *) rule, source))) {
+ char *csource = em_uri_to_camel(source);
+
/* Remove all sources that match, ignore changed events though
because the adduri call above does the work async */
- if (uri_cmp (uri, source)) {
+ if (camel_store_folder_uri_equal(store, curi, csource)) {
vf = g_hash_table_lookup (vfolder_hash, rule->name);
g_assert (vf != NULL);
g_signal_handlers_disconnect_matched (rule, G_SIGNAL_MATCH_FUNC|G_SIGNAL_MATCH_DATA, 0,
@@ -550,15 +558,16 @@ mail_vfolder_delete_uri(CamelStore *store, const char *curi)
g_string_append_printf (changed, " %s\n", rule->name);
source = NULL;
}
+ g_free(csource);
}
}
- if ((link = my_list_find(source_folders_remote, (void *)uri, uri_cmp)) != NULL) {
+ if ((link = mv_find_folder(source_folders_remote, store, curi)) != NULL) {
g_free(link->data);
source_folders_remote = g_list_remove_link(source_folders_remote, link);
}
- if ((link = my_list_find(source_folders_local, (void *)uri, uri_cmp)) != NULL) {
+ if ((link = mv_find_folder(source_folders_local, store, curi)) != NULL) {
g_free(link->data);
source_folders_local = g_list_remove_link(source_folders_local, link);
}
@@ -588,7 +597,6 @@ mail_vfolder_delete_uri(CamelStore *store, const char *curi)
void
mail_vfolder_rename_uri(CamelStore *store, const char *cfrom, const char *cto)
{
- GCompareFunc uri_cmp = CAMEL_STORE_CLASS(CAMEL_OBJECT_GET_CLASS(store))->compare_folder_name;
FilterRule *rule;
const char *source;
CamelVeeFolder *vf;
@@ -612,9 +620,11 @@ mail_vfolder_rename_uri(CamelStore *store, const char *cfrom, const char *cto)
while ( (rule = rule_context_next_rule((RuleContext *)context, rule, NULL)) ) {
source = NULL;
while ( (source = em_vfolder_rule_next_source((EMVFolderRule *)rule, source)) ) {
+ char *csource = em_uri_to_camel(source);
+
/* Remove all sources that match, ignore changed events though
because the adduri call above does the work async */
- if (uri_cmp(from, source)) {
+ if (camel_store_folder_uri_equal(store, cfrom, csource)) {
d(printf("Vfolder '%s' used '%s' ('%s') now uses '%s'\n", rule->name, source, from, to));
vf = g_hash_table_lookup(vfolder_hash, rule->name);
g_assert(vf);
@@ -626,6 +636,7 @@ mail_vfolder_rename_uri(CamelStore *store, const char *cfrom, const char *cto)
changed++;
source = NULL;
}
+ g_free(csource);
}
}