Mercurial > pidgin
changeset 26696:3c35dcebefe7
merge of '6bcd7cfc161122f058f5093da0fab2dceeec0cfa'
and 'c4834891814ba35fcff3ba313f7afa8eebd4f050'
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 26 Apr 2009 17:01:05 +0000 |
parents | 83e6e710cbf3 (diff) 275f43e080fd (current diff) |
children | bbf174c5d331 09e9b7e50df9 02624b4a7552 5987aeb4b0a3 4548c114e953 |
files | |
diffstat | 18 files changed, 136 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Sun Apr 26 10:13:27 2009 +0000 +++ b/ChangeLog Sun Apr 26 17:01:05 2009 +0000 @@ -26,6 +26,8 @@ * Fix crash on connection with recent gstreamer0.10-plugins-bad. * Don't create a new conversation window for incoming messages of type 'headline'. + * The Ad-Hoc commands associated with our server are now always shown at + login. IRC: * Correctly handle WHOIS for users who are joined to a large number of
--- a/ChangeLog.API Sun Apr 26 10:13:27 2009 +0000 +++ b/ChangeLog.API Sun Apr 26 17:01:05 2009 +0000 @@ -9,6 +9,7 @@ * PURPLE_CONTACT * PURPLE_BUDDY * PURPLE_CHAT + * account-actions-changed (see account-signals.dox) * purple_buddy_destroy * purple_buddy_get_protocol_data * purple_buddy_set_protocol_data @@ -32,6 +33,7 @@ * purple_network_get_stun_ip * purple_network_get_turn_ip * purple_prpl_get_media_caps + * purple_prpl_got_account_actions * purple_prpl_initiate_media * purple_request_field_get_group * purple_request_field_get_ui_data
--- a/doc/account-signals.dox Sun Apr 26 10:13:27 2009 +0000 +++ b/doc/account-signals.dox Sun Apr 26 17:01:05 2009 +0000 @@ -9,6 +9,7 @@ @signal account-setting-info @signal account-set-info @signal account-status-changed + @signal account-actions-changed @signal account-alias-changed @signal account-authorization-requested @signal account-authorization-denied @@ -97,6 +98,15 @@ @param new The status after change. @endsignaldef + @signaldef account-actions-changed + @signalproto +void (*account_actions_changed)(PurpleAccount *account); + @endsignalproto + @signaldesc + Emitted when the account actions are changed after initial connection. + @param account The account whose actions changed. + @endsignaldef + @signaldef account-alias-changed @signalproto void (*account_alias_changed)(PurpleAccount *account, const char *old);
--- a/finch/gntblist.c Sun Apr 26 10:13:27 2009 +0000 +++ b/finch/gntblist.c Sun Apr 26 17:01:05 2009 +0000 @@ -3123,6 +3123,8 @@ PURPLE_CALLBACK(reconstruct_accounts_menu), NULL); purple_signal_connect(purple_connections_get_handle(), "signed-off", finch_blist_get_handle(), PURPLE_CALLBACK(reconstruct_accounts_menu), NULL); + purple_signal_connect(purple_accounts_get_handle(), "account-actions-changed", finch_blist_get_handle(), + PURPLE_CALLBACK(reconstruct_accounts_menu), NULL); purple_signal_connect(purple_blist_get_handle(), "buddy-status-changed", finch_blist_get_handle(), PURPLE_CALLBACK(buddy_status_changed), ggblist); purple_signal_connect(purple_blist_get_handle(), "buddy-idle-changed", finch_blist_get_handle(),
--- a/libpurple/account.c Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/account.c Sun Apr 26 17:01:05 2009 +0000 @@ -2742,6 +2742,10 @@ purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_STATUS)); + purple_signal_register(handle, "account-actions-changed", + purple_marshal_VOID__POINTER, NULL, 1, + purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_ACCOUNT)); + purple_signal_register(handle, "account-alias-changed", purple_marshal_VOID__POINTER_POINTER, NULL, 2, purple_value_new(PURPLE_TYPE_SUBTYPE,
--- a/libpurple/protocols/jabber/adhoccommands.c Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/protocols/jabber/adhoccommands.c Sun Apr 26 17:01:05 2009 +0000 @@ -39,30 +39,18 @@ GList *actionslist; } JabberAdHocActionInfo; -void jabber_adhoc_disco_result_cb(JabberStream *js, const char *from, - JabberIqType type, const char *id, - xmlnode *packet, gpointer data) +static void +jabber_adhoc_got_buddy_list(JabberStream *js, const char *from, xmlnode *query) { - const char *node; - xmlnode *query, *item; - JabberID *jabberid; + JabberID *jid; JabberBuddy *jb; JabberBuddyResource *jbr = NULL; - - if (type == JABBER_IQ_ERROR) - return; + xmlnode *item; - query = xmlnode_get_child_with_namespace(packet,"query","http://jabber.org/protocol/disco#items"); - if(!query) - return; - node = xmlnode_get_attrib(query,"node"); - if(!node || strcmp(node, "http://jabber.org/protocol/commands")) - return; - - if((jabberid = jabber_id_new(from))) { - if(jabberid->resource && (jb = jabber_buddy_find(js, from, TRUE))) - jbr = jabber_buddy_find_resource(jb, jabberid->resource); - jabber_id_free(jabberid); + if ((jid = jabber_id_new(from))) { + if (jid->resource && (jb = jabber_buddy_find(js, from, TRUE))) + jbr = jabber_buddy_find_resource(jb, jid->resource); + jabber_id_free(jid); } if(!jbr) @@ -96,11 +84,31 @@ } } +void +jabber_adhoc_disco_result_cb(JabberStream *js, const char *from, + JabberIqType type, const char *id, + xmlnode *packet, gpointer data) +{ + xmlnode *query; + const char *node; + + if (type == JABBER_IQ_ERROR) + return; + + query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items"); + if (!query) + return; + node = xmlnode_get_attrib(query, "node"); + if (!purple_strequal(node, "http://jabber.org/protocol/commands")) + return; + + jabber_adhoc_got_buddy_list(js, from, query); +} + static void jabber_adhoc_parse(JabberStream *js, const char *from, JabberIqType type, const char *id, xmlnode *packet, gpointer data); - static void do_adhoc_action_cb(JabberStream *js, xmlnode *result, const char *actionhandle, gpointer user_data) { xmlnode *command; GList *action; @@ -224,11 +232,8 @@ } static void -jabber_adhoc_server_got_list_cb(JabberStream *js, const char *from, - JabberIqType type, const char *id, - xmlnode *packet, gpointer data) +jabber_adhoc_got_server_list(JabberStream *js, const char *from, xmlnode *query) { - xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items"); xmlnode *item; if(!query) @@ -258,6 +263,29 @@ js->commands = g_list_append(js->commands,cmd); } + + if (js->state == JABBER_STREAM_CONNECTED) + purple_prpl_got_account_actions(purple_connection_get_account(js->gc)); +} + +static void +jabber_adhoc_server_got_list_cb(JabberStream *js, const char *from, + JabberIqType type, const char *id, + xmlnode *packet, gpointer data) +{ + xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", "http://jabber.org/protocol/disco#items"); + + jabber_adhoc_got_server_list(js, from, query); + +} + +void jabber_adhoc_got_list(JabberStream *js, const char *from, xmlnode *query) +{ + if (purple_strequal(from, js->user->domain)) { + jabber_adhoc_got_server_list(js, from, query); + } else { + jabber_adhoc_got_buddy_list(js, from, query); + } } void jabber_adhoc_server_get_list(JabberStream *js) {
--- a/libpurple/protocols/jabber/adhoccommands.h Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/protocols/jabber/adhoccommands.h Sun Apr 26 17:01:05 2009 +0000 @@ -34,6 +34,8 @@ void jabber_adhoc_execute_action(PurpleBlistNode *node, gpointer data); +void jabber_adhoc_got_list(JabberStream *js, const char *from, xmlnode *query); + void jabber_adhoc_server_get_list(JabberStream *js); void jabber_adhoc_init_server_commands(JabberStream *js, GList **m);
--- a/libpurple/protocols/jabber/buddy.c Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.c Sun Apr 26 17:01:05 2009 +0000 @@ -202,21 +202,6 @@ jabber_buddy_resource_free(jbr); } -const char *jabber_buddy_get_status_msg(JabberBuddy *jb) -{ - JabberBuddyResource *jbr; - - if(!jb) - return NULL; - - jbr = jabber_buddy_find_resource(jb, NULL); - - if(!jbr) - return NULL; - - return jbr->status; -} - /******* * This is the old vCard stuff taken from the old prpl. vCards, by definition * are a temporary thing until jabber can get its act together and come up
--- a/libpurple/protocols/jabber/buddy.h Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.h Sun Apr 26 17:01:05 2009 +0000 @@ -96,7 +96,6 @@ int priority, JabberBuddyState state, const char *status); void jabber_buddy_resource_free(JabberBuddyResource *jbr); void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource); -const char *jabber_buddy_get_status_msg(JabberBuddy *jb); void jabber_buddy_get_info(PurpleConnection *gc, const char *who); GList *jabber_blist_node_menu(PurpleBlistNode *node);
--- a/libpurple/protocols/jabber/jabber.c Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Sun Apr 26 17:01:05 2009 +0000 @@ -1701,10 +1701,11 @@ } else if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && jb->error_msg) { ret = g_strdup(jb->error_msg); } else { + PurplePresence *presence = purple_buddy_get_presence(b); + PurpleStatus *status =purple_presence_get_active_status(presence); char *stripped; - if(!(stripped = purple_markup_strip_html(jabber_buddy_get_status_msg(jb)))) { - PurplePresence *presence = purple_buddy_get_presence(b); + if(!(stripped = purple_markup_strip_html(purple_status_get_attr_string(status, "message")))) { if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_TUNE)) { PurpleStatus *status = purple_presence_get_status(presence, "tune"); stripped = g_strdup(purple_status_get_attr_string(status, PURPLE_TUNE_TITLE));
--- a/libpurple/protocols/jabber/message.c Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/protocols/jabber/message.c Sun Apr 26 17:01:05 2009 +0000 @@ -24,6 +24,7 @@ #include "notify.h" #include "server.h" #include "util.h" +#include "adhoccommands.h" #include "buddy.h" #include "chat.h" #include "data.h" @@ -780,6 +781,12 @@ } else { jm->etc = g_list_append(jm->etc, child); } + } else if (g_str_equal(child->name, "query")) { + const char *node = xmlnode_get_attrib(child, "node"); + if (purple_strequal(xmlns, "http://jabber.org/protocol/disco#items") + && purple_strequal(node, "http://jabber.org/protocol/commands")) { + jabber_adhoc_got_list(js, jm->from, child); + } } }
--- a/libpurple/prpl.c Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/prpl.c Sun Apr 26 17:01:05 2009 +0000 @@ -182,6 +182,17 @@ } void +purple_prpl_got_account_actions(PurpleAccount *account) +{ + + g_return_if_fail(account != NULL); + g_return_if_fail(purple_account_is_connected(account)); + + purple_signal_emit(purple_accounts_get_handle(), "account-actions-changed", + account); +} + +void purple_prpl_got_user_idle(PurpleAccount *account, const char *name, gboolean idle, time_t idle_time) {
--- a/libpurple/prpl.h Sun Apr 26 10:13:27 2009 +0000 +++ b/libpurple/prpl.h Sun Apr 26 17:01:05 2009 +0000 @@ -661,6 +661,20 @@ const char *status_id, ...) G_GNUC_NULL_TERMINATED; /** + * Notifies Purple that our account's actions have changed. This is only + * called after the initial connection. Emits the account-actions-changed + * signal. + * + * This is meant to be called from protocol plugins. + * + * @param account The account. + * + * @see account-actions-changed + * @since 2.6.0 + */ +void purple_prpl_got_account_actions(PurpleAccount *account); + +/** * Notifies Purple that a buddy's idle state and time have changed. * * This is meant to be called from protocol plugins.
--- a/pidgin/gtkblist-theme-loader.c Sun Apr 26 10:13:27 2009 +0000 +++ b/pidgin/gtkblist-theme-loader.c Sun Apr 26 17:01:05 2009 +0000 @@ -81,6 +81,17 @@ {NULL, NULL} }; + expanded = NULL; + collapsed = NULL; + contact = NULL; + online = NULL; + away = NULL; + offline = NULL; + idle = NULL; + message = NULL; + message_nick_said = NULL; + status = NULL; + /* Find the theme file */ g_return_val_if_fail(dir != NULL, NULL); filename_full = g_build_filename(dir, "theme.xml", NULL); @@ -184,6 +195,10 @@ pidgin_theme_font_free(*lookups[i].font); } } + + pidgin_theme_font_free(expanded); + pidgin_theme_font_free(collapsed); + xmlnode_free(root_node); g_free(data);
--- a/pidgin/gtkblist.c Sun Apr 26 10:13:27 2009 +0000 +++ b/pidgin/gtkblist.c Sun Apr 26 17:01:05 2009 +0000 @@ -4652,6 +4652,12 @@ } static void +account_actions_changed(PurpleAccount *account, gpointer data) +{ + pidgin_blist_update_accounts_menu(); +} + +static void account_status_changed(PurpleAccount *account, PurpleStatus *old, PurpleStatus *new, PidginBuddyList *gtkblist) { @@ -5837,6 +5843,8 @@ purple_signal_connect(handle, "account-error-changed", gtkblist, PURPLE_CALLBACK(update_account_error_state), gtkblist); + purple_signal_connect(handle, "account-actions-changed", gtkblist, + PURPLE_CALLBACK(account_actions_changed), NULL); handle = pidgin_account_get_handle(); purple_signal_connect(handle, "account-modified", gtkblist,
--- a/pidgin/plugins/themeedit-icon.c Sun Apr 26 10:13:27 2009 +0000 +++ b/pidgin/plugins/themeedit-icon.c Sun Apr 26 17:01:05 2009 +0000 @@ -242,7 +242,7 @@ return TRUE; } -void pidgin_icon_theme_edit(void) +void pidgin_icon_theme_edit(PurplePluginAction *unused) { GtkWidget *dialog; GtkWidget *box, *vbox;