114
|
1 /* This is some funky code. It is still being developed by Rob Flynn - rob@linuxpimps.com
|
|
2 * I recommend not using this code right now. :)
|
|
3 */
|
|
4
|
105
|
5 #define GAIM_PLUGINS
|
|
6
|
|
7 #include <stdio.h>
|
114
|
8 #include <stdlib.h>
|
|
9 #include <unistd.h>
|
|
10 #include <string.h>
|
|
11 #include <netinet/in.h>
|
|
12 #include <arpa/inet.h>
|
|
13 #include <sys/socket.h>
|
|
14 #include <netdb.h>
|
|
15 #include <netinet/in.h>
|
105
|
16 #include "gaim.h"
|
|
17
|
114
|
18 char username[] = "";
|
|
19 char password[] = "";
|
|
20 char mailhost[] = "";
|
|
21 int mailport = 110;
|
|
22
|
105
|
23 static void *handle = NULL;
|
|
24 extern GtkWidget *blist;
|
|
25 GtkWidget *maily;
|
|
26 GtkWidget *vbox2;
|
114
|
27 GtkWidget *yo;
|
|
28
|
105
|
29 GList *tmp;
|
114
|
30 int lastnum = 0;
|
|
31 int orig = 0;
|
|
32 int mytimer;
|
|
33
|
|
34 void update_mail();
|
|
35
|
|
36 int num_msgs()
|
|
37 {
|
|
38 struct in_addr *sin;
|
|
39 char recv[1024];
|
|
40 char command[256];
|
|
41 int fd;
|
|
42 int num = 0;
|
|
43 int step = 0;
|
|
44 int len;
|
|
45
|
|
46 sin = (struct in_addr *)get_address(mailhost);
|
|
47 fd = connect_address(sin->s_addr, mailport);
|
|
48 while ((len = read(fd, recv, 1023))>0) {
|
|
49 recv[len] = 0;
|
|
50 if (!strncmp(recv, "-ERR", strlen("-ERR"))) { step = 4; break;
|
|
51 } else if (!strncmp(recv, "+OK", strlen("+OK"))) {
|
|
52 if (step == 3) {
|
|
53 if (sscanf(recv, "+OK %d %d\n", &num, &step) != 2)
|
|
54 break;
|
|
55 g_snprintf(command, sizeof(command), "QUIT\n");
|
|
56 write(fd, command, strlen(command));
|
|
57 close(fd);
|
|
58 return num;
|
|
59 }
|
|
60
|
|
61 if (step == 0) {
|
|
62 g_snprintf(command, sizeof(command), "USER %s\n", username);
|
|
63 write(fd, command, strlen(command));
|
|
64 step = 1;
|
|
65 } else if (step == 1) {
|
|
66 g_snprintf(command, sizeof(command), "PASS %s\n", password);
|
|
67 write(fd, command, strlen(command));
|
|
68 step = 2;
|
|
69 } else if (step == 2) {
|
|
70 g_snprintf(command, sizeof(command), "STAT\n");
|
|
71 write(fd, command, strlen(command));
|
|
72 step = 3;
|
|
73 }
|
|
74 }
|
|
75 }
|
|
76 close(fd);
|
|
77 return 0;
|
|
78 }
|
105
|
79
|
|
80 void gaim_plugin_init(void *h) {
|
|
81 handle = h;
|
|
82 tmp = gtk_container_children(GTK_CONTAINER(blist));
|
|
83
|
114
|
84 maily = gtk_label_new("You have no new email");
|
105
|
85 vbox2 = (GtkWidget *)tmp->data;
|
|
86
|
114
|
87 yo = gtk_frame_new(NULL);
|
|
88 gtk_frame_set_shadow_type(GTK_FRAME(yo), GTK_SHADOW_IN );
|
|
89 gtk_widget_show(yo);
|
|
90
|
|
91 gtk_box_pack_start(GTK_BOX(vbox2), yo, FALSE, FALSE, 5);
|
|
92 gtk_box_reorder_child(GTK_BOX(vbox2), yo, 2);
|
|
93 gtk_container_add(GTK_CONTAINER(yo), maily);
|
|
94
|
105
|
95 gtk_widget_show(maily);
|
114
|
96
|
|
97 orig = num_msgs();
|
|
98 lastnum = orig;
|
|
99
|
|
100 mytimer = gtk_timeout_add(30000, (GtkFunction)update_mail, NULL);
|
105
|
101 }
|
|
102
|
114
|
103 void update_mail () {
|
|
104 int newnum;
|
|
105 gchar *buf;
|
|
106
|
|
107 gtk_timeout_remove(mytimer);
|
|
108
|
|
109 newnum = num_msgs();
|
|
110
|
|
111 buf = g_malloc(BUF_LONG);
|
|
112
|
|
113 if ( (newnum >= lastnum) && (newnum > 0)) {
|
|
114 g_snprintf(buf, BUF_LONG, "You have %d new e-mail(s)", newnum - orig);
|
|
115 } else {
|
|
116 g_snprintf(buf, BUF_LONG, "You have no new email");
|
|
117 }
|
|
118
|
|
119 gtk_widget_destroy(maily);
|
|
120 maily = gtk_label_new(buf);
|
|
121 g_free(buf);
|
|
122
|
|
123 gtk_container_add(GTK_CONTAINER(yo), maily);
|
|
124
|
|
125 gtk_widget_show(maily);
|
|
126
|
|
127 if (newnum < lastnum) {
|
|
128 orig = 0;
|
|
129 }
|
|
130
|
|
131 lastnum = newnum;
|
|
132 mytimer = gtk_timeout_add(30000, (GtkFunction)update_mail, NULL);
|
|
133 }
|
|
134
|
|
135
|
105
|
136 void gaim_plugin_remove() {
|
|
137 handle = NULL;
|
|
138 gtk_widget_hide(maily);
|
114
|
139 gtk_widget_destroy(yo);
|
|
140 gtk_timeout_remove(mytimer);
|
105
|
141 }
|
|
142
|
|
143 char *name() {
|
|
144 return "Check Mail";
|
|
145 }
|
|
146
|
|
147 char *description() {
|
|
148 return "Check email every X seconds.\n";
|
|
149 }
|