mirror of
https://github.com/moparisthebest/hexchat
synced 2024-11-26 19:22:22 -05:00
95 lines
1.4 KiB
C
95 lines
1.4 KiB
C
|
/* XCHAT 2.0 PLUGIN: Mail checker */
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
#include "xchat-plugin.h"
|
||
|
|
||
|
|
||
|
static xchat_plugin *ph; /* plugin handle */
|
||
|
|
||
|
static int
|
||
|
mail_items(char *file)
|
||
|
{
|
||
|
FILE *fp;
|
||
|
int items;
|
||
|
char buf[512];
|
||
|
|
||
|
fp = fopen(file, "r");
|
||
|
if(!fp)
|
||
|
return 1;
|
||
|
|
||
|
items = 0;
|
||
|
while(fgets(buf, sizeof buf, fp))
|
||
|
{
|
||
|
if(!strncmp(buf, "From ", 5))
|
||
|
items++;
|
||
|
}
|
||
|
fclose(fp);
|
||
|
|
||
|
return items;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
xchat_mail_check (void)
|
||
|
{
|
||
|
static int last_size = -1;
|
||
|
int size;
|
||
|
struct stat st;
|
||
|
char buf[512];
|
||
|
char *maildir;
|
||
|
|
||
|
maildir = getenv("MAIL");
|
||
|
if(!maildir)
|
||
|
{
|
||
|
snprintf (buf, sizeof(buf), "/var/spool/mail/%s", getenv("USER"));
|
||
|
maildir = buf;
|
||
|
}
|
||
|
|
||
|
if(stat(maildir, &st) < 0)
|
||
|
return;
|
||
|
|
||
|
size = st.st_size;
|
||
|
|
||
|
if(last_size == -1)
|
||
|
{
|
||
|
last_size = size;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if(size > last_size)
|
||
|
{
|
||
|
xchat_printf(ph,
|
||
|
"-\0033-\0039-\017\tYou have new mail (%d messages, %d bytes total).",
|
||
|
mail_items(maildir), size);
|
||
|
}
|
||
|
|
||
|
last_size = size;
|
||
|
}
|
||
|
|
||
|
static int timeout_cb(void *userdata)
|
||
|
{
|
||
|
xchat_mail_check();
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int xchat_plugin_init(xchat_plugin *plugin_handle,
|
||
|
char **plugin_name, char **plugin_desc, char **plugin_version,
|
||
|
char *arg)
|
||
|
{
|
||
|
ph = plugin_handle;
|
||
|
|
||
|
*plugin_name = "MailCheck";
|
||
|
*plugin_desc = "Checks your mailbox every 30 seconds";
|
||
|
*plugin_version = "0.1";
|
||
|
|
||
|
xchat_hook_timer(ph, 30000, timeout_cb, 0);
|
||
|
|
||
|
return 1;
|
||
|
}
|