| 82 |
82 |
| 83 G_DEFINE_DYNAMIC_TYPE(PidginXmppConsole, pidgin_xmpp_console, GTK_TYPE_WINDOW) |
83 G_DEFINE_DYNAMIC_TYPE(PidginXmppConsole, pidgin_xmpp_console, GTK_TYPE_WINDOW) |
| 84 |
84 |
| 85 static PidginXmppConsole *console = NULL; |
85 static PidginXmppConsole *console = NULL; |
| 86 |
86 |
| 87 static const gchar *xmpp_prpls[] = { |
|
| 88 "prpl-jabber", "prpl-gtalk", NULL |
|
| 89 }; |
|
| 90 |
|
| 91 /****************************************************************************** |
87 /****************************************************************************** |
| 92 * Helpers |
88 * Helpers |
| 93 *****************************************************************************/ |
89 *****************************************************************************/ |
| 94 static gboolean |
90 static gboolean |
| 95 xmppconsole_is_xmpp_account(PurpleAccount *account) |
91 xmppconsole_is_xmpp_account(PurpleAccount *account) |
| 96 { |
92 { |
| 97 const gchar *prpl_name; |
93 const gchar *prpl_name; |
| 98 int i; |
|
| 99 |
94 |
| 100 prpl_name = purple_account_get_protocol_id(account); |
95 prpl_name = purple_account_get_protocol_id(account); |
| 101 |
96 |
| 102 i = 0; |
97 return purple_strequal("prpl-jabber", prpl_name); |
| 103 while (xmpp_prpls[i] != NULL) { |
|
| 104 if (purple_strequal(xmpp_prpls[i], prpl_name)) |
|
| 105 return TRUE; |
|
| 106 i++; |
|
| 107 } |
|
| 108 |
|
| 109 return FALSE; |
|
| 110 } |
98 } |
| 111 |
99 |
| 112 static void |
100 static void |
| 113 xmppconsole_append_xmlnode(PidginXmppConsole *console, PurpleXmlNode *node, |
101 xmppconsole_append_xmlnode(PidginXmppConsole *console, PurpleXmlNode *node, |
| 114 gint indent_level, GtkTextIter *iter, |
102 gint indent_level, GtkTextIter *iter, |
| 759 } |
747 } |
| 760 |
748 |
| 761 static gboolean |
749 static gboolean |
| 762 xmpp_console_load(GPluginPlugin *plugin, GError **error) |
750 xmpp_console_load(GPluginPlugin *plugin, GError **error) |
| 763 { |
751 { |
| 764 int i; |
752 PurpleProtocolManager *manager = NULL; |
| 765 gboolean any_registered = FALSE; |
753 PurpleProtocol *xmpp = NULL; |
| 766 |
754 |
| 767 pidgin_xmpp_console_register_type(G_TYPE_MODULE(plugin)); |
755 pidgin_xmpp_console_register_type(G_TYPE_MODULE(plugin)); |
| 768 |
756 |
| 769 i = 0; |
757 manager = purple_protocol_manager_get_default(); |
| 770 while (xmpp_prpls[i] != NULL) { |
758 xmpp = purple_protocol_manager_find(manager, "prpl-jabber"); |
| 771 PurpleProtocol *xmpp; |
759 if (!PURPLE_IS_PROTOCOL(xmpp)) { |
| 772 PurpleProtocolManager *manager; |
|
| 773 |
|
| 774 manager = purple_protocol_manager_get_default(); |
|
| 775 xmpp = purple_protocol_manager_find(manager, xmpp_prpls[i]); |
|
| 776 i++; |
|
| 777 |
|
| 778 if (!xmpp) |
|
| 779 continue; |
|
| 780 any_registered = TRUE; |
|
| 781 |
|
| 782 purple_signal_connect(xmpp, "jabber-receiving-xmlnode", plugin, |
|
| 783 G_CALLBACK(purple_xmlnode_received_cb), NULL); |
|
| 784 purple_signal_connect(xmpp, "jabber-sending-text", plugin, |
|
| 785 G_CALLBACK(purple_xmlnode_sent_cb), NULL); |
|
| 786 } |
|
| 787 |
|
| 788 if (!any_registered) { |
|
| 789 g_set_error_literal(error, PLUGIN_DOMAIN, 0, |
760 g_set_error_literal(error, PLUGIN_DOMAIN, 0, |
| 790 _("No XMPP protocol is loaded.")); |
761 _("No XMPP protocol is loaded.")); |
| 791 return FALSE; |
762 return FALSE; |
| 792 } |
763 } |
| |
764 |
| |
765 purple_signal_connect(xmpp, "jabber-receiving-xmlnode", plugin, |
| |
766 G_CALLBACK(purple_xmlnode_received_cb), NULL); |
| |
767 purple_signal_connect(xmpp, "jabber-sending-text", plugin, |
| |
768 G_CALLBACK(purple_xmlnode_sent_cb), NULL); |
| 793 |
769 |
| 794 purple_signal_connect(purple_connections_get_handle(), "signing-on", |
770 purple_signal_connect(purple_connections_get_handle(), "signing-on", |
| 795 plugin, G_CALLBACK(signing_on_cb), NULL); |
771 plugin, G_CALLBACK(signing_on_cb), NULL); |
| 796 purple_signal_connect(purple_connections_get_handle(), "signed-off", |
772 purple_signal_connect(purple_connections_get_handle(), "signed-off", |
| 797 plugin, G_CALLBACK(signed_off_cb), NULL); |
773 plugin, G_CALLBACK(signed_off_cb), NULL); |