diff options
-rw-r--r-- | mail/ChangeLog | 18 | ||||
-rw-r--r-- | mail/mail-config.c | 54 | ||||
-rw-r--r-- | mail/mail-config.h | 11 | ||||
-rw-r--r-- | mail/mail-ops.c | 55 | ||||
-rw-r--r-- | mail/mail-ops.h | 2 |
5 files changed, 134 insertions, 6 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index ff41ed6419..09e7c657d4 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,21 @@ +2001-12-12 Jeffrey Stedfast <fejj@ximian.com> + + * mail-config.c (mail_config_set_new_mail_notification_command): + set the new-mail-notify command. + (mail_config_get_new_mail_notification_command): get the + new-mail-notify command. + (mail_config_set_new_mail_notification): set the + new-mail-notification action. + (mail_config_get_new_mail_notification): get the + new-mail-notification action. + (mail_config_write_on_exit): save the new-mail-notification + settings. + (config_read): Read in the new-mail-notification settings. + + * mail-ops.c (mail_execute_shell_command): New function to execute + a shell command async. Will be used for playing sounds on new mail + or whatever. + 2001-12-11 Jon Trowbridge <trow@ximian.com> * mail-identify.c (mail_identify_mime_part): Fixed for diff --git a/mail/mail-config.c b/mail/mail-config.c index 91acb931ab..819b251284 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -106,6 +106,9 @@ typedef struct { gboolean filter_log; char *filter_log_path; + + MailConfigNewMailNotification notify; + char *notify_command; } MailConfig; static MailConfig *config = NULL; @@ -607,6 +610,14 @@ config_read (void) config->filter_log_path = bonobo_config_get_string ( config->db, "/Mail/Filters/log_path", NULL); + + /* New Mail Notification */ + config->notify = bonobo_config_get_long_with_default ( + config->db, "/Mail/Notify/new_mail_notification", + MAIL_CONFIG_NEW_MAIL_NOTIFICATION_NONE, NULL); + + config->notify_command = bonobo_config_get_string ( + config->db, "/Mail/Notify/new_mail_notification_command", NULL); } #define bonobo_config_set_string_wrapper(db, path, val, ev) bonobo_config_set_string (db, path, val ? val : "", ev) @@ -886,7 +897,14 @@ mail_config_write_on_exit (void) bonobo_config_set_string_wrapper (config->db, "/Mail/Filters/log_path", config->filter_log_path, NULL); - + + /* New Mail Notification */ + 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); + if (config->threaded_hash) g_hash_table_foreach_remove (config->threaded_hash, hash_save_state, "Threads"); @@ -898,7 +916,7 @@ mail_config_write_on_exit (void) CORBA_exception_free (&ev); /* Passwords */ - + /* then we make sure the ones we want to remember are in the session cache */ accounts = mail_config_get_accounts (); @@ -919,21 +937,21 @@ mail_config_write_on_exit (void) g_free (passwd); } } - + /* then we clear out our component passwords */ e_passwords_clear_component_passwords (); - + /* then we remember them */ accounts = mail_config_get_accounts (); for ( ; accounts; accounts = accounts->next) { account = accounts->data; if (account->source->save_passwd && account->source->url) mail_session_remember_password (account->source->url); - + if (account->transport->save_passwd && account->transport->url) mail_session_remember_password (account->transport->url); } - + /* now do cleanup */ mail_config_clear (); } @@ -1610,6 +1628,30 @@ mail_config_set_default_charset (const char *charset) config->default_charset = g_strdup (charset); } +MailConfigNewMailNotification +mail_config_get_new_mail_notification (void) +{ + return config->notify; +} + +void +mail_config_set_new_mail_notification (MailConfigNewMailNotification type) +{ + config->notify = type; +} + +const char * +mail_config_get_new_mail_notification_command (void) +{ + return config->notify_command; +} + +void +mail_config_set_new_mail_notification_command (const char *command) +{ + g_free (config->notify_command); + config->notify_command = g_strdup (command); +} gboolean mail_config_find_account (const MailConfigAccount *account) diff --git a/mail/mail-config.h b/mail/mail-config.h index ce71d0e1ea..82f863dba3 100644 --- a/mail/mail-config.h +++ b/mail/mail-config.h @@ -87,6 +87,12 @@ typedef enum { MAIL_CONFIG_DISPLAY_MAX } MailConfigDisplayStyle; +typedef enum { + MAIL_CONFIG_NEW_MAIL_NOTIFICATION_NONE, + MAIL_CONFIG_NEW_MAIL_NOTIFICATION_BEEP, + MAIL_CONFIG_NEW_MAIL_NOTIFICATION_COMMAND, +} MailConfigNewMailNotification; + /* Identities */ MailConfigIdentity *identity_copy (const MailConfigIdentity *id); void identity_destroy (MailConfigIdentity *id); @@ -175,6 +181,11 @@ void mail_config_set_default_forward_style (MailConfigForwardS MailConfigDisplayStyle mail_config_get_message_display_style (void); void mail_config_set_message_display_style (MailConfigDisplayStyle style); +MailConfigNewMailNotification mail_config_get_new_mail_notification (void); +void mail_config_set_new_mail_notification (MailConfigNewMailNotification type); +const char *mail_config_get_new_mail_notification_command (void); +void mail_config_set_new_mail_notification_command (const char *command); + 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 8626a5acbb..6bb3f5b5f0 100644 --- a/mail/mail-ops.c +++ b/mail/mail-ops.c @@ -30,6 +30,7 @@ /* #include <ctype.h> */ #include <errno.h> +#include <gnome.h> #include <gal/util/e-util.h> #include <gal/widgets/e-unicode.h> #include <gal/util/e-unicode-i18n.h> @@ -2170,3 +2171,57 @@ mail_store_set_offline (CamelStore *store, gboolean offline, e_thread_put(mail_thread_queued, (EMsg *)m); } + + +/* ** Execute Shell Command ***************************************************** */ + +struct _execute_shell_command_msg { + struct _mail_msg msg; + + char *command; +}; + +static char *execute_shell_command_desc (struct _mail_msg *mm, int done) +{ + struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm; + char *msg; + + msg = g_strdup_printf (_("Executing shell command: %s"), m->command); + + return msg; +} + +static void execute_shell_command_do (struct _mail_msg *mm) +{ + struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm; + + gnome_execute_shell (NULL, m->command); +} + +static void execute_shell_command_free (struct _mail_msg *mm) +{ + struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm; + + g_free (m->command); +} + +static struct _mail_msg_op execute_shell_command_op = { + execute_shell_command_desc, + execute_shell_command_do, + NULL, + execute_shell_command_free, +}; + +void +mail_execute_shell_command (const char *command) +{ + struct _execute_shell_command_msg *m; + + if (command == NULL) + return; + + m = mail_msg_new (&execute_shell_command_op, NULL, sizeof (*m)); + m->command = g_strdup (command); + + e_thread_put (mail_thread_queued, (EMsg *) m); +} diff --git a/mail/mail-ops.h b/mail/mail-ops.h index b71ff4e09b..2f28807272 100644 --- a/mail/mail-ops.h +++ b/mail/mail-ops.h @@ -150,6 +150,8 @@ void mail_store_set_offline (CamelStore *store, gboolean offline, void (*done)(CamelStore *, void *data), void *data); +void mail_execute_shell_command (const char *command); + #ifdef __cplusplus } #endif /* __cplusplus */ |