Mercurial > pidgin.yaz
view plugins/chkmail.c @ 121:3571b593f423
[gaim-migrate @ 131]
If buddy signs off, then signs on again before they get erased, it wouldn't
alert properly. Now it does.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Sat, 15 Apr 2000 23:52:33 +0000 |
parents | 668727c82810 |
children | 5f294f7c4f2e |
line wrap: on
line source
/* This is some funky code. It is still being developed by Rob Flynn - rob@linuxpimps.com * I recommend not using this code right now. :) */ #define GAIM_PLUGINS #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include "gaim.h" char username[] = ""; char password[] = ""; char mailhost[] = ""; int mailport = 110; static void *handle = NULL; extern GtkWidget *blist; GtkWidget *maily; GtkWidget *vbox2; GtkWidget *yo; GList *tmp; int lastnum = 0; int orig = 0; int mytimer; void update_mail(); int num_msgs() { struct in_addr *sin; char recv[1024]; char command[256]; int fd; int num = 0; int step = 0; int len; sin = (struct in_addr *)get_address(mailhost); fd = connect_address(sin->s_addr, mailport); while ((len = read(fd, recv, 1023))>0) { recv[len] = 0; if (!strncmp(recv, "-ERR", strlen("-ERR"))) { step = 4; break; } else if (!strncmp(recv, "+OK", strlen("+OK"))) { if (step == 3) { if (sscanf(recv, "+OK %d %d\n", &num, &step) != 2) break; g_snprintf(command, sizeof(command), "QUIT\n"); write(fd, command, strlen(command)); close(fd); return num; } if (step == 0) { g_snprintf(command, sizeof(command), "USER %s\n", username); write(fd, command, strlen(command)); step = 1; } else if (step == 1) { g_snprintf(command, sizeof(command), "PASS %s\n", password); write(fd, command, strlen(command)); step = 2; } else if (step == 2) { g_snprintf(command, sizeof(command), "STAT\n"); write(fd, command, strlen(command)); step = 3; } } } close(fd); return 0; } void gaim_plugin_init(void *h) { handle = h; tmp = gtk_container_children(GTK_CONTAINER(blist)); maily = gtk_label_new("You have no new email"); vbox2 = (GtkWidget *)tmp->data; yo = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(yo), GTK_SHADOW_IN ); gtk_widget_show(yo); gtk_box_pack_start(GTK_BOX(vbox2), yo, FALSE, FALSE, 5); gtk_box_reorder_child(GTK_BOX(vbox2), yo, 2); gtk_container_add(GTK_CONTAINER(yo), maily); gtk_widget_show(maily); orig = num_msgs(); lastnum = orig; mytimer = gtk_timeout_add(30000, (GtkFunction)update_mail, NULL); } void update_mail () { int newnum; gchar *buf; gtk_timeout_remove(mytimer); newnum = num_msgs(); buf = g_malloc(BUF_LONG); if ( (newnum >= lastnum) && (newnum > 0)) { g_snprintf(buf, BUF_LONG, "You have %d new e-mail(s)", newnum - orig); } else { g_snprintf(buf, BUF_LONG, "You have no new email"); } gtk_widget_destroy(maily); maily = gtk_label_new(buf); g_free(buf); gtk_container_add(GTK_CONTAINER(yo), maily); gtk_widget_show(maily); if (newnum < lastnum) { orig = 0; } lastnum = newnum; mytimer = gtk_timeout_add(30000, (GtkFunction)update_mail, NULL); } void gaim_plugin_remove() { handle = NULL; gtk_widget_hide(maily); gtk_widget_destroy(yo); gtk_timeout_remove(mytimer); } char *name() { return "Check Mail"; } char *description() { return "Check email every X seconds.\n"; }