Mercurial > pidgin
comparison plugins/autorecon.c @ 1817:b367beee6448
[gaim-migrate @ 1827]
reworked autorecon.c.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Sun, 06 May 2001 10:08:40 +0000 |
parents | 96e93119268d |
children | 84782d1cb051 |
comparison
equal
deleted
inserted
replaced
1816:aa2bb1bfbd4b | 1817:b367beee6448 |
---|---|
1 #define GAIM_PLUGINS | 1 #define GAIM_PLUGINS |
2 #include "gaim.h" | 2 #include "gaim.h" |
3 #include "prpl.h" | 3 #include "prpl.h" |
4 #include <gtk/gtk.h> | 4 #include <gtk/gtk.h> |
5 | |
6 extern GtkWidget *imaway; | |
7 | |
8 static int away_state; | |
9 static int forced_off = 0; | |
10 static char *last_away = NULL; | |
11 GSList *reconnects = NULL; | |
12 GSList *recontim = NULL; | |
13 | 5 |
14 char *name() { | 6 char *name() { |
15 return "Auto Reconnect"; | 7 return "Auto Reconnect"; |
16 } | 8 } |
17 | 9 |
18 char *description() { | 10 char *description() { |
19 return "When AOL kicks you off, this auto-reconnects you."; | 11 return "When you are kicked offline, this reconnects you."; |
20 } | 12 } |
21 | 13 |
22 static void now_online(struct gaim_connection *gc, void *m) { | 14 static gboolean do_signon(struct aim_user *u) { |
23 gint place; | 15 if (!g_list_index(aim_users, u)) |
24 guint recon; | 16 return FALSE; |
25 if (!g_slist_find(reconnects, gc->user)) | |
26 return; | |
27 place = g_slist_index(reconnects, gc->user); | |
28 recon = (guint)g_slist_nth(recontim, place); | |
29 reconnects = g_slist_remove(reconnects, gc->user); | |
30 recontim = g_slist_remove(recontim, (void *)recon); | |
31 if (away_state) serv_set_away(gc, GAIM_AWAY_CUSTOM, last_away); | |
32 } | |
33 | |
34 static void do_signon(struct aim_user *u) { | |
35 gint place; | |
36 guint recon; | |
37 place = g_slist_index(reconnects, u); | |
38 recon = (guint)g_slist_nth(recontim, place); | |
39 gtk_timeout_remove(recon); | |
40 forced_off = 0; | |
41 serv_login(u); | 17 serv_login(u); |
18 return FALSE; | |
42 } | 19 } |
43 | 20 |
44 static void reconnect(struct gaim_connection *gc, void *m) { | 21 static void reconnect(struct gaim_connection *gc, void *m) { |
45 guint recon; | 22 if (gc->wants_to_die) |
46 if (g_slist_find(reconnects, gc->user)) | 23 gtk_timeout_add(8000, (GtkFunction)do_signon, gc->user); |
47 return; | |
48 recon = gtk_timeout_add(8000, (GtkFunction)do_signon, gc->user); | |
49 reconnects = g_slist_append(reconnects, gc->user); | |
50 recontim = g_slist_append(recontim, (void *)recon); | |
51 forced_off = 1; | |
52 } | |
53 | |
54 static void away_toggle(struct gaim_connection *gc, char *state, char *message, gpointer data) { | |
55 if (gc->away) { | |
56 if (last_away) | |
57 g_free(last_away); | |
58 last_away = g_strdup(gc->away); | |
59 away_state = 1; | |
60 } else if (!forced_off) | |
61 away_state = 0; | |
62 } | 24 } |
63 | 25 |
64 char *gaim_plugin_init(GModule *handle) { | 26 char *gaim_plugin_init(GModule *handle) { |
65 if (awaymessage) { | |
66 away_state = 1; | |
67 last_away = g_strdup(awaymessage->message); | |
68 } else | |
69 away_state = 0; | |
70 | |
71 gaim_signal_connect(handle, event_away, away_toggle, NULL); | |
72 gaim_signal_connect(handle, event_signoff, reconnect, NULL); | 27 gaim_signal_connect(handle, event_signoff, reconnect, NULL); |
73 gaim_signal_connect(handle, event_signon, now_online, NULL); | |
74 | 28 |
75 return NULL; | 29 return NULL; |
76 } | 30 } |
77 | |
78 void gaim_plugin_remove() { | |
79 g_free(last_away); | |
80 } |