changeset 151:c754e5ae442a

[gaim-migrate @ 161] Implemented "save state" - if you were away, and you get kicked off, it signs you back on, and sets you as being away with the away message you had been using. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sun, 23 Apr 2000 23:46:20 +0000
parents d4e99c17e399
children cb0d3ec5a4c8
files plugins/autorecon.c
diffstat 1 files changed, 26 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/autorecon.c	Sun Apr 23 23:30:50 2000 +0000
+++ b/plugins/autorecon.c	Sun Apr 23 23:46:20 2000 +0000
@@ -1,28 +1,13 @@
-/* TODO: save state
- * I'm not at my computer right now, so I'm not going to bother
- * writing it, but if someone wants to before I get back (hint,
- * hint), go for it. Here's how to do it.
- *
- * First, add a global "state", which is either 'away' or not.
- *
- * In gaim_plugin_init, set state, and add two more signal
- * handlers: event_away and event_back, and if you can't figure
- * out what you're supposed to do for them, you shouldn't be
- * editing this plugin.
- *
- * In the reconnect function, if "state" was away, then reset
- * the away message. You may have to remember the away message
- * on your own; I haven't checked yet to see if there's a global
- * that remembers it that isn't erased on signoff/signon.
- *
- * Anyway, that should be it.
- */
-
 #define GAIM_PLUGINS
 #include "gaim.h"
 #include <gtk/gtk.h>
 
+extern GtkWidget *imaway;
+
 static int recon;
+static int away_state;
+static int forced_off = 0;
+static struct away_message *last_away;
 
 char *name() {
 	return "Auto Reconnect";
@@ -36,16 +21,36 @@
 
 void do_signon() {
 	dologin(NULL, NULL);
-	if (query_state() != STATE_OFFLINE) {
+	if (blist) {
 		gtk_timeout_remove(recon);
+		forced_off = 0;
+		if (away_state)
+			do_away_message(NULL, last_away);
 		return;
 	}
 }
 
 void reconnect(void *m) {
 	recon = gtk_timeout_add(2000, (GtkFunction)do_signon, NULL);
+	forced_off = 1;
+}
+
+void away_toggle(void *m) {
+	if ((int)m == 1) {
+		last_away = awaymessage;
+		away_state = 1;
+	} else if (!forced_off)
+		away_state = 0;
 }
 
 void gaim_plugin_init(void *handle) {
+	if (imaway) {
+		away_state = 1;
+		last_away = awaymessage;
+	} else
+		away_state = 0;
+
+	gaim_signal_connect(handle, event_away, away_toggle, (void *)1);
+	gaim_signal_connect(handle, event_back, away_toggle, (void *)0);
 	gaim_signal_connect(handle, event_signoff, reconnect, NULL);
 }