diff options
-rw-r--r-- | mail/ChangeLog | 12 | ||||
-rw-r--r-- | mail/mail-folder-cache.c | 16 | ||||
-rw-r--r-- | mail/mail-ops.c | 31 |
3 files changed, 44 insertions, 15 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index e5ff4dbe80..42112d8cd4 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,15 @@ +2002-07-23 Peter Williams <peterw@ximian.com> + + * mail-ops.c (get_store_get): Call camel_session_get_service + instead of camel_session_get_store, as _get_store calls + _get_service_connected which is not what we want to do on startup. + (set_offline_do): Rework the logic here. It was failing when + trying to go online with a disco store that couldn't work offline. + + * mail-folder-cache.c (mail_note_store): If we're using an offline + (well, non-online) disco store that cannot work offline, don't get + the folderinfo as that will fail. + 2002-07-24 Radek Doulik <rodo@ximian.com> * mail-composer-prefs.c (sig_add): use diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c index 0e352bd634..5d7f1c879e 100644 --- a/mail/mail-folder-cache.c +++ b/mail/mail-folder-cache.c @@ -36,6 +36,7 @@ #include <camel/camel-folder.h> #include <camel/camel-vtrash-folder.h> #include <camel/camel-vee-store.h> +#include <camel/camel-disco-store.h> #include <gal/util/e-unicode-i18n.h> #include "mail-mt.h" @@ -761,12 +762,17 @@ mail_note_store(CamelStore *store, EvolutionStorage *storage, GNOME_Evolution_St camel_object_hook_event((CamelObject *)store, "folder_unsubscribed", store_folder_unsubscribed, NULL); } - ud = g_malloc(sizeof(*ud)); - ud->done = done; - ud->data = data; - ud->id = mail_get_folderinfo(store, update_folders, ud); - e_dlist_addtail(&si->folderinfo_updates, (EDListNode *)ud); + if (!CAMEL_IS_DISCO_STORE (store) || + camel_disco_store_status (CAMEL_DISCO_STORE (store)) == CAMEL_DISCO_STORE_ONLINE || + camel_disco_store_can_work_offline (CAMEL_DISCO_STORE (store))) { + ud = g_malloc(sizeof(*ud)); + ud->done = done; + ud->data = data; + ud->id = mail_get_folderinfo(store, update_folders, ud); + + e_dlist_addtail(&si->folderinfo_updates, (EDListNode *)ud); + } UNLOCK(info_lock); } diff --git a/mail/mail-ops.c b/mail/mail-ops.c index f5dc731dde..c3b652d6fc 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -1337,7 +1337,12 @@ get_store_get (struct _mail_msg *mm) { struct _get_store_msg *m = (struct _get_store_msg *)mm; - m->store = camel_session_get_store (session, m->uri, &mm->ex); + /*camel_session_get_store connects us, which we don't want to do on startup. */ + + m->store = camel_session_get_service (session, m->uri, + CAMEL_PROVIDER_STORE, + &mm->ex); + } static void @@ -2205,17 +2210,23 @@ static void set_offline_do(struct _mail_msg *mm) { struct _set_offline_msg *m = (struct _set_offline_msg *)mm; - if (!CAMEL_IS_DISCO_STORE (m->store) || - !camel_disco_store_can_work_offline (CAMEL_DISCO_STORE (m->store))) { - if (m->offline) { - camel_service_disconnect (CAMEL_SERVICE (m->store), - TRUE, &mm->ex); + if (CAMEL_IS_DISCO_STORE (m->store)) { + if (!m->offline) { + camel_disco_store_set_status (CAMEL_DISCO_STORE (m->store), + CAMEL_DISCO_STORE_ONLINE, + &mm->ex); + return; + } else if (camel_disco_store_can_work_offline (CAMEL_DISCO_STORE (m->store))) { + camel_disco_store_set_status (CAMEL_DISCO_STORE (m->store), + CAMEL_DISCO_STORE_OFFLINE, + &mm->ex); + return; } - } else { - camel_disco_store_set_status (CAMEL_DISCO_STORE (m->store), - m->offline ? CAMEL_DISCO_STORE_OFFLINE : CAMEL_DISCO_STORE_ONLINE, - &mm->ex); } + + if (m->offline) + camel_service_disconnect (CAMEL_SERVICE (m->store), + TRUE, &mm->ex); } static void set_offline_done(struct _mail_msg *mm) |