diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 21 | ||||
-rw-r--r-- | mail/component-factory.c | 2 | ||||
-rw-r--r-- | mail/mail-accounts.c | 27 | ||||
-rw-r--r-- | mail/mail-accounts.h | 4 | ||||
-rw-r--r-- | mail/mail-config.c | 20 | ||||
-rw-r--r-- | mail/mail-config.glade | 8 | ||||
-rw-r--r-- | mail/mail-config.h | 6 | ||||
-rw-r--r-- | mail/mail-ops.c | 20 | ||||
-rw-r--r-- | mail/mail-session.c | 39 | ||||
-rw-r--r-- | mail/main.c | 8 |
10 files changed, 102 insertions, 53 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 91c1567b8b..962845a38b 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,24 @@ +2002-01-07 Jeffrey Stedfast <fejj@ximian.com> + + * mail-config.c (mail_config_set_new_mail_notify_sound_file): Renamed. + (mail_config_get_new_mail_notify_sound_file): Renamed. + + * mail-accounts.c (notify_radio_toggled): Replace EXEC with + PLAY_SOUND. + (construct): renamed the exec_command stuff to play_sound. + + * main.c (main): Init and shutdown gnome_sound. + + * mail-ops.c (fetch_mail_fetch): Don't do any new-mail + notification here. + (filter_folder_filter): call camel_filter_driver_flush. + + * mail-session.c (main_get_filter_driver): Set the filter-driver + exec_func here instead. + + * mail-ops.c (mail_fetch_mail): Don't set the filter-driver + exec_func here. + 2002-01-03 Jeffrey Stedfast <fejj@ximian.com> * mail-callbacks.c (composer_get_message): Add an Organization diff --git a/mail/component-factory.c b/mail/component-factory.c index f77f76fa1b..e6d04129d9 100644 --- a/mail/component-factory.c +++ b/mail/component-factory.c @@ -826,7 +826,7 @@ handle_external_uri_cb (EvolutionShellComponent *shell_component, g_warning ("Invalid URI requested to mail component -- %s", uri); return; } - + /* FIXME: Sigh. This shouldn't be here. But the code is messy, so I'll just put it here anyway. */ send_to_url (uri); diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c index 0d3eb4bc63..f00be07739 100644 --- a/mail/mail-accounts.c +++ b/mail/mail-accounts.c @@ -695,16 +695,16 @@ notify_radio_toggled (GtkWidget *radio, gpointer data) else if (radio == (GtkWidget *) dialog->notify_beep) mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_BEEP); else - mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_EXEC); + mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_PLAY_SOUND); } static void -notify_command_changed (GtkWidget *entry, gpointer data) +notify_sound_file_changed (GtkWidget *entry, gpointer data) { - char *command; + char *filename; - command = gtk_entry_get_text (GTK_ENTRY (entry)); - mail_config_set_new_mail_notify_command (command); + filename = gtk_entry_get_text (GTK_ENTRY (entry)); + mail_config_set_new_mail_notify_sound_file (filename); } static void @@ -991,16 +991,17 @@ construct (MailAccountsDialog *dialog) gtk_signal_connect (GTK_OBJECT (dialog->notify_beep), "toggled", GTK_SIGNAL_FUNC (notify_radio_toggled), dialog); - dialog->notify_exec = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyExec")); - gtk_toggle_button_set_active (dialog->notify_exec, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_EXEC); - gtk_signal_connect (GTK_OBJECT (dialog->notify_exec), "toggled", + dialog->notify_play_sound = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyPlaySound")); + gtk_toggle_button_set_active (dialog->notify_play_sound, + mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_PLAY_SOUND); + gtk_signal_connect (GTK_OBJECT (dialog->notify_play_sound), "toggled", GTK_SIGNAL_FUNC (notify_radio_toggled), dialog); - dialog->command_line = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileNotifyExecCommandLine")); - gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (dialog->command_line)), - mail_config_get_new_mail_notify_command ()); - gtk_signal_connect (GTK_OBJECT (gnome_file_entry_gtk_entry (dialog->command_line)), - "changed", GTK_SIGNAL_FUNC (notify_command_changed), dialog); + dialog->notify_sound_file = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileNotifyPlaySound")); + gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (dialog->notify_sound_file)), + mail_config_get_new_mail_notify_sound_file ()); + gtk_signal_connect (GTK_OBJECT (gnome_file_entry_gtk_entry (dialog->notify_sound_file)), + "changed", GTK_SIGNAL_FUNC (notify_sound_file_changed), dialog); /* now to fill in the clists */ dialog->accounts_row = -1; diff --git a/mail/mail-accounts.h b/mail/mail-accounts.h index bb29819343..83134fc6d4 100644 --- a/mail/mail-accounts.h +++ b/mail/mail-accounts.h @@ -95,8 +95,8 @@ struct _MailAccountsDialog { GtkToggleButton *confirm_expunge; GtkToggleButton *notify_not; GtkToggleButton *notify_beep; - GtkToggleButton *notify_exec; - GnomeFileEntry *command_line; + GtkToggleButton *notify_play_sound; + GnomeFileEntry *notify_sound_file; /* PGP page */ GnomeFileEntry *pgp_path; diff --git a/mail/mail-config.c b/mail/mail-config.c index 4151c0c3a7..d1e322bb0b 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -108,7 +108,7 @@ typedef struct { char *filter_log_path; MailConfigNewMailNotify notify; - char *notify_command; + char *notify_filename; } MailConfig; static MailConfig *config = NULL; @@ -650,8 +650,8 @@ config_read (void) config->db, "/Mail/Notify/new_mail_notification", MAIL_CONFIG_NOTIFY_NOT, NULL); - config->notify_command = bonobo_config_get_string ( - config->db, "/Mail/Notify/new_mail_notification_command", NULL); + config->notify_filename = bonobo_config_get_string ( + config->db, "/Mail/Notify/new_mail_notification_sound_file", NULL); } #define bonobo_config_set_string_wrapper(db, path, val, ev) bonobo_config_set_string (db, path, val ? val : "", ev) @@ -954,8 +954,8 @@ mail_config_write_on_exit (void) bonobo_config_set_long (config->db, "/Mail/Notify/new_mail_notification", config->notify, NULL); - bonobo_config_set_string_wrapper (config->db, "/Mail/Notify/new_mail_notification_command", - config->notify_command, NULL); + bonobo_config_set_string_wrapper (config->db, "/Mail/Notify/new_mail_notification_sound_file", + config->notify_filename, NULL); if (config->threaded_hash) g_hash_table_foreach_remove (config->threaded_hash, hash_save_state, "Threads"); @@ -1693,16 +1693,16 @@ mail_config_set_new_mail_notify (MailConfigNewMailNotify type) } const char * -mail_config_get_new_mail_notify_command (void) +mail_config_get_new_mail_notify_sound_file (void) { - return config->notify_command; + return config->notify_filename; } void -mail_config_set_new_mail_notify_command (const char *command) +mail_config_set_new_mail_notify_sound_file (const char *filename) { - g_free (config->notify_command); - config->notify_command = g_strdup (command); + g_free (config->notify_filename); + config->notify_filename = g_strdup (filename); } gboolean diff --git a/mail/mail-config.glade b/mail/mail-config.glade index 1991576d0a..f098c3442f 100644 --- a/mail/mail-config.glade +++ b/mail/mail-config.glade @@ -3317,9 +3317,9 @@ Quoted <widget> <class>GtkRadioButton</class> - <name>radioNotifyExec</name> + <name>radioNotifyPlaySound</name> <can_focus>True</can_focus> - <label>Execute command line when new mail arrives</label> + <label>Play sound file when new mail arrives</label> <active>False</active> <draw_indicator>True</draw_indicator> <group>new_mail_notify</group> @@ -3344,7 +3344,7 @@ Quoted <widget> <class>GtkLabel</class> <name>label54</name> - <label>Specify command:</label> + <label>Specify filename:</label> <justify>GTK_JUSTIFY_CENTER</justify> <wrap>False</wrap> <xalign>0.5</xalign> @@ -3360,7 +3360,7 @@ Quoted <widget> <class>GnomeFileEntry</class> - <name>fileNotifyExecCommandLine</name> + <name>fileNotifyPlaySound</name> <max_saved>10</max_saved> <title>Execute Command...</title> <directory>False</directory> diff --git a/mail/mail-config.h b/mail/mail-config.h index 2575f8b817..fb8082a919 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -95,7 +95,7 @@ typedef enum { typedef enum { MAIL_CONFIG_NOTIFY_NOT, MAIL_CONFIG_NOTIFY_BEEP, - MAIL_CONFIG_NOTIFY_EXEC, + MAIL_CONFIG_NOTIFY_PLAY_SOUND, } MailConfigNewMailNotify; /* Identities */ @@ -188,8 +188,8 @@ void mail_config_set_message_display_style (MailConfigDisplayS MailConfigNewMailNotify mail_config_get_new_mail_notify (void); void mail_config_set_new_mail_notify (MailConfigNewMailNotify type); -const char *mail_config_get_new_mail_notify_command (void); -void mail_config_set_new_mail_notify_command (const char *command); +const char *mail_config_get_new_mail_notify_sound_file (void); +void mail_config_set_new_mail_notify_sound_file (const char *filename); const char *mail_config_get_default_charset (void); void mail_config_set_default_charset (const char *charset); diff --git a/mail/mail-ops.c b/mail/mail-ops.c index 8a3b4076df..a8b515c832 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -120,6 +120,7 @@ filter_folder_filter (struct _mail_msg *mm) folder_uids = uids = camel_folder_get_uids (folder); camel_filter_driver_filter_folder (m->driver, folder, m->cache, uids, m->delete, &mm->ex); + camel_filter_driver_flush (m->driver, &mm->ex); if (folder_uids) camel_folder_free_uids (folder, folder_uids); @@ -255,7 +256,7 @@ fetch_mail_fetch (struct _mail_msg *mm) { struct _fetch_mail_msg *m = (struct _fetch_mail_msg *)mm; struct _filter_mail_msg *fm = (struct _filter_mail_msg *)mm; - int count, i; + int i; if (m->cancel) camel_operation_register (m->cancel); @@ -347,22 +348,6 @@ fetch_mail_fetch (struct _mail_msg *mm) if (m->cancel) camel_operation_unregister (m->cancel); - count = camel_filter_driver_get_filtered_count (fm->driver); - camel_filter_driver_reset_filtered_count (fm->driver); - - if (count > 0) { - switch (mail_config_get_new_mail_notify ()) { - case MAIL_CONFIG_NOTIFY_BEEP: - gdk_beep (); - break; - case MAIL_CONFIG_NOTIFY_EXEC: - mail_execute_shell_command (fm->driver, mail_config_get_new_mail_notify_command (), NULL); - break; - default: - break; - } - } - /* we unref this here as it may have more work to do (syncing folders and whatnot) before we are really done */ /* should this be cancellable too? (i.e. above unregister above) */ @@ -422,7 +407,6 @@ mail_fetch_mail (const char *source, int keep, const char *type, CamelOperation fm->driver = camel_session_get_filter_driver (session, type, NULL); camel_filter_driver_set_folder_func (fm->driver, get_folder, get_data); - camel_filter_driver_set_shell_exec_func (fm->driver, mail_execute_shell_command, NULL); if (status) camel_filter_driver_set_status_func (fm->driver, status, status_data); diff --git a/mail/mail-session.c b/mail/mail-session.c index f8265a12ea..98d5968364 100644 --- a/mail/mail-session.c +++ b/mail/mail-session.c @@ -26,6 +26,7 @@ #include <stdlib.h> #include <libgnome/gnome-defs.h> #include <libgnome/gnome-config.h> +#include <libgnome/gnome-sound.h> #include <libgnomeui/gnome-dialog.h> #include <libgnomeui/gnome-dialog-util.h> #include <libgnomeui/gnome-messagebox.h> @@ -40,6 +41,7 @@ #include "mail-session.h" #include "mail-tools.h" #include "mail-mt.h" +#include "mail-ops.h" #include "e-util/e-passwords.h" #include "e-util/e-msgport.h" @@ -806,6 +808,15 @@ get_folder (CamelFilterDriver *d, const char *uri, void *data, CamelException *e return mail_tool_uri_to_folder (uri, 0, ex); } +static void +session_play_sound (CamelFilterDriver *driver, const char *filename, gpointer user_data) +{ + if (!filename || !*filename) + gdk_beep (); + else + gnome_sound_play (filename); +} + static CamelFilterDriver * main_get_filter_driver (CamelSession *session, const char *type, CamelException *ex) { @@ -838,6 +849,9 @@ main_get_filter_driver (CamelSession *session, const char *type, CamelException camel_filter_driver_set_logfile (driver, ms->filter_logfile); } + camel_filter_driver_set_shell_exec_func (driver, mail_execute_shell_command, NULL); + camel_filter_driver_set_play_sound_func (driver, session_play_sound, NULL); + fsearch = g_string_new (""); faction = g_string_new (""); @@ -852,6 +866,31 @@ main_get_filter_driver (CamelSession *session, const char *type, CamelException fsearch->str, faction->str); } + /* FIXME: we need a way to distinguish between filtering new + mail and re-filtering a folder because both use the + "incoming" filter type */ + if (mail_config_get_new_mail_notify () && !strcmp (type, "incoming")) { + g_string_truncate (faction, 0); + + g_string_append (faction, "(only-once \"new-mail-notification\" "); + + switch (mail_config_get_new_mail_notify ()) { + case MAIL_CONFIG_NOTIFY_BEEP: + g_string_append (faction, "\"(beep)\""); + break; + case MAIL_CONFIG_NOTIFY_PLAY_SOUND: + g_string_sprintfa (faction, "\"(play-sound \\\"%s\\\")\"", + mail_config_get_new_mail_notify_sound_file ()); + break; + default: + break; + } + + g_string_append (faction, ")"); + + camel_filter_driver_add_rule (driver, "new-mail-notification", "(begin #t)", faction->str); + } + g_string_free (fsearch, TRUE); g_string_free (faction, TRUE); diff --git a/mail/main.c b/mail/main.c index 10497a145d..b3daea3f99 100644 --- a/mail/main.c +++ b/mail/main.c @@ -103,7 +103,7 @@ main (int argc, char *argv []) gnome_init_with_popt_table ("evolution-mail-component", VERSION, argc, argv, oaf_popt_options, 0, NULL); - + sigaction (SIGSEGV, NULL, &osa); if (osa.sa_handler != SIG_DFL) { sa.sa_flags = 0; @@ -144,6 +144,8 @@ main (int argc, char *argv []) mail_config_init (); mail_msg_init (); + gnome_sound_init ("localhost"); + component_factory_init (); evolution_composer_factory_init (composer_send_cb, composer_postpone_cb); @@ -163,6 +165,8 @@ main (int argc, char *argv []) mail_config_write_on_exit (); e_passwords_shutdown (); - + + gnome_sound_shutdown (); + return 0; } |