diff options
author | Srinivasa Ragavan <sragavan@novell.com> | 2007-12-17 04:19:53 +0800 |
---|---|---|
committer | Srinivasa Ragavan <sragavan@src.gnome.org> | 2007-12-17 04:19:53 +0800 |
commit | 5b89cbe4f598387a56d22627558b5308da6044bc (patch) | |
tree | 620d37062cec0df7cbfa107d8317b62fb28ce9ee /mail/mail-mt.c | |
parent | 9bf01a179e346a25967a0898c900c863ed7b95db (diff) | |
download | gsoc2013-evolution-5b89cbe4f598387a56d22627558b5308da6044bc.tar.gz gsoc2013-evolution-5b89cbe4f598387a56d22627558b5308da6044bc.tar.zst gsoc2013-evolution-5b89cbe4f598387a56d22627558b5308da6044bc.zip |
** Non-intrusive errror reporting and basic logging support.
2007-12-17 Srinivasa Ragavan <sragavan@novell.com>
** Non-intrusive errror reporting and basic logging support.
* em-folder-browser.c: (emfb_help_debug): Invoke the debug menu.
* evolution-mail.schemas.in: Schema for error timeout and level.
* mail-component.c: (mail_component_init), (render_pixbuf),
(render_level), (render_date), (append_logs), (spin_value_changed),
(mail_component_show_logger): Handle the lifecycle of the logger.
* mail-component.h: Api to show the logger.
* mail-config.c: (gconf_error_time_changed),
(gconf_error_level_changed), (mail_config_init),
(mail_config_get_error_timeout), (mail_config_get_error_level): Load
and get the error time and level.
* mail-config.h:
* mail-mt.c: (mail_msg_set_cancelable), (mail_msg_new),
(end_event_callback), (mail_msg_free), (mail_msg_check_error),
(operation_cancel), (do_op_status): Revamp the error handling.
* mail-mt.h:
* mail-ops.c: (send_queue_send), (mail_send_queue): Handle the send/receive
case of error reporting separately.
* mail-send-recv.c: (free_send_info), (mail_send):
2007-12-17 Srinivasa Ragavan <sragavan@novell.com>
** Revamped Activity handler and task bar/widget for non-intrusive
error reporting
* e-activity-handler.c: (activity_info_new), (activity_info_free),
(task_widget_new_from_activity_info), (setup_task_bar),
(e_activity_handler_init),
(e_activity_handler_set_error_flush_time),
(e_activity_handler_set_logger), (cancel_wrapper),
(e_activity_handler_cancelable_operation_started),
(e_activity_handler_operation_started), (handle_error),
(error_cleanup), (e_activity_handler_make_error),
(e_activity_handler_operation_set_error),
(e_activity_handler_operation_progressing),
(e_activity_handler_operation_finished):
* e-activity-handler.h:
* e-task-bar.c: (e_task_bar_prepend_task),
(e_task_bar_remove_task_from_id), (e_task_bar_remove_task),
(e_task_bar_get_task_widget_from_id):
* e-task-bar.h:
* e-task-widget.c: (e_task_widget_init), (button_press_event_cb),
(prepare_popup), (e_task_widget_construct),
(e_task_widget_new_with_cancel), (e_task_widget_new),
(e_task_widget_update_image):
* e-task-widget.h:
2007-12-17 Srinivasa Ragavan <sragavan@novell.com>
* Makefile.am: Add e-logger.[ch] to compilation
* e-error.c: (e_error_newv): Add primary/secondary text to the error
dialog to the gobject as data.
* e-logger.[ch]: A new logger provision Evolution.
2007-12-17 Srinivasa Ragavan <sragavan@novell.com>
* evolution-mail-global.xml: Add Debug Log menu item for mailer.
* evolution.xml: Add place holder for Debug menu item.
svn path=/trunk/; revision=34712
Diffstat (limited to 'mail/mail-mt.c')
-rw-r--r-- | mail/mail-mt.c | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/mail/mail-mt.c b/mail/mail-mt.c index 9572d3cd3f..af5dfd741d 100644 --- a/mail/mail-mt.c +++ b/mail/mail-mt.c @@ -67,6 +67,8 @@ struct _mail_msg_priv { int activity_state; /* sigh sigh sigh, we need to keep track of the state external to the pointer itself for locking/race conditions */ int activity_id; + GtkWidget *error; + gboolean cancelable; }; static GdkPixbuf *progress_icon = NULL; @@ -88,6 +90,11 @@ MailAsyncEvent *mail_async_event; static void mail_msg_destroy(EThread *e, EMsg *msg, void *data); +void mail_msg_set_cancelable (struct _mail_msg *msg, gboolean status) +{ + msg->priv->cancelable = status; +} + void *mail_msg_new(mail_msg_op_t *ops, EMsgPort *reply_port, size_t size) { struct _mail_msg *msg; @@ -129,6 +136,7 @@ void *mail_msg_new(mail_msg_op_t *ops, EMsgPort *reply_port, size_t size) msg->cancel = camel_operation_new(mail_operation_status, GINT_TO_POINTER(msg->seq)); camel_exception_init(&msg->ex); msg->priv = g_malloc0(sizeof(*msg->priv)); + msg->priv->cancelable = TRUE; g_hash_table_insert(mail_msg_active_table, GINT_TO_POINTER(msg->seq), msg); @@ -144,12 +152,18 @@ void *mail_msg_new(mail_msg_op_t *ops, EMsgPort *reply_port, size_t size) } -static void end_event_callback (CamelObject *o, void *event_data, void *data) +static void end_event_callback (CamelObject *o, void *event_data, void *error) { EActivityHandler *activity_handler = mail_component_peek_activity_handler (mail_component_peek ()); guint activity_id = GPOINTER_TO_INT (event_data); - e_activity_handler_operation_finished (activity_handler, activity_id); + if (!error) { + e_activity_handler_operation_finished (activity_handler, activity_id); + } else { + d(printf("Yahooooo, we got it nonintrusively\n")); + e_activity_handler_operation_set_error (activity_handler, activity_id, error); + + } } @@ -181,6 +195,7 @@ void mail_msg_free(void *msg) { struct _mail_msg *m = msg; int activity_id; + GtkWidget *error = NULL; #ifdef MALLOC_CHECK checkmem(m); @@ -212,11 +227,18 @@ void mail_msg_free(void *msg) return; } else { activity_id = m->priv->activity_id; + error = m->priv->error; + if (error && !activity_id) { + e_activity_handler_make_error (mail_component_peek_activity_handler (mail_component_peek ()), "mail", + g_object_get_data ((GObject *) error, "primary"), error); + printf("Making error\n"); + } + } MAIL_MT_UNLOCK(mail_msg_lock); - if (m->cancel) { + if (m->cancel && m->cancel != -1) { camel_operation_mute(m->cancel); camel_operation_unref(m->cancel); } @@ -228,7 +250,7 @@ void mail_msg_free(void *msg) if (activity_id != 0) mail_async_event_emit(mail_async_event, MAIL_ASYNC_GUI, (MailAsyncFunc) end_event_callback, - NULL, GINT_TO_POINTER (activity_id), NULL); + NULL, GINT_TO_POINTER (activity_id), error); } /* hash table of ops->dialogue of active errors */ @@ -286,7 +308,10 @@ void mail_msg_check_error(void *msg) g_hash_table_insert(active_errors, m->ops, gd); g_signal_connect(gd, "response", G_CALLBACK(error_response), m->ops); g_signal_connect(gd, "destroy", G_CALLBACK(error_destroy), m->ops); - gtk_widget_show((GtkWidget *)gd); + if (m->priv->cancelable) + m->priv->error = gd; + else + gtk_widget_show((GtkWidget *)gd); } void mail_msg_cancel(unsigned int msgid) @@ -927,6 +952,12 @@ void mail_disable_stop(void) MAIL_MT_UNLOCK(status_lock); } +static void +operation_cancel (CamelOperation *p) +{ + camel_operation_cancel (p); +} + /* ******************************************************************************** */ struct _op_status_msg { @@ -995,8 +1026,7 @@ static void do_op_status(struct _mail_msg *mm) what = g_strdup(""); } - - data->activity_id = e_activity_handler_operation_started (activity_handler, "evolution-mail", progress_icon, what, TRUE); + data->activity_id = e_activity_handler_cancelable_operation_started (activity_handler, "evolution-mail", progress_icon, what, TRUE, operation_cancel, msg->cancel); g_free (what); MAIL_MT_LOCK (mail_msg_lock); |