Nikolas Arend wrote:
> Hm, doesn't this list accept plain text attachments? I send them again,
> this time included in the message text. Let's see...
>
>
> Hi all,
>
> attached please find two patches for the mail module against current cvs.
> The patches are mutually exclusive. One (mail_small.patch) just fixes an
> issue in mbox.c and adds support for parsing Thunderbird/Mozilla style
> mbox files. Besides that it only replaces one c++ style comment by its c
> counterpart in e_mod_config_box.c (some c compilers don't like that).
>
>
> The other (mail.patch) is a bit more extensive. Besides the things just
> mentioned, it also adds a checkbox to the config dialog (maybe not
> ideally placed atm) by which one can choose whether the mbox file should
> be monitored permanently (via an ecore_file_monitor), or just checked
> manually or at every check interval (like pop3 accounts).
>
> Please let me know what you think, it works fine here. One issue I have,
> though: everything is ok for the first mbox account I add. I can enable
> and disable the permanent/non-permanent checking feature, all fine. But
> thinks don't work as expected for the next mbox account. The settings
> don't seem to get applied properly, although they are obviously stored.
> I don't see why. I'm non sure it's an issue with my patch, maybe someone
> can look into it.
>
> Please let me know when there are any problems with applying the patches.
>
>
> Cheers, Nick.
>
>
>
> ### mail_small.patch
>
> diff -ur mail/e_mod_config_box.c mail-merged_files/e_mod_config_box.c
> --- mail/e_mod_config_box.c 2006-09-16 17:14:45.000000000 +0200
> +++ mail-merged_files/e_mod_config_box.c 2006-09-16
> 17:16:01.000000000 +0200
> @@ -322,7 +322,7 @@
>
> if (is_new)
> {
> -// cfd->data = cb;
> +/* cfd->data = cb; */
> mail_ci->boxes = evas_list_append (mail_ci->boxes, cb);
> e_config_save_queue ();
> _mail_box_added (mail_ci->id, cb->name);
>
> diff -ur mail/mbox.c mail-merged_files/mbox.c
> --- mail/mbox.c 2006-09-16 17:14:45.000000000 +0200
> +++ mail-merged_files/mbox.c 2006-09-16 17:16:01.000000000 +0200
> @@ -23,7 +23,7 @@
> mb->config->num_new = 0;
> mb->config->num_total = 0;
> mb->monitor =
> - ecore_file_monitor_add (cb->new_path, _mail_mbox_check_mail, mb);
> + ecore_file_monitor_add (mb->config->new_path,
> _mail_mbox_check_mail, mb);
>
> mboxes = evas_list_append (mboxes, mb);
> }
> @@ -110,9 +110,15 @@
> mb->config->num_total++;
> mb->config->num_new++;
> }
> - else if ((header) && (!strncmp (buf, "Status: ", 7))
> - && (strchr (buf, 'R')))
> - mb->config->num_new--;
> + else if (header)
> + {
> + if ((!strncmp (buf, "Status: ", 8)) && (strchr (buf, 'R')))
> + mb->config->num_new--;
> +
> + /* Support for Mozilla/Thunderbird mbox format */
> + else if ((!strncmp (buf, "X-Mozilla-Status: ", 18)) &&
> (!strstr (buf, "0000")))
> + mb->config->num_new--;
> + }
> }
> fclose (f);
>
>
>
>
> ### mail.patch:
>
> diff -ur mail/e_mod_config_box.c mail-merged_files/e_mod_config_box.c
> --- mail/e_mod_config_box.c 2006-09-16 18:44:54.000000000 +0200
> +++ mail-merged_files/e_mod_config_box.c 2006-09-16
> 18:44:11.000000000 +0200
> @@ -7,6 +7,7 @@
> int type;
> int use_exec;
> char *port;
> + int monitor;
> int ssl;
> int local;
> char *host;
> @@ -24,6 +25,7 @@
> Evas_Object *new_path_entry;
> Evas_Object *cur_path_label;
> Evas_Object *cur_path_entry;
> + Evas_Object *monitor_check;
> };
>
> static void *_create_data (E_Config_Dialog * cfd);
> @@ -34,6 +36,7 @@
> E_Config_Dialog_Data * cfdata);
> static void _type_cb_change (void *data, Evas_Object * obj);
> static void _use_exec_cb_change (void *data, Evas_Object * obj);
> +static void _monitor_cb_change (void *data, Evas_Object * obj);
>
> static E_Config_Dialog *prev_dlg;
> static Config_Item *mail_ci;
> @@ -69,6 +72,7 @@
> if (!cb)
> {
> cfdata->type = 0;
> + cfdata->monitor = 1;
> cfdata->ssl = 0;
> cfdata->use_exec = 0;
> cfdata->local = 0;
> @@ -81,6 +85,7 @@
> cfdata->name = strdup (cb->name);
>
> cfdata->type = cb->type;
> + cfdata->monitor = cb->monitor;
> cfdata->ssl = cb->ssl;
> cfdata->use_exec = cb->use_exec;
> cfdata->local = cb->local;
> @@ -170,8 +175,23 @@
> e_widget_framelist_object_append (of, ob);
> ob = e_widget_radio_add (evas, D_("Mbox"), 3, rg);
> e_widget_on_change_hook_set (ob, _type_cb_change, cfdata);
> - e_widget_framelist_object_append (of, ob);
> - e_widget_list_object_append (o, of, 1, 1, 0.5);
> + e_widget_framelist_object_append (of, ob);
> + cfdata->monitor_check = e_widget_check_add (evas, D_("Monitor Mbox
> file permanently"),
> + &(cfdata->monitor));
> + e_widget_on_change_hook_set (cfdata->monitor_check,
> _monitor_cb_change, cfdata);
> + if (cfdata->type == 3)
> + {
> + e_widget_check_checked_set (cfdata->monitor_check, cfdata->monitor);
> + e_widget_disabled_set (cfdata->monitor_check, 0);
> + }
> + else
> + {
> + e_widget_check_checked_set (cfdata->monitor_check, 0);
> + e_widget_disabled_set (cfdata->monitor_check, 1);
> + }
> + e_widget_framelist_object_append (of, cfdata->monitor_check);
> +
> + e_widget_list_object_append (o, of, 1, 1, 0.5);
>
> of = e_widget_frametable_add (evas, D_("Port Settings"), 1);
>
> @@ -257,6 +277,7 @@
> cb = E_NEW (Config_Box, 1);
> cb->type = 0;
> cb->port = 110;
> + cb->monitor = 1;
> cb->ssl = 0;
> cb->local = 0;
> is_new = 1;
> @@ -271,10 +292,12 @@
>
> cb->type = cfdata->type;
> cb->port = atoi (cfdata->port);
> + cb->monitor = cfdata->monitor;
> cb->ssl = cfdata->ssl;
> cb->local = cfdata->local;
>
> cb->use_exec = cfdata->use_exec;
> +
> if (cb->exec)
> evas_stringshare_del (cb->exec);
> if (cfdata->exec != NULL)
> @@ -318,11 +341,14 @@
> cb->cur_path = evas_stringshare_add ("");
>
> if (!is_new)
> - e_config_save_queue ();
> + {
> + e_config_save_queue ();
> + _mail_mbox_check_monitors ();
> + }
>
> if (is_new)
> {
> -// cfd->data = cb;
> +/* cfd->data = cb; */
> mail_ci->boxes = evas_list_append (mail_ci->boxes, cb);
> e_config_save_queue ();
> _mail_box_added (mail_ci->id, cb->name);
> @@ -333,6 +359,17 @@
> }
>
> static void
> +_monitor_cb_change (void *data, Evas_Object * obj)
> +{
> + E_Config_Dialog_Data *cfdata;
> +
> + cfdata = data;
> + if (cfdata->type == MAIL_TYPE_MBOX)
> + {
> + }
> +}
> +
> +static void
> _type_cb_change (void *data, Evas_Object * obj)
> {
> E_Config_Dialog_Data *cfdata;
> @@ -384,6 +421,17 @@
> e_widget_disabled_set (cfdata->cur_path_entry, 0);
> e_widget_entry_text_set (cfdata->port_entry, "");
> }
> +
> + if (cfdata->type == 3)
> + {
> + e_widget_check_checked_set (cfdata->monitor_check, 1);
> + e_widget_disabled_set (cfdata->monitor_check, 0);
> + }
> + else
> + {
> + e_widget_check_checked_set (cfdata->monitor_check, 0);
> + e_widget_disabled_set (cfdata->monitor_check, 1);
> + }
> }
>
> static void
> diff -ur mail/e_mod_main.c mail-merged_files/e_mod_main.c
> --- mail/e_mod_main.c 2006-09-16 18:44:54.000000000 +0200
> +++ mail-merged_files/e_mod_main.c 2006-09-16 17:45:22.000000000 +0200
> @@ -71,7 +71,7 @@
> Mail *mail;
> Config_Item *ci;
> Evas_List *l, *j;
> - int have_pop = 0, have_imap = 0;
> + int have_pop = 0, have_imap = 0, have_mbox = 0;
>
> inst = E_NEW (Instance, 1);
> ci = _mail_config_item_get (id);
> @@ -132,7 +132,12 @@
> _mail_mdir_add_mailbox (inst, cb);
> break;
> case MAIL_TYPE_MBOX:
> + have_mbox = 1;
> _mail_mbox_add_mailbox (inst, cb);
> + if (!inst->check_timer)
> + inst->check_timer =
> + ecore_timer_add ((ci->check_time * 60.0), _mail_cb_check,
> + inst);
> break;
> }
> }
> @@ -140,6 +145,8 @@
> _mail_pop_check_mail (inst);
> if (have_imap)
> _mail_imap_check_mail (inst);
> + if (have_mbox)
> + _mail_mbox_check_mail (inst);
> }
> return gcc;
> }
> @@ -356,6 +363,7 @@
> E_CONFIG_VAL (D, T, name, STR);
> E_CONFIG_VAL (D, T, type, INT);
> E_CONFIG_VAL (D, T, port, INT);
> + E_CONFIG_VAL (D, T, monitor, UCHAR);
> E_CONFIG_VAL (D, T, ssl, UCHAR);
> E_CONFIG_VAL (D, T, local, UCHAR);
> E_CONFIG_VAL (D, T, host, STR);
> @@ -543,7 +551,7 @@
> Instance *inst = data;
> Config_Item *ci;
> Evas_List *l;
> - int have_imap = 0, have_pop = 0;
> + int have_imap = 0, have_pop = 0, have_mbox = 0;
>
> if (!inst)
> return 1;
> @@ -564,6 +572,7 @@
> case MAIL_TYPE_MDIR:
> break;
> case MAIL_TYPE_MBOX:
> + have_mbox = 1;
> break;
> case MAIL_TYPE_POP:
> have_pop = 1;
> @@ -574,13 +583,15 @@
> }
> }
>
> - if ((have_imap) || (have_pop))
> + if ((have_imap) || (have_pop) || (have_mbox))
> edje_object_signal_emit (inst->mail->mail_obj, "check_mail", "");
>
> if (have_imap)
> _mail_imap_check_mail (inst);
> if (have_pop)
> - _mail_pop_check_mail (inst);
> + _mail_pop_check_mail (inst);
> + if (have_mbox)
> + _mail_mbox_check_mail (inst);
> return 1;
> }
>
> diff -ur mail/e_mod_main.h mail-merged_files/e_mod_main.h
> --- mail/e_mod_main.h 2006-09-16 18:44:54.000000000 +0200
> +++ mail-merged_files/e_mod_main.h 2006-09-16 17:45:22.000000000 +0200
> @@ -60,6 +60,7 @@
> int port;
> unsigned char local;
> unsigned char ssl;
> + unsigned char monitor;
> const char *host;
> const char *user;
> const char *pass;
> diff -ur mail/mbox.c mail-merged_files/mbox.c
> --- mail/mbox.c 2006-09-16 18:44:54.000000000 +0200
> +++ mail-merged_files/mbox.c 2006-09-16 17:45:21.000000000 +0200
> @@ -4,8 +4,9 @@
>
> static Evas_List *mboxes;
>
> -static void _mail_mbox_check_mail (void *data, Ecore_File_Monitor *
> monitor,
> - Ecore_File_Event event, const char
> *path);
> +static void _mail_mbox_check_mail_parser (Config_Box *cb);
> +static void _mail_mbox_check_mail_monitor (void *data,
> Ecore_File_Monitor * monitor,
> + Ecore_File_Event event, const
> char *path);
>
> void
> _mail_mbox_add_mailbox (void *data, void *data2)
> @@ -22,13 +23,46 @@
> mb->data = data;
> mb->config->num_new = 0;
> mb->config->num_total = 0;
> - mb->monitor =
> - ecore_file_monitor_add (cb->new_path, _mail_mbox_check_mail, mb);
> +
> + if (mb->config->monitor)
> + mb->monitor =
> + ecore_file_monitor_add (mb->config->new_path,
> _mail_mbox_check_mail_monitor, mb);
>
> mboxes = evas_list_append (mboxes, mb);
> }
>
> void
> +_mail_mbox_check_monitors ()
> +{
> + Evas_List *l;
> +
> + for (l = mboxes; l; l = l->next)
> + {
> + MboxClient *mb;
> +
> + mb = l->data;
> + if (!mb)
> + continue;
> +
> + if (mb->config->monitor)
> + {
> + if (!mb->monitor)
> + mb->monitor =
> + ecore_file_monitor_add (mb->config->new_path,
> _mail_mbox_check_mail_monitor, mb);
> + }
> + else
> + {
> + if (mb->monitor)
> + {
> + ecore_file_monitor_del (mb->monitor);
> + }
> + mb->monitor = NULL;
> + }
> + break;
> + }
> +}
> +
> +void
> _mail_mbox_del_mailbox (void *data)
> {
> Config_Box *cb;
> @@ -73,16 +107,51 @@
> }
> }
>
> +void _mail_mbox_check_mail (void *data)
> +{
> + Evas_List *l;
> + Instance *inst;
> + int num_new_prev;
> +
> + inst = data;
> + if (!inst)
> + return;
> +
> + for (l = mboxes; l; l = l->next)
> + {
> + MboxClient *mb;
> + Config_Box *cb;
> +
> + mb = l->data;
> + if (!mb)
> + continue;
> + mb->data = inst;
> +
> + cb = mb->config;
> + if (!cb)
> + continue;
> +
> + num_new_prev = cb->num_new;
> + _mail_mbox_check_mail_parser(cb);
> +
> + /* Only launch the program if the number of new mails increased.
> + This is hacky but better than launching it every time there's
> + unread/new mail imho */
> +
> + _mail_set_text (mb->data);
> + if ((mb->config->num_new > 0) && (mb->config->num_new > num_new_prev)
> + && (mb->config->use_exec) && (mb->config->exec))
> + _mail_start_exe (mb->config);
> + }
> +}
> +
> /* PRIVATES */
> static void
> -_mail_mbox_check_mail (void *data, Ecore_File_Monitor * monitor,
> - Ecore_File_Event event, const char *path)
> +_mail_mbox_check_mail_monitor (void *data, Ecore_File_Monitor * monitor,
> + Ecore_File_Event event, const char *path)
> {
> MboxClient *mb;
> Config_Box *cb;
> - FILE *f;
> - char buf[1024];
> - int header;
>
> mb = data;
> if (!mb)
> @@ -91,33 +160,49 @@
> cb = mb->config;
> if (!cb)
> return;
> +
> + _mail_mbox_check_mail_parser(cb);
> +
> + _mail_set_text (mb->data);
> + if ((mb->config->num_new > 0) && (mb->config->use_exec)
> + && (mb->config->exec))
> + _mail_start_exe (mb->config);
> +}
> +
> +static void
> +_mail_mbox_check_mail_parser (Config_Box *cb)
> +{
> + FILE *f;
> + int header;
> + char buf[1024];
> +
> if (!cb->new_path)
> return;
>
> if (!(f = fopen (cb->new_path, "r")))
> - return;
> + return;
>
> - mb->config->num_new = 0;
> - mb->config->num_total = 0;
> + cb->num_new = 0;
> + cb->num_total = 0;
>
> while (fgets (buf, sizeof (buf), f))
> {
> if (buf[0] == '\n')
> - header = 0;
> + header = 0;
> else if (!strncmp (buf, "From ", 5))
> {
> header = 1;
> - mb->config->num_total++;
> - mb->config->num_new++;
> + cb->num_total++;
> + cb->num_new++;
> + }
> + else if (header)
> + {
> + if ((!strncmp (buf, "Status: ", 8)) && (strchr (buf, 'R')))
> + cb->num_new--;
> + /* Support for Mozilla/Thunderbird mbox format */
> + else if ((!strncmp (buf, "X-Mozilla-Status: ", 18)) &&
> (!strstr (buf, "0000")))
> + cb->num_new--;
> }
> - else if ((header) && (!strncmp (buf, "Status: ", 7))
> - && (strchr (buf, 'R')))
> - mb->config->num_new--;
> }
> fclose (f);
> -
> - _mail_set_text (mb->data);
> - if ((mb->config->num_new > 0) && (mb->config->use_exec)
> - && (mb->config->exec))
> - _mail_start_exe (mb->config);
> }
> diff -ur mail/mbox.h mail-merged_files/mbox.h
> --- mail/mbox.h 2006-09-16 18:44:54.000000000 +0200
> +++ mail-merged_files/mbox.h 2006-09-16 17:45:21.000000000 +0200
> @@ -16,5 +16,6 @@
> void _mail_mbox_add_mailbox(void *data, void *data2);
> void _mail_mbox_del_mailbox(void *data);
> void _mail_mbox_shutdown();
> -
> +void _mail_mbox_check_mail(void *data);
> +void _mail_mbox_check_monitors ();
> #endif
>
>
>
>
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
Sounds great :) Can you actually attach the patches tho? :) When I save
attachments, all I get is the tomcat message :)
Cheers,
devilhorns
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel