Mercurial > pidgin
changeset 19436:a62c9b9c4596
Add msim_uri_handler() to handle myim: URLs, sendIM and addContact commands.
Not tested.
author | Jeffrey Connelly <jaconnel@calpoly.edu> |
---|---|
date | Sun, 26 Aug 2007 08:20:49 +0000 |
parents | bddc6a6fddf0 |
children | a8c9c42c3572 |
files | libpurple/protocols/myspace/myspace.c libpurple/protocols/myspace/myspace.h |
diffstat | 2 files changed, 72 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/myspace/myspace.c Sun Aug 26 07:37:28 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Sun Aug 26 08:20:49 2007 +0000 @@ -1440,6 +1440,9 @@ * some of the time, but can vary. This is our own user ID. */ session->userid = msim_msg_get_integer(msg, "userid"); + /* Save uid to account so this account can be looked up by uid. */ + purple_account_set_int(session->account, "uid", session->userid); + /* Not sure what profileid is used for. */ if (msim_msg_get_integer(msg, "profileid") != session->userid) { msim_unrecognized(session, msg, @@ -1517,6 +1520,7 @@ (GSourceFunc)msim_check_alive, session); #endif + /* TODO: if (purple_account_get_check_mail(session->account)) */ purple_timeout_add(MSIM_MAIL_INTERVAL_CHECK, (GSourceFunc)msim_check_inbox, session); @@ -2979,16 +2983,74 @@ } #endif +static gboolean +msim_uri_handler(const gchar *proto, const gchar *cmd, GHashTable *params) +{ + PurpleAccount *account; + GList *l; + gchar *uid_str, *cid_str; + guint uid, cid; + + if (g_ascii_strcasecmp(proto, "myim")) + return FALSE; + + uid_str = g_hash_table_lookup(params, "uID"); + cid_str = g_hash_table_lookup(params, "cID"); + + uid = uid_str ? atol(uid_str) : 0; + cid = cid_str ? atol(cid_str) : 0; + + /* Find our account with specified user id, or use first connected account if uid=0. */ + account = NULL; + l = purple_accounts_get_all(); + while (l) { + if (purple_account_is_connected(l->data) && + (uid == 0 || purple_account_get_int(l->data, "uid", 0) == uid)) { + account = l->data; + break; + } + l = l->next; + } + + if (!account) { + purple_notify_error(NULL, _("myim URL handler"), + _("No suitable MySpaceIM account could be found to open this myim URL."), + _("Enable the proper MySpaceIM account and try again.")); + return FALSE; + } + + /* myim:sendIM?uID=USERID&cID=CONTACTID */ + if (!g_ascii_strcasecmp(cmd, "sendIM")) { + PurpleConversation *conv; + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, cid_str, account); + if (!conv) + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, cid_str); + purple_conversation_present(conv); + + /* TODO: where to get the message? or is there any? */ + purple_conv_send_confirm(conv, "test"); + + /* myim:addContact?uID=USERID&cID=CONTACTID */ + } else if (!g_ascii_strcasecmp(cmd, "addContact")) { + purple_blist_request_add_buddy(account, cid_str, _("Buddies"), NULL); + } + + return FALSE; +} + /** Initialize plugin. */ void init_plugin(PurplePlugin *plugin) { - PurpleAccountOption *option; #ifdef MSIM_SELF_TEST msim_test_all(); exit(0); #endif /* MSIM_SELF_TEST */ + PurpleAccountOption *option; + static gboolean initialized = FALSE; + /* TODO: default to automatically try different ports. Make the user be * able to set the first port to try (like LastConnectedPort in Windows client). */ @@ -3019,6 +3081,14 @@ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); #endif + /* Code below only runs once. Based on oscar.c's oscar_init(). */ + if (initialized) + return; + + initialized = TRUE; + + purple_signal_connect(purple_get_core(), "uri-handler", &initialized, + PURPLE_CALLBACK(msim_uri_handler), NULL); } PURPLE_INIT_PLUGIN(myspace, init_plugin, info);
--- a/libpurple/protocols/myspace/myspace.h Sun Aug 26 07:37:28 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.h Sun Aug 26 08:20:49 2007 +0000 @@ -46,6 +46,7 @@ #include "util.h" /* for base64 */ #include "debug.h" /* for purple_debug_info */ #include "xmlnode.h" +#include "core.h" /* MySpaceIM includes */ #include "persist.h"