Mercurial > pidgin
annotate plugins/mailchk.c @ 2475:ba7ee4c1908c
[gaim-migrate @ 2488]
BMiller's fixes so gg compiles on solaris
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Wed, 10 Oct 2001 20:03:17 +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 } |
