Sat, 16 Mar 2002 00:32:53 +0000
[gaim-migrate @ 3074]
Code cleanups by Robert McQueen. Michael Golden replaced the multiple per-account signon windows with a single signon window showing the status of all your accounts
committer: Sean Egan <seanegan@pidgin.im>
| 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
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
2504
diff
changeset
|
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 | 92 | if (!blist && timer) { |
| 1803 | 93 | gtk_timeout_remove(timer); |
| 2259 | 94 | timer = 0; |
| 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 | } |