[prev in list] [next in list] [prev in thread] [next in thread]
List: enlightenment-users
Subject: Re: [e-users] [E-devel] Again: Mail module patches
From: Nikolas Arend <Nikolas.Arend () gmx ! net>
Date: 2006-09-16 22:08:50
Message-ID: 450C75F2.4040300 () gmx ! net
[Download RAW message or body]
Nikolas Arend wrote:
> Christopher Michael wrote:
>
>> Sounds great :) Can you actually attach the patches tho? :) When I save
>> attachments, all I get is the tomcat message :)
>>
>>
>>
>
> I did attach them, even the first time. They didn't get through for some
> reason. But the patches are included in the text of the email you just
> replied to. ;-) Just copy'n paste them.
>
> Best, Nick.
>
Here is an update to the longer patch I sent before. For
Mozilla/Thunderbird mbox's, the messages that are marked to be in Trash
don't get added to the total number of messages in the Inbox any more.
Nick.
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 23:53:17.000000000 +0200
+++ mail-merged_files/e_mod_config_box.c 2006-09-16
23:55:23.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 23:53:17.000000000 +0200
+++ mail-merged_files/e_mod_main.c 2006-09-16 23:55:23.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 23:53:17.000000000 +0200
+++ mail-merged_files/e_mod_main.h 2006-09-16 23:55:23.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 23:53:17.000000000 +0200
+++ mail-merged_files/mbox.c 2006-09-16 23:55:23.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,56 @@
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))
+ {
+ if (!strstr (buf, "0000"))
+ {
+ cb->num_new--;
+ if (strstr (buf, "0009"))
+ cb->num_total--;
+ }
+ }
}
- 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 23:53:17.000000000 +0200
+++ mail-merged_files/mbox.h 2006-09-16 23:55:23.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-users mailing list
enlightenment-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-users
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic