diff options
author | Not Zed <NotZed@Ximian.com> | 2001-02-21 10:19:26 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2001-02-21 10:19:26 +0800 |
commit | 0f2a13586b155c0e97eab0b1bc9ab59e5587555d (patch) | |
tree | e965c04ae4bad885df89f93ae33c74e1cbbe0f20 /mail/subscribe-dialog.c | |
parent | 822b1964647ff9ecd3be57d1982bddfa43cba73e (diff) | |
download | gsoc2013-evolution-0f2a13586b155c0e97eab0b1bc9ab59e5587555d.tar gsoc2013-evolution-0f2a13586b155c0e97eab0b1bc9ab59e5587555d.tar.gz gsoc2013-evolution-0f2a13586b155c0e97eab0b1bc9ab59e5587555d.tar.bz2 gsoc2013-evolution-0f2a13586b155c0e97eab0b1bc9ab59e5587555d.tar.lz gsoc2013-evolution-0f2a13586b155c0e97eab0b1bc9ab59e5587555d.tar.xz gsoc2013-evolution-0f2a13586b155c0e97eab0b1bc9ab59e5587555d.tar.zst gsoc2013-evolution-0f2a13586b155c0e97eab0b1bc9ab59e5587555d.zip |
Fix for api changes to append_mail.
2001-02-21 Not Zed <NotZed@Ximian.com>
* mail-callbacks.c (composer_postpone_cb): Fix for api changes to
append_mail.
* Makefile.am (evolution_mail_SOURCES): Removed mail-threads.[ch].
* mail-threads.[ch]: Removed.
* subscribe-dialog.c (subscribe_do_get_store): Chagned to use new
thread stuff. This is really getting boring.
(subscribe_do_subscribe_folder): Changed to use new thread stuff.
Last one at last, phew.
* session.c (register_callback): Changed to use new thread stuff.
YUCK. I dropped some functionality, now the timeout callback
return is ignored, so basically it keeps running till finished.
* mail-ops.c (mail_operation_run): Removed, no longer used/needed.
(mail_do_append_mail): Changed to use new thread stuff.
(mail_do_transfer_messages): ditto.
* mail-local.c (local_storage_new_folder_cb): Use new thread
stuff, also only run synchronous for this operation.
(mail_local_reconfigure_folder):
(reconfigure_clicked): Changed to use new mail thread stuff.
* mail-config.c (mail_config_check_service): Changed to use new
thread stuff.
svn path=/trunk/; revision=8314
Diffstat (limited to 'mail/subscribe-dialog.c')
-rw-r--r-- | mail/subscribe-dialog.c | 253 |
1 files changed, 108 insertions, 145 deletions
diff --git a/mail/subscribe-dialog.c b/mail/subscribe-dialog.c index 354fc0e780..4a6b773fb8 100644 --- a/mail/subscribe-dialog.c +++ b/mail/subscribe-dialog.c @@ -22,7 +22,7 @@ */ #include <config.h> -#include <gnome.h> + #include "subscribe-dialog.h" #include "e-util/e-html-utils.h" #include <gtkhtml/gtkhtml.h> @@ -44,8 +44,10 @@ #include "mail.h" #include "mail-tools.h" -#include "mail-threads.h" -#include "camel/camel.h" +#include "mail-mt.h" +#include "camel/camel-exception.h" +#include "camel/camel-store.h" +#include "camel/camel-session.h" #include "art/empty.xpm" #include "art/mark.xpm" @@ -158,83 +160,70 @@ typedef void (*SubscribeFolderCallback)(SubscribeDialog *sc, gboolean success, g /* ** GET STORE ******************************************************* */ -typedef struct get_store_input_s { +struct _get_store_msg { + struct _mail_msg msg; + SubscribeDialog *sc; - gchar *url; + char *url; SubscribeGetStoreCallback cb; gpointer cb_data; -} get_store_input_t; - -typedef struct get_store_data_s { CamelStore *store; -} get_store_data_t; +}; -static gchar * -describe_get_store (gpointer in_data, gboolean gerund) +static char *get_store_desc(struct _mail_msg *mm, int done) { - get_store_input_t *input = (get_store_input_t *) in_data; + struct _get_store_msg *m = (struct _get_store_msg *)mm; - if (gerund) { - return g_strdup_printf (_("Getting store for \"%s\""), input->url); - } - else { - return g_strdup_printf (_("Get store for \"%s\""), input->url); - } + return g_strdup_printf(_("Getting store for \"%s\""), m->url); } -static void -setup_get_store (gpointer in_data, gpointer op_data, CamelException *ex) +static void 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->url, &mm->ex); } -static void -do_get_store (gpointer in_data, gpointer op_data, CamelException *ex) +static void get_store_got(struct _mail_msg *mm) { - get_store_input_t *input = (get_store_input_t *)in_data; - get_store_data_t *data = (get_store_data_t*)op_data; - - mail_tool_camel_lock_up (); - data->store = camel_session_get_store (session, input->url, ex); - mail_tool_camel_lock_down (); + struct _get_store_msg *m = (struct _get_store_msg *)mm; - if (camel_exception_is_set (ex)) - data->store = NULL; + m->cb(m->sc, m->store, m->cb_data); } -static void -cleanup_get_store (gpointer in_data, gpointer op_data, CamelException *ex) +static void get_store_free(struct _mail_msg *mm) { - get_store_input_t *input = (get_store_input_t *)in_data; - get_store_data_t *data = (get_store_data_t*)op_data; - - input->cb (input->sc, data->store, input->cb_data); + struct _get_store_msg *m = (struct _get_store_msg *)mm; - g_free (input->url); + if (m->store) + camel_object_unref((CamelObject *)m->store); + g_free(m->url); } -static const mail_operation_spec op_get_store = { - describe_get_store, - sizeof (get_store_data_t), - setup_get_store, - do_get_store, - cleanup_get_store +static struct _mail_msg_op get_store_op = { + get_store_desc, + get_store_get, + get_store_got, + get_store_free, }; static void subscribe_do_get_store (SubscribeDialog *sc, const char *url, SubscribeGetStoreCallback cb, gpointer cb_data) { - get_store_input_t *input; - + struct _get_store_msg *m; + int id; + g_return_if_fail (url != NULL); - - input = g_new (get_store_input_t, 1); - input->sc = sc; - input->url = g_strdup (url); - input->cb = cb; - input->cb_data = cb_data; - mail_operation_queue (&op_get_store, input, TRUE); - mail_operation_wait_for_finish (); + m = mail_msg_new(&get_store_op, NULL, sizeof(*m)); + m->sc = sc; + m->url = g_strdup(url); + m->cb = cb; + m->cb_data = cb_data; + + id = m->msg.seq; + e_thread_put(mail_thread_queued, (EMsg *)m); + mail_msg_wait(id); } /* ** SUBSCRIBE FOLDER ******************************************************* */ @@ -265,78 +254,46 @@ storage_tree_path (CamelFolderInfo *info) return path; } -typedef struct subscribe_folder_input_s { +/* ********************************************************************** */ +/* Subscribe folder */ + +struct _subscribe_msg { + struct _mail_msg msg; + SubscribeDialog *sc; CamelStore *store; - CamelFolderInfo *info; gboolean subscribe; SubscribeFolderCallback cb; gpointer cb_data; -} subscribe_folder_input_t; -typedef struct subscribe_folder_data_s { char *path; char *name; char *full_name; char *url; -} subscribe_folder_data_t; +}; -static gchar * -describe_subscribe_folder (gpointer in_data, gboolean gerund) +static char *subscribe_folder_desc(struct _mail_msg *mm, int done) { - subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data; - - if (gerund) { - if (input->subscribe) - return g_strdup_printf - (_("Subscribing to folder \"%s\""), - input->info->name); - else - return g_strdup_printf - (_("Unsubscribing from folder \"%s\""), - input->info->name); - } else { - if (input->subscribe) - return g_strdup_printf (_("Subscribe to folder \"%s\""), - input->info->name); - else - return g_strdup_printf (_("Unsubscribe from folder \"%s\""), - input->info->name); - } -} + struct _subscribe_msg *m = (struct _subscribe_msg *)mm; -static void -setup_subscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data; - subscribe_folder_data_t *data = (subscribe_folder_data_t *) op_data; - - data->path = storage_tree_path (input->info); - data->name = g_strdup (input->info->name); - data->full_name = g_strdup (input->info->full_name); - data->url = g_strdup (input->info->url); - - camel_object_ref (CAMEL_OBJECT (input->store)); - gtk_object_ref (GTK_OBJECT (input->sc)); + if (m->subscribe) + return g_strdup_printf(_("Subscribing to folder \"%s\""), m->name); + else + return g_strdup_printf(_("Unsubscribing to folder \"%s\""), m->name); } -static void -do_subscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex) +static void subscribe_folder_subscribe(struct _mail_msg *mm) { - subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data; - subscribe_folder_data_t *data = (subscribe_folder_data_t *) op_data; + struct _subscribe_msg *m = (struct _subscribe_msg *)mm; - mail_tool_camel_lock_up (); - if (input->subscribe) - camel_store_subscribe_folder (input->store, data->full_name, ex); + if (m->subscribe) + camel_store_subscribe_folder(m->store, m->full_name, &mm->ex); else - camel_store_unsubscribe_folder (input->store, data->full_name, ex); - mail_tool_camel_lock_down (); + camel_store_unsubscribe_folder(m->store, m->full_name, &mm->ex); } static void -recursive_add_folder (EvolutionStorage *storage, const char *path, - const char *name, const char *url) +recursive_add_folder (EvolutionStorage *storage, const char *path, const char *name, const char *url) { char *parent, *pname, *p; @@ -355,64 +312,71 @@ recursive_add_folder (EvolutionStorage *storage, const char *path, g_free (parent); } - evolution_storage_new_folder (storage, path, name, "mail", url, - name, FALSE); + evolution_storage_new_folder (storage, path, name, "mail", url, name, FALSE); } -static void -cleanup_subscribe_folder (gpointer in_data, gpointer op_data, - CamelException *ex) +static void subscribe_folder_subscribed(struct _mail_msg *mm) { - subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data; - subscribe_folder_data_t *data = (subscribe_folder_data_t *) op_data; + struct _subscribe_msg *m = (struct _subscribe_msg *)mm; - if (!camel_exception_is_set (ex)) { - if (input->subscribe) - recursive_add_folder (input->sc->storage, - data->path, data->name, - data->url); + if (!camel_exception_is_set (&mm->ex)) { + if (m->subscribe) + recursive_add_folder(m->sc->storage, m->path, m->name, m->url); else - evolution_storage_removed_folder (input->sc->storage, data->path); + evolution_storage_removed_folder(m->sc->storage, m->path); } - if (input->cb) - input->cb (input->sc, !camel_exception_is_set (ex), input->cb_data); - - g_free (data->path); - g_free (data->name); - g_free (data->full_name); - g_free (data->url); + if (m->cb) + m->cb(m->sc, !camel_exception_is_set(&mm->ex), m->cb_data); +} + +static void subscribe_folder_free(struct _mail_msg *mm) +{ + struct _subscribe_msg *m = (struct _subscribe_msg *)mm; + + g_free(m->path); + g_free(m->name); + g_free(m->full_name); + g_free(m->url); - camel_object_unref (CAMEL_OBJECT (input->store)); - gtk_object_unref (GTK_OBJECT (input->sc)); + camel_object_unref((CamelObject *)m->store); + /* in wrong thread to do this? + gtk_object_unref (GTK_OBJECT (input->sc));*/ } -static const mail_operation_spec op_subscribe_folder = { - describe_subscribe_folder, - sizeof (subscribe_folder_data_t), - setup_subscribe_folder, - do_subscribe_folder, - cleanup_subscribe_folder +static struct _mail_msg_op subscribe_folder_op = { + subscribe_folder_desc, + subscribe_folder_subscribe, + subscribe_folder_subscribed, + subscribe_folder_free, }; static void subscribe_do_subscribe_folder (SubscribeDialog *sc, CamelStore *store, CamelFolderInfo *info, gboolean subscribe, SubscribeFolderCallback cb, gpointer cb_data) { - subscribe_folder_input_t *input; + struct _subscribe_msg *m; g_return_if_fail (CAMEL_IS_STORE (store)); g_return_if_fail (info); - - input = g_new (subscribe_folder_input_t, 1); - input->sc = sc; - input->store = store; - input->info = info; - input->subscribe = subscribe; - input->cb = cb; - input->cb_data = cb_data; - - mail_operation_queue (&op_subscribe_folder, input, TRUE); + + m = mail_msg_new(&subscribe_folder_op, NULL, sizeof(*m)); + m->sc = sc; + m->store = store; + camel_object_ref((CamelObject *)store); + m->subscribe = subscribe; + m->cb = cb; + m->cb_data = cb_data; + + m->path = storage_tree_path (info); + m->name = g_strdup (info->name); + m->full_name = g_strdup (info->full_name); + m->url = g_strdup (info->url); + + /* + gtk_object_ref (GTK_OBJECT (sc));*/ + + e_thread_put(mail_thread_new, (EMsg *)m); } @@ -871,10 +835,9 @@ store_cb (SubscribeDialog *sc, CamelStore *store, gpointer data) return; if (camel_store_supports_subscriptions (store)) { + camel_object_ref((CamelObject *)store); sc->store_list = g_list_prepend (sc->store_list, store); e_table_model_row_inserted (sc->store_model, 0); - } else { - camel_object_unref (CAMEL_OBJECT (store)); } } |