Mercurial > pidgin
annotate plugins/mailchk.c @ 3484:5d1dff030d8b
[gaim-migrate @ 3538]
Another nice patch from Etan Reisner.
committer: Tailor Script <tailor@pidgin.im>
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Sat, 31 Aug 2002 02:40:51 +0000 |
| parents | 4f2f12bf4408 |
| children | cd938f18f3f8 |
| 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 | |
| 53 if (count == -1) | |
| 54 return FALSE; | |
| 55 | |
| 56 if (!blist) | |
| 57 return TRUE; | |
| 58 | |
| 59 if (!mail) { | |
| 60 /* guess we better build it then :P */ | |
| 61 GList *tmp = gtk_container_children(GTK_CONTAINER(blist)); | |
| 62 GtkWidget *vbox2 = (GtkWidget *)tmp->data; | |
| 63 | |
| 64 mail = gtk_label_new("No mail messages."); | |
| 65 gtk_box_pack_start(GTK_BOX(vbox2), mail, FALSE, FALSE, 0); | |
| 66 gtk_box_reorder_child(GTK_BOX(vbox2), mail, 1); | |
| 67 gtk_signal_connect(GTK_OBJECT(mail), "destroy", GTK_SIGNAL_FUNC(maildes), NULL); | |
| 68 gtk_widget_show(mail); | |
| 69 } | |
| 70 | |
| 71 if (count & NEW_MAIL) | |
| 3060 | 72 play_sound(SND_POUNCE_DEFAULT); |
| 1803 | 73 |
| 74 if (count & UNREAD_MAIL) | |
| 75 gtk_label_set_text(GTK_LABEL(mail), "You have new mail!"); | |
| 76 else if (count & ANY_MAIL) | |
| 77 gtk_label_set_text(GTK_LABEL(mail), "You have mail."); | |
| 78 else | |
| 79 gtk_label_set_text(GTK_LABEL(mail), "No mail messages."); | |
| 80 | |
| 81 return TRUE; | |
| 82 } | |
| 83 | |
| 84 static void mail_signon(struct gaim_connection *gc) | |
| 85 { | |
| 86 if (blist && !timer) | |
| 87 timer = gtk_timeout_add(2000, check_timeout, NULL); | |
| 88 } | |
| 89 | |
| 90 static void mail_signoff(struct gaim_connection *gc) | |
| 91 { | |
|
2259
866bf3ced1bc
[gaim-migrate @ 2269]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1804
diff
changeset
|
92 if (!blist && timer) { |
| 1803 | 93 gtk_timeout_remove(timer); |
|
2259
866bf3ced1bc
[gaim-migrate @ 2269]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1804
diff
changeset
|
94 timer = 0; |
|
866bf3ced1bc
[gaim-migrate @ 2269]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1804
diff
changeset
|
95 } |
| 1803 | 96 } |
| 97 | |
| 98 char *gaim_plugin_init(GModule *m) | |
| 99 { | |
| 100 if (!check_timeout(NULL)) | |
| 101 return "Could not read $MAIL or /var/spool/mail/$USER"; | |
| 102 if (blist) | |
| 103 timer = gtk_timeout_add(2000, check_timeout, NULL); | |
| 104 gaim_signal_connect(m, event_signon, mail_signon, NULL); | |
| 105 gaim_signal_connect(m, event_signoff, mail_signoff, NULL); | |
| 106 return NULL; | |
| 107 } | |
| 108 | |
| 109 void gaim_plugin_remove() | |
| 110 { | |
| 111 if (timer) | |
| 112 gtk_timeout_remove(timer); | |
| 113 timer = 0; | |
| 114 if (mail) | |
| 115 gtk_widget_destroy(mail); | |
| 116 mail = NULL; | |
| 117 } | |
| 118 | |
| 119 char *name() | |
| 120 { | |
| 121 return "Mail Check"; | |
| 122 } | |
| 123 | |
| 124 char *description() | |
| 125 { | |
| 126 return "Checks for new local mail"; | |
| 127 } |
