Mercurial > pidgin.yaz
view plugins/mailchk.c @ 3458:66b1ad9782a9
[gaim-migrate @ 3506]
From KingAnt:
aim.h:
-Change the #defines for AIM client info so they're shorter.
-Add 2 #defines for ICQ--the first one (the default) is what Gaim
has been using, it was taken out of auth.c. The other is what an
ICQ 2002a client uses.
-Add an CLIENTINFO_ICQ_KNOWNGOOD
auth.c:
-Have the ICQ login use the given client info, rather than
using hard coded values.
oscar.c:
-Rename "gaim_caps" to "caps_aim" and added a "caps_icq," so
AIM and ICQ can have different capabilities.
-Make changes to gaim_parse_login so the ICQ sends ICQ client
info, and AIM sends AIM client info.
-Make changes to conninitdone_bos so only ICQ sets the privacy
flag and visibility mask. AIM sets this via SSI.
-Change a few calls to aim_bos_setprofile so ICQ does not
send a profile TLV, and so ICQ uses the ICQ caps and AIM uses
the AIM caps.
-Change a call to g_show_info_text so a pointer to the window
is not left haning around?
-Correctly set the occupied and do not disturb ICQ states.
This is how winicq does it.
-Correctly show winicq users as NA.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Wed, 28 Aug 2002 06:48:14 +0000 |
parents | 4f2f12bf4408 |
children | cd938f18f3f8 |
line wrap: on
line source
#define GAIM_PLUGINS #include "gaim.h" #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #define ANY_MAIL 0x01 #define UNREAD_MAIL 0x02 #define NEW_MAIL 0x04 static guint32 timer = 0; static GtkWidget *mail = NULL; static gint check_mail() { static off_t oldsize = 0; gchar *filename; off_t newsize; struct stat s; gint ret = 0; filename = g_getenv("MAIL"); if (!filename) filename = g_strconcat("/var/spool/mail/", g_get_user_name(), NULL); else filename = g_strdup(filename); if (stat(filename, &s) < 0) { g_free(filename); return -1; } newsize = s.st_size; if (newsize) ret |= ANY_MAIL; if (s.st_mtime > s.st_atime && newsize) ret |= UNREAD_MAIL; if (newsize != oldsize && (ret & UNREAD_MAIL)) ret |= NEW_MAIL; oldsize = newsize; g_free(filename); return ret; } static void maildes() { mail = NULL; } static gboolean check_timeout(gpointer data) { gint count = check_mail(); if (count == -1) return FALSE; if (!blist) return TRUE; if (!mail) { /* guess we better build it then :P */ GList *tmp = gtk_container_children(GTK_CONTAINER(blist)); GtkWidget *vbox2 = (GtkWidget *)tmp->data; mail = gtk_label_new("No mail messages."); gtk_box_pack_start(GTK_BOX(vbox2), mail, FALSE, FALSE, 0); gtk_box_reorder_child(GTK_BOX(vbox2), mail, 1); gtk_signal_connect(GTK_OBJECT(mail), "destroy", GTK_SIGNAL_FUNC(maildes), NULL); gtk_widget_show(mail); } if (count & NEW_MAIL) play_sound(SND_POUNCE_DEFAULT); if (count & UNREAD_MAIL) gtk_label_set_text(GTK_LABEL(mail), "You have new mail!"); else if (count & ANY_MAIL) gtk_label_set_text(GTK_LABEL(mail), "You have mail."); else gtk_label_set_text(GTK_LABEL(mail), "No mail messages."); return TRUE; } static void mail_signon(struct gaim_connection *gc) { if (blist && !timer) timer = gtk_timeout_add(2000, check_timeout, NULL); } static void mail_signoff(struct gaim_connection *gc) { if (!blist && timer) { gtk_timeout_remove(timer); timer = 0; } } char *gaim_plugin_init(GModule *m) { if (!check_timeout(NULL)) return "Could not read $MAIL or /var/spool/mail/$USER"; if (blist) timer = gtk_timeout_add(2000, check_timeout, NULL); gaim_signal_connect(m, event_signon, mail_signon, NULL); gaim_signal_connect(m, event_signoff, mail_signoff, NULL); return NULL; } void gaim_plugin_remove() { if (timer) gtk_timeout_remove(timer); timer = 0; if (mail) gtk_widget_destroy(mail); mail = NULL; } char *name() { return "Mail Check"; } char *description() { return "Checks for new local mail"; }