git-svn-id: svn://svn.code.sf.net/p/bitchx/code/tags/ircii-pana-1.1-final@1 13b04d17-f746-0410-82c6-800466cd88b0
159 lines
3.2 KiB
C
159 lines
3.2 KiB
C
/*
|
|
* Mail check routines. Based on EPIC's mail check
|
|
*/
|
|
|
|
#include "irc.h"
|
|
#include "struct.h"
|
|
|
|
#include "hook.h"
|
|
#include "ircaux.h"
|
|
#include "output.h"
|
|
#include "lastlog.h"
|
|
#include "status.h"
|
|
#include "vars.h"
|
|
#include "window.h"
|
|
#include <sys/stat.h>
|
|
|
|
#include "module.h"
|
|
#define INIT_MODULE
|
|
#include "modval.h"
|
|
|
|
#ifndef UNIX_MAIL
|
|
#define UNIX_MAIL "~/Maildir"
|
|
#endif
|
|
|
|
/*
|
|
* check_mail_status: returns 0 if mail status has not changed, 1 if mail
|
|
* status has changed
|
|
*/
|
|
|
|
int check_qmail_status(void)
|
|
{
|
|
int count = 0;
|
|
DIR *dp;
|
|
struct dirent *dir;
|
|
static int c = 0;
|
|
char *m;
|
|
char *mail_path = NULL;
|
|
|
|
if (!get_int_var(MAIL_VAR))
|
|
return 0;
|
|
|
|
if (!(mail_path = get_dllstring_var("qmaildir")))
|
|
m = m_sprintf("%s/new", UNIX_MAIL);
|
|
else
|
|
m = m_sprintf("%s/new", mail_path);
|
|
mail_path = expand_twiddle(m);
|
|
new_free(&m);
|
|
|
|
if (!mail_path)
|
|
return 0;
|
|
if ((dp = opendir(mail_path)))
|
|
{
|
|
while ((dir = readdir(dp)))
|
|
{
|
|
if (!dir->d_ino || (dir->d_name[0] == '.'))
|
|
continue;
|
|
count++;
|
|
}
|
|
closedir(dp);
|
|
}
|
|
if (count > c)
|
|
{
|
|
c = count;
|
|
return c;
|
|
}
|
|
else if (count <= c)
|
|
{
|
|
c = count;
|
|
return -count;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* check_mail: This here thing counts up the number of pieces of mail and
|
|
* returns it as static string. If there are no mail messages, null is
|
|
* returned.
|
|
*/
|
|
|
|
char *check_qmail (void)
|
|
{
|
|
static int old_count = 0;
|
|
static char ret_str[12];
|
|
static int i = 0;
|
|
|
|
switch (get_int_var(MAIL_VAR))
|
|
{
|
|
case 0:
|
|
return NULL;
|
|
case 1:
|
|
{
|
|
char this[] = "\\|/-";
|
|
int count;
|
|
if ((count = check_qmail_status()) > 0)
|
|
{
|
|
set_display_target(NULL, LOG_CRAP);
|
|
if (do_hook(MAIL_LIST, "%s %s", "Mail", "Yes"))
|
|
put_it("%s", convert_output_format(fget_string_var(FORMAT_MAIL_FSET), "%s %s %s", update_clock(GET_TIME), "Mail", "Yes"));
|
|
reset_display_target();
|
|
if (i == 4)
|
|
i = 0;
|
|
sprintf(ret_str, "%c", this[i++]);
|
|
}
|
|
else if (count == 0)
|
|
i = 0;
|
|
return *ret_str ? ret_str : NULL;
|
|
}
|
|
case 2:
|
|
{
|
|
register int count = 0;
|
|
count = check_qmail_status();
|
|
if (count == 0)
|
|
{
|
|
old_count = 0;
|
|
return NULL;
|
|
}
|
|
if (count > 0)
|
|
{
|
|
if (count > old_count)
|
|
{
|
|
set_display_target(NULL, LOG_CRAP);
|
|
if (do_hook(MAIL_LIST, "%d %d", count - old_count, count))
|
|
put_it("%s", convert_output_format(fget_string_var(FORMAT_MAIL_FSET), "%s %s %s", update_clock(GET_TIME), "Mail", "Yes"));
|
|
reset_display_target();
|
|
}
|
|
|
|
old_count = count;
|
|
sprintf(ret_str, "%d", old_count);
|
|
return ret_str;
|
|
}
|
|
else
|
|
{
|
|
if (*ret_str)
|
|
return ret_str;
|
|
}
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
char *name = "Qmail";
|
|
|
|
int Qmail_Cleanup(IrcCommandDll **interp, Function_ptr *global_table)
|
|
{
|
|
remove_module_proc(VAR_PROC, name, NULL, NULL);
|
|
remove_module_proc(CHECK_EXT_MAIL_STATUS|TABLE_PROC, name, NULL, NULL);
|
|
remove_module_proc(CHECK_EXT_MAIL|TABLE_PROC, name, NULL, NULL);
|
|
return 3;
|
|
}
|
|
|
|
int Qmail_Init(IrcCommandDll **interp, Function_ptr *global_table)
|
|
{
|
|
initialize_module(name);
|
|
add_module_proc(VAR_PROC, name, "qmaildir", "~/Maildir", STR_TYPE_VAR, 0, NULL, NULL);
|
|
global[CHECK_EXT_MAIL_STATUS] = (Function_ptr) check_qmail_status;
|
|
global[CHECK_EXT_MAIL] = (Function_ptr) check_qmail;
|
|
return 0;
|
|
}
|