You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.1 KiB
112 lines
2.1 KiB
#include <e.h> |
|
#include "e_mod_main.h" |
|
#include "mdir.h" |
|
|
|
static Evas_List *mdirs; |
|
|
|
static void _mail_mdir_check_mail (void *data, Ecore_File_Monitor * monitor, |
|
Ecore_File_Event event, const char *path); |
|
static int _mail_mdir_get_files (const char *path); |
|
|
|
void |
|
_mail_mdir_add_mailbox (void *data, void *data2) |
|
{ |
|
MdirClient *mc; |
|
Config_Box *cb; |
|
|
|
cb = data2; |
|
if (!cb) |
|
return; |
|
|
|
mc = E_NEW (MdirClient, 1); |
|
mc->config = cb; |
|
mc->data = data; |
|
mc->config->num_new = 0; |
|
mc->config->num_total = 0; |
|
mc->monitor = |
|
ecore_file_monitor_add (cb->new_path, _mail_mdir_check_mail, mc); |
|
|
|
mdirs = evas_list_append (mdirs, mc); |
|
} |
|
|
|
void |
|
_mail_mdir_del_mailbox (void *data) |
|
{ |
|
Config_Box *cb; |
|
Evas_List *l; |
|
|
|
cb = data; |
|
if (!cb) |
|
return; |
|
for (l = mdirs; l; l = l->next) |
|
{ |
|
MdirClient *mc; |
|
|
|
mc = l->data; |
|
if (!mc) |
|
continue; |
|
if (mc->config != cb) |
|
continue; |
|
mdirs = evas_list_remove (mdirs, mc); |
|
free (mc); |
|
mc = NULL; |
|
break; |
|
} |
|
} |
|
|
|
void |
|
_mail_mdir_shutdown () |
|
{ |
|
if (!mdirs) |
|
return; |
|
while (mdirs) |
|
{ |
|
MdirClient *mc; |
|
|
|
mc = mdirs->data; |
|
if (mc->monitor) |
|
ecore_file_monitor_del (mc->monitor); |
|
mdirs = evas_list_remove_list (mdirs, mdirs); |
|
free (mc); |
|
mc = NULL; |
|
} |
|
} |
|
|
|
/* PRIVATES */ |
|
static void |
|
_mail_mdir_check_mail (void *data, Ecore_File_Monitor * monitor, |
|
Ecore_File_Event event, const char *path) |
|
{ |
|
MdirClient *mc; |
|
|
|
mc = data; |
|
if (!mc) |
|
return; |
|
|
|
mc->config->num_total = _mail_mdir_get_files (mc->config->cur_path); |
|
mc->config->num_new = _mail_mdir_get_files (mc->config->new_path); |
|
|
|
_mail_set_text (mc->data); |
|
if ((mc->config->num_new > 0) && (mc->config->use_exec) |
|
&& (mc->config->exec)) |
|
_mail_start_exe (mc->config); |
|
} |
|
|
|
static int |
|
_mail_mdir_get_files (const char *path) |
|
{ |
|
Ecore_List *l; |
|
char *item; |
|
int i = 0; |
|
|
|
l = ecore_file_ls (path); |
|
ecore_list_goto_first (l); |
|
while ((item = (char *) ecore_list_next (l)) != NULL) |
|
{ |
|
if ((!strcmp (item, ".")) || (!strcmp (item, ".."))) |
|
continue; |
|
i++; |
|
} |
|
ecore_list_destroy (l); |
|
return i; |
|
}
|
|
|