Sat, 27 Sep 2003 05:11:11 +0000
[gaim-migrate @ 7535]
Two string corrections from KAMO Tomoyuki. Thanks dude
I fiddled with the prefs away message stuff...
Changed a function to static and renamed it to have a _cb at the end.
Added an away_message_click_cb() callback--double clicking on an
away message in the list brings up the edit away message window.
I want to add an "Activate" button, but I don't have time now, and
away.c needs to be core/ui split, I think, with the ability to
activate a chosen message.
The Second Annual Chips & Dip night was good. We watched The Unborn
2, which is supposed to be one of the worst movies ever. It rocked.
committer: Mark Doliner <markdoliner@pidgin.im>
| 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> | |
| 127 | 16 | #include <pthread.h> |
| 105 | 17 | #include "gaim.h" |
| 18 | ||
| 114 | 19 | char username[] = ""; |
| 20 | char password[] = ""; | |
| 21 | char mailhost[] = ""; | |
| 22 | int mailport = 110; | |
| 127 | 23 | int state = 0; |
| 114 | 24 | |
| 105 | 25 | static void *handle = NULL; |
| 124 | 26 | extern GtkWidget *buddies; |
| 114 | 27 | |
| 28 | int lastnum = 0; | |
| 29 | int orig = 0; | |
| 30 | int mytimer; | |
| 31 | ||
| 32 | void update_mail(); | |
| 127 | 33 | void check_mail(); |
| 114 | 34 | |
| 35 | int num_msgs() | |
| 36 | { | |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
37 | struct in_addr *sin; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
38 | char recv[1024]; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
39 | char command[256]; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
40 | int fd; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
41 | int num = 0; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
42 | int step = 0; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
43 | int len; |
| 114 | 44 | |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
45 | sin = (struct in_addr *)get_address(mailhost); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
46 | fd = connect_address(sin->s_addr, mailport); |
| 114 | 47 | while ((len = read(fd, recv, 1023))>0) { |
| 48 | recv[len] = 0; | |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
49 | if (!strncmp(recv, "-ERR", strlen("-ERR"))) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
50 | step = 4; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
51 | break; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
52 | } else if (!strncmp(recv, "+OK", strlen("+OK"))) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
53 | if (step == 3) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
54 | if (sscanf(recv, "+OK %d %d\n", &num, &step) != 2) |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
55 | break; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
56 | g_snprintf(command, sizeof(command), "QUIT\n"); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
57 | write(fd, command, strlen(command)); |
| 114 | 58 | close(fd); |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
59 | return num; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
60 | } |
| 114 | 61 | |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
62 | if (step == 0) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
63 | g_snprintf(command, sizeof(command), "USER %s\n", username); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
64 | write(fd, command, strlen(command)); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
65 | step = 1; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
66 | } else if (step == 1) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
67 | g_snprintf(command, sizeof(command), "PASS %s\n", password); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
68 | write(fd, command, strlen(command)); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
69 | step = 2; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
70 | } else if (step == 2) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
71 | g_snprintf(command, sizeof(command), "STAT\n"); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
72 | write(fd, command, strlen(command)); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
73 | step = 3; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
74 | } |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
75 | } |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
76 | } |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
77 | close(fd); |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
78 | |
| 114 | 79 | return 0; |
| 80 | } | |
| 105 | 81 | |
| 124 | 82 | void destroy_mail_list() |
| 83 | { | |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
84 | GList *list; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
85 | GtkWidget *w; |
| 124 | 86 | |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
87 | list = GTK_TREE(buddies)->children; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
88 | while (list) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
89 | w = (GtkWidget *)list->data; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
90 | if (!strcmp(GTK_LABEL(GTK_BIN(w)->child)->label, _("Mail Server"))) { |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
91 | gtk_tree_remove_items(GTK_TREE(buddies), list); |
|
126
3d72ea2f8625
[gaim-migrate @ 136]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
124
diff
changeset
|
92 | list = GTK_TREE(buddies)->children; |
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
93 | if (!list) |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
94 | break; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
95 | } |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
96 | list = list->next; |
|
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
97 | } |
| 124 | 98 | } |
| 99 | ||
| 100 | ||
| 101 | void setup_mail_list() | |
| 102 | { | |
| 103 | GList *list; | |
| 104 | GtkWidget *w; | |
| 105 | GtkWidget *item; | |
| 106 | GtkWidget *tree; | |
| 107 | gchar *buf; | |
| 108 | ||
| 109 | list = GTK_TREE(buddies)->children; | |
| 110 | ||
| 111 | while (list) { | |
| 112 | w = (GtkWidget *)list->data; | |
|
5116
8e5a5161a4d9
[gaim-migrate @ 5479]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4168
diff
changeset
|
113 | if (!strcmp(GTK_LABEL(GTK_BIN(w)->child)->label, _("Mail Server"))) { |
| 124 | 114 | gtk_tree_remove_items(GTK_TREE(buddies), list); |
|
126
3d72ea2f8625
[gaim-migrate @ 136]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
124
diff
changeset
|
115 | list = GTK_TREE(buddies)->children; |
| 124 | 116 | if (!list) |
| 117 | break; | |
| 118 | } | |
| 119 | list = list->next; | |
| 120 | } | |
| 121 | ||
|
5116
8e5a5161a4d9
[gaim-migrate @ 5479]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4168
diff
changeset
|
122 | item = gtk_tree_item_new_with_label(_("Mail Server")); |
| 124 | 123 | tree = gtk_tree_new(); |
| 124 | gtk_widget_show(item); | |
| 125 | gtk_widget_show(tree); | |
| 126 | gtk_tree_append(GTK_TREE(buddies), item); | |
| 127 | gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), tree); | |
| 128 | gtk_tree_item_expand(GTK_TREE_ITEM(item)); | |
| 129 | ||
| 130 | buf = g_malloc(BUF_LONG); | |
| 131 | ||
|
5116
8e5a5161a4d9
[gaim-migrate @ 5479]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4168
diff
changeset
|
132 | g_snprintf(buf, BUF_LONG, _("%s (%d new/%d total)"), mailhost, lastnum - orig, lastnum); |
| 124 | 133 | item = gtk_tree_item_new_with_label(buf); |
| 134 | g_free(buf); | |
| 135 | ||
| 136 | gtk_tree_append(GTK_TREE(tree), item); | |
| 137 | gtk_widget_show(item); | |
| 138 | } | |
| 139 | ||
| 105 | 140 | void gaim_plugin_init(void *h) { |
| 141 | handle = h; | |
| 142 | ||
| 114 | 143 | orig = num_msgs(); |
| 144 | lastnum = orig; | |
| 145 | ||
| 124 | 146 | gaim_signal_connect(handle, event_blist_update, setup_mail_list, NULL); |
| 147 | setup_mail_list(); | |
| 148 | ||
| 4168 | 149 | mytimer = g_timeout_add(30000, check_mail, NULL); |
| 127 | 150 | } |
| 151 | ||
| 152 | void check_mail() { | |
| 153 | pthread_t mail_thread; | |
| 154 | pthread_attr_t attr; | |
| 155 | ||
| 156 | if (state == 0) { | |
| 157 | state = 1; | |
| 158 | pthread_attr_init(&attr); | |
| 159 | pthread_create(&mail_thread, &attr, (void *)&update_mail, NULL); | |
| 160 | } | |
| 105 | 161 | } |
| 162 | ||
| 114 | 163 | void update_mail () { |
| 164 | int newnum; | |
| 165 | ||
| 4168 | 166 | g_source_remove(mytimer); |
| 114 | 167 | |
| 168 | newnum = num_msgs(); | |
| 169 | ||
|
6308
12d48b4e80db
[gaim-migrate @ 6807]
Mark Doliner <markdoliner@pidgin.im>
parents:
5116
diff
changeset
|
170 | if ((newnum >= lastnum) && (newnum > 0)) { |
| 127 | 171 | newnum = newnum - lastnum; |
| 114 | 172 | } else { |
| 124 | 173 | newnum = 0; |
| 114 | 174 | } |
| 175 | ||
| 176 | if (newnum < lastnum) { | |
| 127 | 177 | orig = lastnum; |
| 114 | 178 | } |
| 179 | ||
| 180 | lastnum = newnum; | |
| 4168 | 181 | mytimer = g_timeout_add(30000, check_mail, NULL); |
| 124 | 182 | setup_mail_list(); |
| 127 | 183 | state = 0; |
| 114 | 184 | } |
| 185 | ||
| 186 | ||
| 105 | 187 | void gaim_plugin_remove() { |
| 4168 | 188 | g_source_remove(mytimer); |
| 127 | 189 | while (state == 1) { } |
| 124 | 190 | destroy_mail_list(); |
| 105 | 191 | handle = NULL; |
| 192 | } | |
| 193 | ||
| 194 | char *name() { | |
|
5116
8e5a5161a4d9
[gaim-migrate @ 5479]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4168
diff
changeset
|
195 | return _("Check Mail"); |
| 105 | 196 | } |
| 197 | ||
| 198 | char *description() { | |
|
5116
8e5a5161a4d9
[gaim-migrate @ 5479]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
4168
diff
changeset
|
199 | return _("Check email every X seconds.\n"); |
| 105 | 200 | } |