Mercurial > pidgin
annotate plugins/mailchk.c @ 2350:0264a8a27e69
[gaim-migrate @ 2363]
I have an Abba song stuck in my head but I don't know what it's called or what any of the words are, except "Take a chance on me". Just that one line, over and over and over and over. And all because my sound card driver doesn't work and I'm too lazy to switch the speakers from blue back to penguin.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Sat, 22 Sep 2001 11:35:00 +0000 |
parents | 866bf3ced1bc |
children | 61b139b6d6d3 |
rev | line source |
---|---|
1803 | 1 #define GAIM_PLUGINS |
2 #include "gaim.h" | |
3 #include <sys/stat.h> | |
4 #include <sys/types.h> | |
5 #include <unistd.h> | |
6 | |
7 #define ANY_MAIL 0x01 | |
8 #define UNREAD_MAIL 0x02 | |
9 #define NEW_MAIL 0x04 | |
10 | |
11 static guint32 timer = 0; | |
12 static GtkWidget *mail = NULL; | |
13 | |
14 static gint check_mail() | |
15 { | |
16 static off_t oldsize = 0; | |
17 gchar *filename; | |
18 off_t newsize; | |
19 struct stat s; | |
20 gint ret = 0; | |
21 | |
22 filename = g_getenv("MAIL"); | |
23 if (!filename) | |
24 filename = g_strconcat("/var/spool/mail/", g_get_user_name(), NULL); | |
25 else | |
26 filename = g_strdup(filename); | |
27 | |
28 if (stat(filename, &s) < 0) { | |
29 g_free(filename); | |
30 return -1; | |
31 } | |
32 | |
33 newsize = s.st_size; | |
34 if (newsize) ret |= ANY_MAIL; | |
35 if (s.st_mtime > s.st_atime && newsize) ret |= UNREAD_MAIL; | |
36 if (newsize != oldsize && (ret & UNREAD_MAIL)) ret |= NEW_MAIL; | |
37 oldsize = newsize; | |
38 | |
39 g_free(filename); | |
40 | |
41 return ret; | |
42 } | |
43 | |
44 static void maildes() | |
45 { | |
46 mail = NULL; | |
47 } | |
48 | |
49 static gboolean check_timeout(gpointer data) | |
50 { | |
51 gint count = check_mail(); | |
52 char buf[256]; | |
53 | |
54 if (count == -1) | |
55 return FALSE; | |
56 | |
57 if (!blist) | |
58 return TRUE; | |
59 | |
60 if (!mail) { | |
61 /* guess we better build it then :P */ | |
62 GList *tmp = gtk_container_children(GTK_CONTAINER(blist)); | |
63 GtkWidget *vbox2 = (GtkWidget *)tmp->data; | |
64 | |
65 mail = gtk_label_new("No mail messages."); | |
66 gtk_box_pack_start(GTK_BOX(vbox2), mail, FALSE, FALSE, 0); | |
67 gtk_box_reorder_child(GTK_BOX(vbox2), mail, 1); | |
68 gtk_signal_connect(GTK_OBJECT(mail), "destroy", GTK_SIGNAL_FUNC(maildes), NULL); | |
69 gtk_widget_show(mail); | |
70 } | |
71 | |
72 if (count & NEW_MAIL) | |
73 play_sound(POUNCE_DEFAULT); | |
74 | |
75 if (count & UNREAD_MAIL) | |
76 gtk_label_set_text(GTK_LABEL(mail), "You have new mail!"); | |
77 else if (count & ANY_MAIL) | |
78 gtk_label_set_text(GTK_LABEL(mail), "You have mail."); | |
79 else | |
80 gtk_label_set_text(GTK_LABEL(mail), "No mail messages."); | |
81 | |
82 return TRUE; | |
83 } | |
84 | |
85 static void mail_signon(struct gaim_connection *gc) | |
86 { | |
87 if (blist && !timer) | |
88 timer = gtk_timeout_add(2000, check_timeout, NULL); | |
89 } | |
90 | |
91 static void mail_signoff(struct gaim_connection *gc) | |
92 { | |
2259
866bf3ced1bc
[gaim-migrate @ 2269]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1804
diff
changeset
|
93 if (!blist && timer) { |
1803 | 94 gtk_timeout_remove(timer); |
2259
866bf3ced1bc
[gaim-migrate @ 2269]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1804
diff
changeset
|
95 timer = 0; |
866bf3ced1bc
[gaim-migrate @ 2269]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1804
diff
changeset
|
96 } |
1803 | 97 } |
98 | |
99 char *gaim_plugin_init(GModule *m) | |
100 { | |
101 if (!check_timeout(NULL)) | |
102 return "Could not read $MAIL or /var/spool/mail/$USER"; | |
103 if (blist) | |
104 timer = gtk_timeout_add(2000, check_timeout, NULL); | |
105 gaim_signal_connect(m, event_signon, mail_signon, NULL); | |
106 gaim_signal_connect(m, event_signoff, mail_signoff, NULL); | |
107 return NULL; | |
108 } | |
109 | |
110 void gaim_plugin_remove() | |
111 { | |
112 if (timer) | |
113 gtk_timeout_remove(timer); | |
114 timer = 0; | |
115 if (mail) | |
116 gtk_widget_destroy(mail); | |
117 mail = NULL; | |
118 } | |
119 | |
120 char *name() | |
121 { | |
122 return "Mail Check"; | |
123 } | |
124 | |
125 char *description() | |
126 { | |
127 return "Checks for new local mail"; | |
128 } |