Mercurial > pidgin
view plugins/autorecon.c @ 7297:ceda503e55a6
[gaim-migrate @ 7881]
This is AIM Alerts and Reminders (alerts.aol.com). I think this is kinda
a cool thing. And it was totally easy to do. Unfortunately, though, it seems
that AOL won't give your browser the alert unless you send an X-Aim header
in your HTML request. I could parse the HTML myself, but it has, like forms
and stuff in it... and some alerts have images... it wouldn't be worth it.
So this just prints stuff to the debug window. Maybe someday someone will
be able to do something with it.
Mark's going to make sure I didn't screw anything up.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 18 Oct 2003 03:34:14 +0000 |
parents | cc1d09631513 |
children | 4ce6952d7908 |
line wrap: on
line source
#include "internal.h" #include "connection.h" #include "debug.h" #include "prpl.h" #include "signals.h" #define AUTORECON_PLUGIN_ID "core-autorecon" #define INITIAL 8000 #define MAXTIME 2048000 typedef struct { int delay; guint timeout; } GaimAutoRecon; static GHashTable *hash = NULL; static gboolean do_signon(gpointer data) { GaimAccount *account = data; GaimAutoRecon *info; gaim_debug(GAIM_DEBUG_INFO, "autorecon", "do_signon called\n"); g_return_val_if_fail(account != NULL, FALSE); info = g_hash_table_lookup(hash, account); if (g_list_index(gaim_accounts_get_all(), account) < 0) return FALSE; gaim_debug(GAIM_DEBUG_INFO, "autorecon", "calling gaim_account_connect\n"); gaim_account_connect(account); gaim_debug(GAIM_DEBUG_INFO, "autorecon", "done calling gaim_account_connect\n"); if(info) info->timeout = 0; return FALSE; } static void reconnect(GaimConnection *gc, void *m) { GaimAccount *account; GaimAutoRecon *info; g_return_if_fail(gc != NULL); account = gaim_connection_get_account(gc); info = g_hash_table_lookup(hash, account); if (!gc->wants_to_die) { if (info == NULL) { info = g_new0(GaimAutoRecon, 1); g_hash_table_insert(hash, account, info); info->delay = INITIAL; } else info->delay = MIN(2 * info->delay, MAXTIME); info->timeout = g_timeout_add(info->delay, do_signon, account); } else if (info != NULL) { g_hash_table_remove(hash, account); g_free(info); } } static void free_auto_recon(gpointer data) { GaimAutoRecon *info = data; if (info->timeout != 0) g_source_remove(info->timeout); g_free(info); } static gboolean plugin_load(GaimPlugin *plugin) { hash = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, free_auto_recon); gaim_signal_connect(gaim_connections_get_handle(), "signed-off", plugin, GAIM_CALLBACK(reconnect), NULL); return TRUE; } static gboolean plugin_unload(GaimPlugin *plugin) { g_hash_table_destroy(hash); hash = NULL; return TRUE; } static GaimPluginInfo info = { 2, /**< api_version */ GAIM_PLUGIN_STANDARD, /**< type */ NULL, /**< ui_requirement */ 0, /**< flags */ NULL, /**< dependencies */ GAIM_PRIORITY_DEFAULT, /**< priority */ AUTORECON_PLUGIN_ID, /**< id */ N_("Auto-Reconnect"), /**< name */ VERSION, /**< version */ /** summary */ N_("When you are kicked offline, this reconnects you."), /** description */ N_("When you are kicked offline, this reconnects you."), "Eric Warmenhoven <eric@warmenhoven.org>", /**< author */ GAIM_WEBSITE, /**< homepage */ plugin_load, /**< load */ plugin_unload, /**< unload */ NULL, /**< destroy */ NULL, /**< ui_info */ NULL /**< extra_info */ }; static void init_plugin(GaimPlugin *plugin) { } GAIM_INIT_PLUGIN(autorecon, init_plugin, info)