Multiple Fixes:

- Stop changing icons when we check the mail and only set to new
mail icon if we actually have mail. Thanks HandAndE :)
     - Only create one ecore_con_server to handle all accounts. Thanks
englebass :)


SVN revision: 23352
This commit is contained in:
Christopher Michael 2006-06-10 12:35:33 +00:00
parent 6684bfeea3
commit 217abbac3e
2 changed files with 145 additions and 117 deletions

View File

@ -21,6 +21,7 @@
#include <dirent.h> #include <dirent.h>
#include <e.h> #include <e.h>
#include <Ecore.h> #include <Ecore.h>
#include <Ecore_Con.h>
#include <Ecore_File.h> #include <Ecore_File.h>
#include "e_mod_main.h" #include "e_mod_main.h"
@ -63,14 +64,10 @@ struct _Mailbox
int has_mail; int has_mail;
int num_new; int num_new;
int num_total; int num_total;
Ecore_Exe *exe;
Ecore_Con_Server *server; Ecore_Con_Server *server;
Ecore_Event_Handler *add_handler;
Ecore_Event_Handler *del_handler;
Ecore_Event_Handler *data_handler;
Ecore_File_Monitor *monitor; Ecore_File_Monitor *monitor;
Ecore_Event_Handler *exit_handler; Ecore_Exe *exe;
Ecore_Event_Handler *exit_handler;
}; };
/* Func Protos for Gadcon */ /* Func Protos for Gadcon */
@ -101,11 +98,16 @@ static void _mail_mdir_check(void *data, Ecore_File_Monitor *monitor, Ecore_File
static int _mail_mdir_get_files(const char *path); static int _mail_mdir_get_files(const char *path);
static void _mail_set_text(void *data); static void _mail_set_text(void *data);
static int _mail_cb_exe_exit(void *data, int type, void *event); static int _mail_cb_exe_exit(void *data, int type, void *event);
static Mailbox *_mail_find_mailbox(void *data, void *data2);
static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_edd = NULL;
static E_Config_DD *conf_item_edd = NULL; static E_Config_DD *conf_item_edd = NULL;
static E_Config_DD *conf_box_edd = NULL; static E_Config_DD *conf_box_edd = NULL;
static Ecore_Event_Handler *add_handler;
static Ecore_Event_Handler *del_handler;
static Ecore_Event_Handler *data_handler;
Config *mail_config = NULL; Config *mail_config = NULL;
static const E_Gadcon_Client_Class _gc_class = static const E_Gadcon_Client_Class _gc_class =
@ -147,11 +149,18 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
edje_object_signal_emit(inst->mail_obj, "label_active", ""); edje_object_signal_emit(inst->mail_obj, "label_active", "");
else else
edje_object_signal_emit(inst->mail_obj, "label_passive", ""); edje_object_signal_emit(inst->mail_obj, "label_passive", "");
mail_config->instances = evas_list_append(mail_config->instances, inst); mail_config->instances = evas_list_append(mail_config->instances, inst);
if (!ci->boxes) return gcc; if (!add_handler)
add_handler = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, _mail_server_add, inst);
if (!del_handler)
del_handler = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, _mail_server_del, inst);
if (!data_handler)
data_handler = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, _mail_server_data, inst);
if (!ci->boxes) return gcc;
for (l = ci->boxes; l; l = l->next) for (l = ci->boxes; l; l = l->next)
{ {
Mailbox *mb; Mailbox *mb;
@ -161,9 +170,9 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
mb = E_NEW(Mailbox, 1); mb = E_NEW(Mailbox, 1);
mb->inst = inst; mb->inst = inst;
mb->config = cb; mb->config = cb;
mb->server = NULL;
mb->state = STATE_DISCONNECTED; mb->state = STATE_DISCONNECTED;
mb->cmd = 0; mb->cmd = 0;
mb->server = NULL;
inst->mboxes = evas_list_append(inst->mboxes, mb); inst->mboxes = evas_list_append(inst->mboxes, mb);
if (cb->type == MAIL_TYPE_MDIR) if (cb->type == MAIL_TYPE_MDIR)
@ -185,19 +194,23 @@ _gc_shutdown(E_Gadcon_Client *gcc)
{ {
Instance *inst; Instance *inst;
if (add_handler) ecore_event_handler_del(add_handler);
if (data_handler) ecore_event_handler_del(data_handler);
if (del_handler) ecore_event_handler_del(del_handler);
inst = gcc->data; inst = gcc->data;
if (inst->check_timer) ecore_timer_del(inst->check_timer); if (inst->check_timer) ecore_timer_del(inst->check_timer);
while (inst->mboxes) while (inst->mboxes)
{ {
Mailbox *mb; Mailbox *mb;
mb = inst->mboxes->data; mb = inst->mboxes->data;
if (mb->monitor) ecore_file_monitor_del(mb->monitor); if (mb->monitor) ecore_file_monitor_del(mb->monitor);
if (mb->add_handler) ecore_event_handler_del(mb->add_handler);
if (mb->data_handler) ecore_event_handler_del(mb->data_handler);
if (mb->del_handler) ecore_event_handler_del(mb->del_handler);
if (mb->server) ecore_con_server_del(mb->server); if (mb->server) ecore_con_server_del(mb->server);
mb->server = NULL; mb->server = NULL;
mb->cmd = 0;
mb->state = STATE_DISCONNECTED;
inst->mboxes = evas_list_remove_list(inst->mboxes, inst->mboxes); inst->mboxes = evas_list_remove_list(inst->mboxes, inst->mboxes);
free(mb); free(mb);
} }
@ -239,17 +252,12 @@ _gc_icon(Evas *evas)
static void static void
_mail_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) _mail_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
{ {
Instance *inst; Instance *inst = data;
Evas_Event_Mouse_Down *ev; Evas_Event_Mouse_Down *ev = event_info;
Config_Item *ci;
Evas_List *l; Evas_List *l;
inst = data;
if (!inst) return; if (!inst) return;
ci = _mail_config_item_get(inst->gcc->id);
ev = event_info;
if ((ev->button == 3) && (!mail_config->menu)) if ((ev->button == 3) && (!mail_config->menu))
{ {
E_Menu *mn, *sn; E_Menu *mn, *sn;
@ -305,26 +313,26 @@ _mail_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
ev->timestamp); ev->timestamp);
evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button, EVAS_BUTTON_NONE, ev->timestamp, NULL); evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button, EVAS_BUTTON_NONE, ev->timestamp, NULL);
} }
else if ((ev->button == 1) && (inst)) else if (ev->button == 1)
_mail_cb_check(inst); _mail_cb_check(inst);
} }
static void static void
_mail_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info) _mail_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
{ {
Instance *inst; Instance *inst = data;
inst = data; if (!inst) return;
edje_object_signal_emit(inst->mail_obj, "label_active", ""); edje_object_signal_emit(inst->mail_obj, "label_active", "");
} }
static void static void
_mail_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info) _mail_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info)
{ {
Instance *inst; Instance *inst = data;
Config_Item *ci; Config_Item *ci;
inst = data; if (!inst) return;
ci = _mail_config_item_get(inst->gcc->id); ci = _mail_config_item_get(inst->gcc->id);
if (!ci->show_label) if (!ci->show_label)
edje_object_signal_emit(inst->mail_obj, "label_passive", ""); edje_object_signal_emit(inst->mail_obj, "label_passive", "");
@ -341,10 +349,10 @@ _mail_menu_cb_post(void *data, E_Menu *m)
static void static void
_mail_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi) _mail_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi)
{ {
Instance *inst; Instance *inst = data;
Config_Item *ci; Config_Item *ci;
inst = data; if (!inst) return;
ci = _mail_config_item_get(inst->gcc->id); ci = _mail_config_item_get(inst->gcc->id);
_config_mail_module(ci); _config_mail_module(ci);
} }
@ -535,20 +543,20 @@ _mail_free(Mail *mail)
static int static int
_mail_cb_check(void *data) _mail_cb_check(void *data)
{ {
Instance *inst; Instance *inst = data;
Evas_List *l; Evas_List *l;
Ecore_Con_Type type; Ecore_Con_Type type;
Ecore_Con_Server *server;
inst = data;
if (!inst->mboxes) return;
if (!inst) return 1;
if (!inst->mboxes) return 1;
for (l = inst->mboxes; l; l = l->next) for (l = inst->mboxes; l; l = l->next)
{ {
Mailbox *mb; Mailbox *mb;
Config_Box *cb; Config_Box *cb;
mb = l->data; mb = l->data;
mb->server = NULL;
mb->inst = inst; mb->inst = inst;
cb = mb->config; cb = mb->config;
@ -556,62 +564,61 @@ _mail_cb_check(void *data)
if (cb->port <= 0) continue; if (cb->port <= 0) continue;
if (cb->type > 1) continue; if (cb->type > 1) continue;
if (!mb->add_handler)
mb->add_handler = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, _mail_server_add, mb);
if (!mb->del_handler)
mb->del_handler = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, _mail_server_del, mb);
if (!mb->data_handler)
mb->data_handler = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, _mail_server_data, mb);
type = ECORE_CON_REMOTE_SYSTEM; type = ECORE_CON_REMOTE_SYSTEM;
if (cb->ssl) if (cb->ssl)
type |= ECORE_CON_USE_SSL; type |= ECORE_CON_USE_SSL;
mb->server = ecore_con_server_connect(type, cb->host, cb->port, mb); server = ecore_con_server_connect(type, cb->host, cb->port, inst);
mb->server = server;
mb->state = STATE_CONNECTED; mb->state = STATE_CONNECTED;
mb->cmd = 0;
} }
return 1; return 1;
} }
static int static int
_mail_server_add(void *data, int type, void *event) _mail_server_add(void *data, int type, void *event)
{ {
Instance *inst = data;
Mailbox *mb; Mailbox *mb;
Ecore_Con_Event_Server_Add *ev; Ecore_Con_Event_Server_Add *ev = event;
mb = data;
if (!mb) return 1;
ev = event; if (!inst) return 1;
if ((!mb->server) || (mb->server != ev->server)) return 1; if (!inst->mboxes) return 1;
mb = _mail_find_mailbox(inst, ev->server);
if (!mb) return 1;
mb->state = STATE_CONNECTED; mb->state = STATE_CONNECTED;
mb->cmd = 0; mb->cmd = 0;
return 1; return 1;
} }
static int static int
_mail_server_del(void *data, int type, void *event) _mail_server_del(void *data, int type, void *event)
{ {
Instance *inst = data;
Mailbox *mb; Mailbox *mb;
Config_Box *cb; Config_Box *cb;
Ecore_Con_Event_Server_Del *ev; Ecore_Con_Event_Server_Del *ev = event;
mb = data; if (!inst) return 1;
if (!inst->mboxes) return 1;
mb = _mail_find_mailbox(inst, ev->server);
if (!mb) return 1; if (!mb) return 1;
ev = event;
if ((!mb->server) || (mb->server != ev->server)) return 1;
cb = mb->config; cb = mb->config;
if (!cb->host) return 1; if (!cb->host) return 1;
if (mb->state == STATE_DISCONNECTED) if (mb->state == STATE_DISCONNECTED)
printf("Cannot Connect to %s\n", cb->host); printf("Cannot Connect to %s\n", cb->host);
else
mb->state = STATE_DISCONNECTED;
ecore_con_server_del(mb->server); ecore_con_server_del(ev->server);
mb->server = NULL; mb->server = NULL;
mb->cmd = 0; mb->cmd = 0;
mb->state = STATE_DISCONNECTED;
return 1; return 1;
} }
@ -619,65 +626,68 @@ _mail_server_del(void *data, int type, void *event)
static int static int
_mail_server_data(void *data, int type, void *event) _mail_server_data(void *data, int type, void *event)
{ {
Instance *inst = data;
Mailbox *mb; Mailbox *mb;
Config_Box *cb; Config_Box *cb;
Ecore_Con_Event_Server_Data *ev; Ecore_Con_Event_Server_Data *ev = event;
int ret;
mb = data;
if (!inst) return 1;
if (!inst->mboxes) return 1;
mb = _mail_find_mailbox(inst, ev->server);
if (!mb) return 1; if (!mb) return 1;
ev = event;
if ((!mb->server) || (mb->server != ev->server)) return 1;
cb = mb->config; cb = mb->config;
if (cb->type == MAIL_TYPE_POP) if (!cb) return 1;
return _mail_parse_pop(mb, ev);
else if (cb->type == MAIL_TYPE_IMAP)
return _mail_parse_imap(mb, ev);
return 1; if (cb->type == MAIL_TYPE_POP)
ret = _mail_parse_pop(mb, ev);
else if (cb->type == MAIL_TYPE_IMAP)
ret = _mail_parse_imap(mb, ev);
return ret;
} }
static int static int
_mail_parse_pop(void *data, void *data2) _mail_parse_pop(void *data, void *data2)
{ {
Mailbox *mb; Mailbox *mb = data;
Config_Box *cb; Config_Box *cb;
Ecore_Con_Event_Server_Data *ev; Ecore_Con_Event_Server_Data *ev = data2;
char in[2048], out[2048]; char in[2048], out[2048];
int len; int len;
mb = data;
if (!mb) return; if (!mb) return;
cb = mb->config;
ev = data2;
if (!ev) return; if (!ev) return;
if ((!mb->server) || (mb->server != ev->server)) return; if ((!mb->server) || (mb->server != ev->server)) return;
cb = mb->config;
len = sizeof(in) -1; len = sizeof(in) -1;
len = (((len) > (ev->size)) ? ev->size : len); len = (((len) > (ev->size)) ? ev->size : len);
memcpy(in, ev->data, len); memcpy(in, ev->data, len);
in[len] = 0; in[len] = 0;
if (!strncmp(in, "-ERR", 4)) if (!strncmp(in, "-ERR", 4))
{ {
printf("ERROR: %s\n", in); printf("ERROR: %s\n", in);
mb->state = STATE_DISCONNECTED; mb->state = STATE_DISCONNECTED;
ecore_con_server_del(mb->server); ecore_con_server_del(ev->server);
mb->server = NULL; mb->server = NULL;
mb->cmd = 0;
return 0; return 0;
} }
else if (strncmp(in, "+OK", 3)) else if (strncmp(in, "+OK", 3))
{ {
printf("Unexpected reply: %s\n", in); printf("Unexpected reply: %s\n", in);
mb->state = STATE_DISCONNECTED; mb->state = STATE_DISCONNECTED;
ecore_con_server_del(mb->server); ecore_con_server_del(ev->server);
mb->server = NULL; mb->server = NULL;
mb->cmd = 0;
return 0; return 0;
} }
if (mb->state == STATE_CONNECTED) if (mb->state == STATE_CONNECTED)
mb->state++; mb->state++;
@ -685,17 +695,17 @@ _mail_parse_pop(void *data, void *data2)
{ {
case STATE_SERVER_READY: case STATE_SERVER_READY:
len = snprintf(out, sizeof(out), "USER %s\r\n", cb->user); len = snprintf(out, sizeof(out), "USER %s\r\n", cb->user);
ecore_con_server_send(mb->server, out, len); ecore_con_server_send(ev->server, out, len);
mb->state = STATE_USER_OK; mb->state = STATE_USER_OK;
break; break;
case STATE_USER_OK: case STATE_USER_OK:
len = snprintf(out, sizeof(out), "PASS %s\r\n", cb->pass); len = snprintf(out, sizeof(out), "PASS %s\r\n", cb->pass);
ecore_con_server_send(mb->server, out, len); ecore_con_server_send(ev->server, out, len);
mb->state = STATE_PASS_OK; mb->state = STATE_PASS_OK;
break; break;
case STATE_PASS_OK: case STATE_PASS_OK:
len = snprintf(out, sizeof(out), "STAT\r\n"); len = snprintf(out, sizeof(out), "STAT\r\n");
ecore_con_server_send(mb->server, out, len); ecore_con_server_send(ev->server, out, len);
mb->state = STATE_STATUS_OK; mb->state = STATE_STATUS_OK;
break; break;
case STATE_STATUS_OK: case STATE_STATUS_OK:
@ -712,8 +722,9 @@ _mail_parse_pop(void *data, void *data2)
_mail_set_text(mb->inst); _mail_set_text(mb->inst);
ecore_con_server_del(ev->server);
mb->state = STATE_DISCONNECTED; mb->state = STATE_DISCONNECTED;
ecore_con_server_del(mb->server); mb->cmd = 0;
mb->server = NULL; mb->server = NULL;
if ((cb->use_exec) && (cb->exec != NULL)) if ((cb->use_exec) && (cb->exec != NULL))
{ {
@ -734,23 +745,20 @@ _mail_parse_pop(void *data, void *data2)
static int static int
_mail_parse_imap(void *data, void *data2) _mail_parse_imap(void *data, void *data2)
{ {
Mailbox *mb; Mailbox *mb = data;
Config_Box *cb; Config_Box *cb;
Ecore_Con_Event_Server_Data *ev; Ecore_Con_Event_Server_Data *ev = data2;
char in[2048], out[2048]; char in[2048], out[2048];
char *spc; char *spc;
size_t slen; size_t slen;
int len; int len;
mb = data;
if (!mb) return; if (!mb) return;
cb = mb->config;
ev = data2;
if (!ev) return; if (!ev) return;
if ((!mb->server) || (mb->server != ev->server)) return; if ((!mb->server) || (mb->server != ev->server)) return;
cb = mb->config;
len = sizeof(in) -1; len = sizeof(in) -1;
len = (((len) > (ev->size)) ? ev->size : len); len = (((len) > (ev->size)) ? ev->size : len);
memcpy(in, ev->data, len); memcpy(in, ev->data, len);
@ -762,19 +770,21 @@ _mail_parse_imap(void *data, void *data2)
if ((slen > 5) && (!strncmp(spc + 1, "NO ", 3))) if ((slen > 5) && (!strncmp(spc + 1, "NO ", 3)))
{ {
len = snprintf(out, sizeof(out), "A%03i LOGOUT", ++mb->cmd); len = snprintf(out, sizeof(out), "A%03i LOGOUT", ++mb->cmd);
ecore_con_server_send(mb->server, out, len); ecore_con_server_send(ev->server, out, len);
printf("Imap Failure: %s\n", spc + 4); printf("Imap Failure: %s\n", spc + 4);
mb->state = STATE_DISCONNECTED; mb->state = STATE_DISCONNECTED;
mb->cmd = 0; mb->cmd = 0;
mb->server = NULL;
return 0; return 0;
} }
else if ((slen > 6) && (!strncmp(spc + 1, "BAD ", 4))) else if ((slen > 6) && (!strncmp(spc + 1, "BAD ", 4)))
{ {
len = snprintf(out, sizeof(out), "A%03i LOGOUT", ++mb->cmd); len = snprintf(out, sizeof(out), "A%03i LOGOUT", ++mb->cmd);
ecore_con_server_send(mb->server, out, len); ecore_con_server_send(ev->server, out, len);
printf("Imap Bad Command: %s\n", spc + 5); printf("Imap Bad Command: %s\n", spc + 5);
mb->state = STATE_DISCONNECTED; mb->state = STATE_DISCONNECTED;
mb->cmd = 0; mb->cmd = 0;
mb->server = NULL;
return 0; return 0;
} }
} }
@ -786,12 +796,12 @@ _mail_parse_imap(void *data, void *data2)
{ {
case STATE_SERVER_READY: case STATE_SERVER_READY:
len = snprintf(out, sizeof(out), "A%03i LOGIN %s %s\r\n", ++mb->cmd, cb->user, cb->pass); len = snprintf(out, sizeof(out), "A%03i LOGIN %s %s\r\n", ++mb->cmd, cb->user, cb->pass);
ecore_con_server_send(mb->server, out, len); ecore_con_server_send(ev->server, out, len);
mb->state = STATE_LOGGED_IN; mb->state = STATE_LOGGED_IN;
break; break;
case STATE_LOGGED_IN: case STATE_LOGGED_IN:
len = snprintf(out, sizeof(out), "A%03i STATUS %s (MESSAGES UNSEEN)\r\n",++mb->cmd, cb->new_path); len = snprintf(out, sizeof(out), "A%03i STATUS %s (MESSAGES UNSEEN)\r\n",++mb->cmd, cb->new_path);
ecore_con_server_send(mb->server, out, len); ecore_con_server_send(ev->server, out, len);
mb->state = STATE_STATUS_OK; mb->state = STATE_STATUS_OK;
break; break;
case STATE_STATUS_OK: case STATE_STATUS_OK:
@ -807,10 +817,11 @@ _mail_parse_imap(void *data, void *data2)
_mail_set_text(mb->inst); _mail_set_text(mb->inst);
len = snprintf(out, sizeof(out), "A%03i LOGOUT", ++mb->cmd);
ecore_con_server_send(ev->server, out, len);
mb->state = STATE_DISCONNECTED; mb->state = STATE_DISCONNECTED;
mb->cmd = 0; mb->cmd = 0;
len = snprintf(out, sizeof(out), "A%03i LOGOUT", ++mb->cmd); mb->server = NULL;
ecore_con_server_send(mb->server, out, len);
if ((cb->use_exec) && (cb->exec != NULL)) if ((cb->use_exec) && (cb->exec != NULL))
{ {
if (mb->num_new <= 0) break; if (mb->num_new <= 0) break;
@ -823,6 +834,7 @@ _mail_parse_imap(void *data, void *data2)
break; break;
case STATE_DISCONNECTED: case STATE_DISCONNECTED:
mb->server = NULL; mb->server = NULL;
mb->cmd = 0;
break; break;
default: default:
break; break;
@ -833,16 +845,17 @@ _mail_parse_imap(void *data, void *data2)
static void static void
_mail_mbox_check(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path) _mail_mbox_check(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path)
{ {
Mailbox *mb; Mailbox *mb = data;
Config_Box *cb; Config_Box *cb;
FILE *f; FILE *f;
char buf[1024]; char buf[1024];
int total = 0, unread = 0; int total = 0, unread = 0;
int header; int header;
mb = data;
if (!mb) return; if (!mb) return;
cb = mb->config; cb = mb->config;
if (!cb->new_path) return;
if (!(f = fopen(cb->new_path, "r"))) if (!(f = fopen(cb->new_path, "r")))
return; return;
@ -875,9 +888,8 @@ _mail_mbox_check(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event
static void static void
_mail_mdir_check(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path) _mail_mdir_check(void *data, Ecore_File_Monitor *monitor, Ecore_File_Event event, const char *path)
{ {
Mailbox *mb; Mailbox *mb = data;
mb = data;
if (!mb) return; if (!mb) return;
mb->has_mail = 0; mb->has_mail = 0;
@ -915,17 +927,13 @@ _mail_mdir_get_files(const char *path)
static void static void
_mail_set_text(void *data) _mail_set_text(void *data)
{ {
Instance *inst; Instance *inst = data;
Evas_List *l; Evas_List *l;
char buf[4096]; char buf[4096];
int count = 0;
inst = data;
if (!inst) return; if (!inst) return;
edje_object_part_text_set(inst->mail->mail_obj, "name", "");
edje_object_signal_emit(inst->mail->mail_obj, "no_mail", "");
edje_object_part_text_set(inst->mail->mail_obj, "new_label", "");
for (l = inst->mboxes; l; l = l->next) for (l = inst->mboxes; l; l = l->next)
{ {
Mailbox *mb; Mailbox *mb;
@ -935,24 +943,24 @@ _mail_set_text(void *data)
cb = mb->config; cb = mb->config;
if (mb->has_mail) if (mb->has_mail)
{ {
count++;
edje_object_part_text_set(inst->mail->mail_obj, "name", cb->user); edje_object_part_text_set(inst->mail->mail_obj, "name", cb->user);
snprintf(buf, sizeof(buf), "%d/%d", mb->num_new, mb->num_total); snprintf(buf, sizeof(buf), "%d/%d", mb->num_new, mb->num_total);
edje_object_part_text_set(inst->mail->mail_obj, "new_label", buf); edje_object_part_text_set(inst->mail->mail_obj, "new_label", buf);
edje_object_signal_emit(inst->mail->mail_obj, "new_mail", "");
break;
} }
} }
if (count > 0)
edje_object_signal_emit(inst->mail->mail_obj, "new_mail", "");
else
edje_object_signal_emit(inst->mail->mail_obj, "no_mail", "");
} }
static int static int
_mail_cb_exe_exit(void *data, int type, void *event) _mail_cb_exe_exit(void *data, int type, void *event)
{ {
Mailbox *mb; Mailbox *mb = data;
mb = data;
if (!mb) return; if (!mb) return;
mb->exe = NULL; mb->exe = NULL;
ecore_event_handler_del(mb->exit_handler); ecore_event_handler_del(mb->exit_handler);
@ -1045,11 +1053,9 @@ _mail_box_deleted(const char *ci_name, const char *box_name)
(!strcmp(mb->config->name, cb->name))) (!strcmp(mb->config->name, cb->name)))
{ {
if (mb->monitor) ecore_file_monitor_del(mb->monitor); if (mb->monitor) ecore_file_monitor_del(mb->monitor);
if (mb->add_handler) ecore_event_handler_del(mb->add_handler);
if (mb->data_handler) ecore_event_handler_del(mb->data_handler);
if (mb->del_handler) ecore_event_handler_del(mb->del_handler);
if (mb->server) ecore_con_server_del(mb->server);
mb->server = NULL; mb->server = NULL;
mb->state = STATE_DISCONNECTED;
mb->cmd = 0;
inst->mboxes = evas_list_remove(inst->mboxes, mb); inst->mboxes = evas_list_remove(inst->mboxes, mb);
free(mb); free(mb);
break; break;
@ -1099,10 +1105,9 @@ _mail_config_updated(const char *id)
static void static void
_mail_menu_cb_exec(void *data, E_Menu *m, E_Menu_Item *mi) _mail_menu_cb_exec(void *data, E_Menu *m, E_Menu_Item *mi)
{ {
Mailbox *mb; Mailbox *mb = data;
Config_Box *cb; Config_Box *cb;
mb = data;
if (!mb) return; if (!mb) return;
if (mb->exe) return; if (mb->exe) return;
cb = mb->config; cb = mb->config;
@ -1110,3 +1115,25 @@ _mail_menu_cb_exec(void *data, E_Menu *m, E_Menu_Item *mi)
mb->exit_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _mail_cb_exe_exit, mb); mb->exit_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _mail_cb_exe_exit, mb);
mb->exe = ecore_exe_run(cb->exec, mb); mb->exe = ecore_exe_run(cb->exec, mb);
} }
static Mailbox *
_mail_find_mailbox(void *data, void *data2)
{
Instance *inst = data;
Ecore_Con_Server *serv = data2;
Evas_List *l;
Mailbox *mb;
if (!inst) return NULL;
if (!serv) return NULL;
for (l = inst->mboxes; l; l = l->next)
{
mb = l->data;
if (!mb) continue;
if (!mb->server) continue;
if (mb->server != serv) continue;
return mb;
}
return NULL;
}

View File

@ -47,6 +47,7 @@ collections
{ {
state: "default" 0.0; state: "default" 0.0;
aspect: 1.0 1.0; aspect: 1.0 1.0;
visible: 1;
rel1 rel1
{ {
relative: 0.0 0.0; relative: 0.0 0.0;