Mon, 11 Jan 2021 01:51:14 -0600
Split PurpleProtocolChat to its own file and clean up the API.
Testing Done:
* Compiled and tested bonjour (not affected) and irc locally.
* Built and verified the docs.
* verified `ninja pidgin-pot` was successful.
Bugs closed: 17457
Reviewed at https://reviews.imfreedom.org/r/406/
--- a/doc/reference/libpurple/libpurple-docs.xml Mon Jan 11 01:08:47 2021 -0600 +++ b/doc/reference/libpurple/libpurple-docs.xml Mon Jan 11 01:51:14 2021 -0600 @@ -74,6 +74,7 @@ <xi:include href="xml/purplemarkup.xml" /> <xi:include href="xml/purplepresence.xml" /> <xi:include href="xml/purpleprotocolattention.xml" /> + <xi:include href="xml/purpleprotocolchat.xml" /> <xi:include href="xml/purpleprotocolclient.xml" /> <xi:include href="xml/purpleprotocolfactory.xml" /> <xi:include href="xml/purpleprotocolim.xml" />
--- a/finch/gntblist.c Mon Jan 11 01:08:47 2021 -0600 +++ b/finch/gntblist.c Mon Jan 11 01:51:14 2021 -0600 @@ -644,7 +644,7 @@ gc = purple_account_get_connection(account); protocol = purple_connection_get_protocol(gc); - hash = purple_protocol_chat_iface_info_defaults(protocol, gc, name); + hash = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol), gc, name); chat = purple_chat_new(account, name, hash); @@ -985,13 +985,15 @@ PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL); PurpleRequestField *field; GList *parts, *iter; + PurpleProtocol *protocol; PurpleProtocolChatEntry *pce; PurpleConnection *gc; purple_request_fields_add_group(fields, group); gc = purple_account_get_connection(purple_chat_get_account(chat)); - parts = purple_protocol_chat_iface_info(purple_connection_get_protocol(gc), gc); + protocol = purple_connection_get_protocol(gc); + parts = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol), gc); for (iter = parts; iter; iter = iter->next) { pce = iter->data; @@ -1275,7 +1277,7 @@ account = purple_chat_get_account(c); protocol = purple_protocols_find(purple_account_get_protocol_id(account)); if (protocol) { - name = purple_protocol_chat_iface_get_name(protocol, purple_chat_get_components(c)); + name = purple_protocol_chat_get_name(PURPLE_PROTOCOL_CHAT(protocol), purple_chat_get_components(c)); } } else if (PURPLE_IS_CONTACT(node)) { finch_log_show_contact((PurpleContact *)node); @@ -2669,7 +2671,7 @@ chat = purple_blist_find_chat(account, name); if (chat == NULL) { PurpleProtocol *protocol = purple_connection_get_protocol(gc); - hash = purple_protocol_chat_iface_info_defaults(protocol, gc, name); + hash = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol), gc, name); } else { hash = purple_chat_get_components(chat); }
--- a/finch/gntconv.c Mon Jan 11 01:08:47 2021 -0600 +++ b/finch/gntconv.c Mon Jan 11 01:51:14 2021 -0600 @@ -306,7 +306,7 @@ chat = find_chat_for_conversation(conv); if (chat == NULL) { PurpleProtocol *protocol = purple_connection_get_protocol(gc); - comps = purple_protocol_chat_iface_info_defaults(protocol, gc, + comps = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol), gc, purple_conversation_get_name(conv)); } else { comps = purple_chat_get_components(chat); @@ -658,7 +658,7 @@ protocol = purple_connection_get_protocol(gc); if (protocol) - realname = purple_protocol_chat_iface_get_user_real_name(protocol, gc, + realname = purple_protocol_chat_get_user_real_name(PURPLE_PROTOCOL_CHAT(protocol), gc, purple_chat_conversation_get_id( PURPLE_CHAT_CONVERSATION(fc->active_conv)), name);
--- a/libpurple/buddylist.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/buddylist.c Mon Jan 11 01:51:14 2021 -0600 @@ -31,6 +31,7 @@ #include "prefs.h" #include "protocol.h" #include "purpleprivate.h" +#include "purpleprotocolchat.h" #include "purpleprotocolclient.h" #include "server.h" #include "signals.h" @@ -1779,7 +1780,7 @@ if (account != purple_chat_get_account(chat)) continue; - parts = purple_protocol_chat_iface_info(protocol, + parts = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol), purple_account_get_connection(purple_chat_get_account(chat))); pce = parts->data;
--- a/libpurple/chat.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/chat.c Mon Jan 11 01:51:14 2021 -0600 @@ -22,6 +22,7 @@ */ #include "internal.h" #include "chat.h" +#include "purpleprotocolchat.h" #include "util.h" typedef struct _PurpleChatPrivate PurpleChatPrivate; @@ -86,7 +87,8 @@ if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, info)) { PurpleProtocolChatEntry *pce; - GList *parts = purple_protocol_chat_iface_info(protocol, purple_account_get_connection(priv->account)); + GList *parts = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol), + purple_account_get_connection(priv->account)); pce = parts->data; ret = g_hash_table_lookup(priv->components, pce->identifier); g_list_free_full(parts, g_free);
--- a/libpurple/meson.build Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/meson.build Mon Jan 11 01:51:14 2021 -0600 @@ -59,6 +59,7 @@ 'purplemessage.c', 'purplepresence.c', 'purpleprotocolattention.c', + 'purpleprotocolchat.c', 'purpleprotocolclient.c', 'purpleprotocolfactory.c', 'purpleprotocolim.c', @@ -147,6 +148,7 @@ 'purplemessage.h', 'purplepresence.h', 'purpleprotocolattention.h', + 'purpleprotocolchat.h', 'purpleprotocolclient.h', 'purpleprotocolfactory.h', 'purpleprotocolim.h',
--- a/libpurple/protocol.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocol.c Mon Jan 11 01:51:14 2021 -0600 @@ -402,110 +402,3 @@ #undef DEFINE_PROTOCOL_FUNC_WITH_RETURN #undef DEFINE_PROTOCOL_FUNC - -/************************************************************************** - * Protocol Chat Interface API - **************************************************************************/ -#define DEFINE_PROTOCOL_FUNC(protocol,funcname,...) \ - PurpleProtocolChatInterface *chat_iface = \ - PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol); \ - if (chat_iface && chat_iface->funcname) \ - chat_iface->funcname(__VA_ARGS__); - -#define DEFINE_PROTOCOL_FUNC_WITH_RETURN(protocol,defaultreturn,funcname,...) \ - PurpleProtocolChatInterface *chat_iface = \ - PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol); \ - if (chat_iface && chat_iface->funcname) \ - return chat_iface->funcname(__VA_ARGS__); \ - else \ - return defaultreturn; - -GType -purple_protocol_chat_iface_get_type(void) -{ - static GType type = 0; - - if (G_UNLIKELY(type == 0)) { - static const GTypeInfo info = { - .class_size = sizeof(PurpleProtocolChatInterface), - }; - - type = g_type_register_static(G_TYPE_INTERFACE, - "PurpleProtocolChatInterface", &info, 0); - } - return type; -} - -GList * -purple_protocol_chat_iface_info(PurpleProtocol *protocol, PurpleConnection *gc) -{ - DEFINE_PROTOCOL_FUNC_WITH_RETURN(protocol, NULL, info, gc); -} - -GHashTable * -purple_protocol_chat_iface_info_defaults(PurpleProtocol *protocol, - PurpleConnection *gc, const char *chat_name) -{ - DEFINE_PROTOCOL_FUNC_WITH_RETURN(protocol, NULL, info_defaults, gc, - chat_name); -} - -void -purple_protocol_chat_iface_join(PurpleProtocol *protocol, PurpleConnection *gc, - GHashTable *components) -{ - DEFINE_PROTOCOL_FUNC(protocol, join, gc, components); -} - -void -purple_protocol_chat_iface_reject(PurpleProtocol *protocol, - PurpleConnection *gc, GHashTable *components) -{ - DEFINE_PROTOCOL_FUNC(protocol, reject, gc, components); -} - -char * -purple_protocol_chat_iface_get_name(PurpleProtocol *protocol, - GHashTable *components) -{ - DEFINE_PROTOCOL_FUNC_WITH_RETURN(protocol, NULL, get_name, components); -} - -void -purple_protocol_chat_iface_invite(PurpleProtocol *protocol, - PurpleConnection *gc, int id, const char *message, const char *who) -{ - DEFINE_PROTOCOL_FUNC(protocol, invite, gc, id, message, who); -} - -void -purple_protocol_chat_iface_leave(PurpleProtocol *protocol, PurpleConnection *gc, - int id) -{ - DEFINE_PROTOCOL_FUNC(protocol, leave, gc, id); -} - -int -purple_protocol_chat_iface_send(PurpleProtocol *protocol, PurpleConnection *gc, - int id, PurpleMessage *msg) -{ - DEFINE_PROTOCOL_FUNC_WITH_RETURN(protocol, 0, send, gc, id, msg); -} - -char * -purple_protocol_chat_iface_get_user_real_name(PurpleProtocol *protocol, - PurpleConnection *gc, int id, const char *who) -{ - DEFINE_PROTOCOL_FUNC_WITH_RETURN(protocol, NULL, get_user_real_name, gc, id, - who); -} - -void -purple_protocol_chat_iface_set_topic(PurpleProtocol *protocol, - PurpleConnection *gc, int id, const char *topic) -{ - DEFINE_PROTOCOL_FUNC(protocol, set_topic, gc, id, topic); -} - -#undef DEFINE_PROTOCOL_FUNC_WITH_RETURN -#undef DEFINE_PROTOCOL_FUNC
--- a/libpurple/protocol.h Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocol.h Mon Jan 11 01:51:14 2021 -0600 @@ -276,105 +276,6 @@ #define PURPLE_PROTOCOL_SERVER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), PURPLE_TYPE_PROTOCOL_SERVER, \ PurpleProtocolServerInterface)) -#define PURPLE_TYPE_PROTOCOL_CHAT (purple_protocol_chat_iface_get_type()) - -typedef struct _PurpleProtocolChatInterface PurpleProtocolChatInterface; - -/** - * PurpleProtocolChatInterface: - * @info: Returns a list of #PurpleProtocolChatEntry structs, which represent - * information required by the protocol to join a chat. libpurple will - * call join_chat along with the information filled by the user. - * <sbr/>Returns: A list of #PurpleProtocolChatEntry's - * @info_defaults: Returns a hashtable which maps #PurpleProtocolChatEntry - * struct identifiers to default options as strings based on - * @chat_name. The resulting hashtable should be created with - * #g_hash_table_new_full(#g_str_hash, #g_str_equal, %NULL, - * #g_free). Use @get_name if you instead need to extract a chat - * name from a hashtable. - * <sbr/>@chat_name: The chat name to be turned into components - * <sbr/>Returns: Hashtable containing the information extracted - * from @chat_name - * @join: Called when the user requests joining a chat. Should arrange for - * purple_serv_got_joined_chat() to be called. - * <sbr/>@components: A hashtable containing information required to join - * the chat as described by the entries returned by - * @info. It may also be called when accepting an - * invitation, in which case this matches the data - * parameter passed to purple_serv_got_chat_invite(). - * @reject: Called when the user refuses a chat invitation. - * <sbr/>@components: A hashtable containing information required to - * join the chat as passed to purple_serv_got_chat_invite(). - * @get_name: Returns a chat name based on the information in components. Use - * @info_defaults if you instead need to generate a hashtable from a - * chat name. - * <sbr/>@components: A hashtable containing information about the - * chat. - * @invite: Invite a user to join a chat. - * <sbr/>@id: The id of the chat to invite the user to. - * <sbr/>@message: A message displayed to the user when the invitation - * is received. - * <sbr/>@who: The name of the user to send the invation to. - * @leave: Called when the user requests leaving a chat. - * <sbr/>@id: The id of the chat to leave - * @send: Send a message to a chat. - * <sbr/>This protocol function should return a positive value on - * success. If the message is too big to be sent, return - * <literal>-E2BIG</literal>. If the account is not connected, - * return <literal>-ENOTCONN</literal>. If the protocol is unable - * to send the message for another reason, return some other - * negative value. You can use one of the valid #errno values, or - * just big something. - * <sbr/>@id: The id of the chat to send the message to. - * <sbr/>@msg: The message to send to the chat. - * <sbr/>Returns: A positive number or 0 in case of success, a - * negative error number in case of failure. - * @get_user_real_name: Gets the real name of a participant in a chat. For - * example, on XMPP this turns a chat room nick - * <literal>foo</literal> into - * <literal>room\@server/foo</literal>. - * <sbr/>@gc: the connection on which the room is. - * <sbr/>@id: the ID of the chat room. - * <sbr/>@who: the nickname of the chat participant. - * <sbr/>Returns: the real name of the participant. This - * string must be freed by the caller. - * - * The protocol chat interface. - * - * This interface provides callbacks needed by protocols that implement chats. - */ -struct _PurpleProtocolChatInterface -{ - /*< private >*/ - GTypeInterface parent_iface; - - /*< public >*/ - GList *(*info)(PurpleConnection *connection); - - GHashTable *(*info_defaults)(PurpleConnection *connection, const char *chat_name); - - void (*join)(PurpleConnection *connection, GHashTable *components); - - void (*reject)(PurpleConnection *connection, GHashTable *components); - - char *(*get_name)(GHashTable *components); - - void (*invite)(PurpleConnection *connection, int id, - const char *message, const char *who); - - void (*leave)(PurpleConnection *connection, int id); - - int (*send)(PurpleConnection *connection, int id, PurpleMessage *msg); - - char *(*get_user_real_name)(PurpleConnection *gc, int id, const char *who); - - void (*set_topic)(PurpleConnection *gc, int id, const char *topic); -}; - -#define PURPLE_IS_PROTOCOL_CHAT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_PROTOCOL_CHAT)) -#define PURPLE_PROTOCOL_CHAT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), PURPLE_TYPE_PROTOCOL_CHAT, \ - PurpleProtocolChatInterface)) - /** * PURPLE_PROTOCOL_IMPLEMENTS: * @protocol: The protocol in which to check @@ -585,166 +486,6 @@ /* Protocol Chat Interface API */ /**************************************************************************/ -/** - * purple_protocol_chat_iface_get_type: - * - * Returns: The #GType for the protocol chat interface. - * - * Since: 3.0.0 - */ -GType purple_protocol_chat_iface_get_type(void); - -/** - * purple_protocol_chat_iface_info: - * @protocol: The #PurpleProtocol instance. - * @connection: The #PurpleConnection instance. - * - * Gets the list of #PurpleProtocolChatEntry's that are required to join a - * multi user chat. - * - * Returns: (transfer full) (element-type PurpleProtocolChatEntry): The list - * of #PurpleProtocolChatEntry's that are used to join a chat. - * - * Since: 3.0.0 - */ -GList *purple_protocol_chat_iface_info(PurpleProtocol *protocol, - PurpleConnection *connection); - -/** - * purple_protocol_chat_iface_info_defaults: - * @protocol: The #PurpleProtocol instance - * @connection: The #PurpleConnection instance - * @chat_name: The name of the chat - * - * Returns a #GHashTable of the default protocol dependent components that will - * be passed to #purple_protocol_chat_iface_join. - * - * Returns: (transfer full) (element-type utf8 utf8): The values that will be - * used to join the chat. - * - * Since: 3.0.0 - */ -GHashTable *purple_protocol_chat_iface_info_defaults(PurpleProtocol *protocol, - PurpleConnection *connection, const char *chat_name); - -/** - * purple_protocol_chat_iface_join: - * @protocol: The #PurpleProtocol instance - * @connection: The #PurpleConnection instance - * @components: (element-type utf8 utf8): The protocol dependent join - * components - * - * Joins the chat described in @components. - * - * Since: 3.0.0 - */ -void purple_protocol_chat_iface_join(PurpleProtocol *protocol, PurpleConnection *connection, - GHashTable *components); - -/** - * purple_protocol_chat_iface_reject: - * @protocol: The #PurpleProtocol instance - * @connection: The #PurpleConnection instance - * @components: (element-type utf8 utf8): The protocol dependent join - * components - * - * Not quite sure exactly what this does or where it's used. Please fill in - * the details if you know. - * - * Since: 3.0.0 - */ -void purple_protocol_chat_iface_reject(PurpleProtocol *protocol, - PurpleConnection *connection, GHashTable *components); - -/** - * purple_protocol_chat_iface_get_name: - * @protocol: The #PurpleProtocol instance - * @components: (element-type utf8 utf8): The protocol dependent join - * components - * - * Gets the name from @components. - * - * Returns: (transfer full): The chat name from @components. - * - * Since: 3.0.0 - */ -char *purple_protocol_chat_iface_get_name(PurpleProtocol *protocol, - GHashTable *components); - -/** - * purple_protocol_chat_iface_invite: - * @protocol: The #PurpleProtocol instance - * @connection: The #PurpleConnection instance - * @id: The id of the chat - * @message: The invite message - * @who: The target of the invite - * - * Sends an invite to @who with @message. - * - * Since: 3.0.0 - */ -void purple_protocol_chat_iface_invite(PurpleProtocol *protocol, - PurpleConnection *connection, int id, const char *message, const char *who); - -/** - * purple_protocol_chat_iface_leave: - * @protocol: The #PurpleProtocol instance - * @connection: The #PurpleConnection instance - * @id: The id of the chat - * - * Leaves the chat identified by @id. - * - * Since: 3.0.0 - */ -void purple_protocol_chat_iface_leave(PurpleProtocol *protocol, PurpleConnection *connection, - int id); - -/** - * purple_protocol_chat_iface_send: - * @protocol: The #PurpleProtocol instance - * @connection: The #PurpleConnection instance - * @id: The id of the chat - * @msg: The message to send - * - * Sends @msg to the chat identified by @id. - * - * Returns: 0 on success, non-zero on failure. - * - * Since: 3.0.0 - */ -int purple_protocol_chat_iface_send(PurpleProtocol *protocol, PurpleConnection *connection, - int id, PurpleMessage *msg); - -/** - * purple_protocol_chat_iface_get_user_real_name: - * @protocol: The #PurpleProtocol instance - * @gc: The #PurpleConnection instance - * @id: The id of the chat - * @who: The username - * - * Gets the real name of @who. - * - * Returns: (transfer full): The realname of @who. - * - * Since: 3.0.0 - */ -char *purple_protocol_chat_iface_get_user_real_name(PurpleProtocol *protocol, - PurpleConnection *gc, int id, const char *who); - -/** - * purple_protocol_chat_iface_set_topic: - * @protocol: The #PurpleProtocol instance - * @gc: The #PurpleConnection instance - * @id: The id of the chat - * @topic: The new topic - * - * Sets the topic for the chat with id @id to @topic. - * - * Since: 3.0.0 - */ -void purple_protocol_chat_iface_set_topic(PurpleProtocol *protocol, - PurpleConnection *gc, int id, const char *topic); - G_END_DECLS #endif /* PURPLE_PROTOCOL_H */
--- a/libpurple/protocols/facebook/facebook.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/facebook/facebook.c Mon Jan 11 01:51:14 2021 -0600 @@ -1231,7 +1231,7 @@ } static GList * -fb_chat_info() +fb_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection *connection) { GList *pces = NULL; PurpleProtocolChatEntry *pce; @@ -1246,7 +1246,8 @@ } static GHashTable * -fb_chat_info_defaults(PurpleConnection *gc, const gchar *name) +fb_chat_info_defaults(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + const gchar *name) { GHashTable *data; @@ -1257,7 +1258,8 @@ } static void -fb_chat_join(PurpleConnection *gc, GHashTable *data) +fb_chat_join(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + GHashTable *data) { const gchar *name; FbApi *api; @@ -1295,7 +1297,7 @@ } static gchar * -fb_chat_get_name(GHashTable *data) +fb_chat_get_name(PurpleProtocolChat *protocol_chat, GHashTable *data) { const gchar *name; @@ -1306,8 +1308,8 @@ } static void -fb_chat_invite(PurpleConnection *gc, gint id, const gchar *msg, - const gchar *who) +fb_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, const gchar *msg, const gchar *who) { const gchar *name; FbApi *api; @@ -1339,7 +1341,8 @@ } static gint -fb_chat_send(PurpleConnection *gc, gint id, PurpleMessage *msg) +fb_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, gint id, + PurpleMessage *msg) { const gchar *name; const gchar *text; @@ -1372,7 +1375,8 @@ } static void -fb_chat_set_topic(PurpleConnection *gc, gint id, const gchar *topic) +fb_chat_set_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, const gchar *topic) { const gchar *name; FbApi *api;
--- a/libpurple/protocols/gg/chat.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/gg/chat.c Mon Jan 11 01:51:14 2021 -0600 @@ -293,8 +293,8 @@ purple_chat_conversation_remove_user(chat->conv, ggp_uin_to_str(uin), NULL); } -GList * ggp_chat_info(PurpleConnection *gc) -{ +GList * +ggp_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection *gc) { GList *m = NULL; PurpleProtocolChatEntry *pce; @@ -307,7 +307,9 @@ return m; } -GHashTable * ggp_chat_info_defaults(PurpleConnection *gc, const char *chat_name) +GHashTable * +ggp_chat_info_defaults(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + const gchar *chat_name) { GHashTable *defaults; @@ -319,8 +321,8 @@ return defaults; } -char * ggp_chat_get_name(GHashTable *components) -{ +gchar * +ggp_chat_get_name(PurpleProtocolChat *protocol_chat, GHashTable *components) { return g_strdup((gchar*)g_hash_table_lookup(components, "id")); } @@ -347,7 +349,9 @@ return id; } -void ggp_chat_join(PurpleConnection *gc, GHashTable *components) +void +ggp_chat_join(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + GHashTable *components) { ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc); GGPInfo *info = purple_connection_get_protocol_data(gc); @@ -394,6 +398,8 @@ static void ggp_chat_join_id(PurpleConnection *gc, uint64_t id) { GHashTable *components; + PurpleProtocol *protocol = purple_connection_get_protocol(gc); + ggp_chat_local_info *chat = ggp_chat_get(gc, id); if (chat && !chat->left) { @@ -416,12 +422,15 @@ "participant"), NULL); } - components = ggp_chat_info_defaults(gc, ggp_chat_get_name_from_id(id)); + components = ggp_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol), gc, + ggp_chat_get_name_from_id(id)); purple_serv_got_join_chat_failed(gc, components); g_hash_table_destroy(components); } -void ggp_chat_leave(PurpleConnection *gc, int local_id) +void +ggp_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint local_id) { GGPInfo *info = purple_connection_get_protocol_data(gc); ggp_chat_local_info *chat; @@ -448,8 +457,9 @@ chat->left = TRUE; } -void ggp_chat_invite(PurpleConnection *gc, int local_id, const char *message, - const char *who) +void +ggp_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint local_id, const gchar *message, const gchar *who) { GGPInfo *info = purple_connection_get_protocol_data(gc); ggp_chat_local_info *chat; @@ -470,7 +480,9 @@ } } -int ggp_chat_send(PurpleConnection *gc, int local_id, PurpleMessage *msg) +gint +ggp_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint local_id, PurpleMessage *msg) { GGPInfo *info = purple_connection_get_protocol_data(gc); GDateTime *dt = NULL;
--- a/libpurple/protocols/gg/chat.h Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/gg/chat.h Mon Jan 11 01:51:14 2021 -0600 @@ -41,15 +41,15 @@ void ggp_chat_got_event(PurpleConnection *gc, const struct gg_event *ev); -GList * ggp_chat_info(PurpleConnection *gc); -GHashTable * ggp_chat_info_defaults(PurpleConnection *gc, +GList * ggp_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection *gc); +GHashTable * ggp_chat_info_defaults(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, const char *chat_name); -char * ggp_chat_get_name(GHashTable *components); -void ggp_chat_join(PurpleConnection *gc, GHashTable *components); -void ggp_chat_leave(PurpleConnection *gc, int local_id); -void ggp_chat_invite(PurpleConnection *gc, int local_id, const char *message, +char * ggp_chat_get_name(PurpleProtocolChat *protocol_chat, GHashTable *components); +void ggp_chat_join(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, GHashTable *components); +void ggp_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int local_id); +void ggp_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int local_id, const char *message, const char *who); -int ggp_chat_send(PurpleConnection *gc, int local_id, PurpleMessage *msg); +int ggp_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int local_id, PurpleMessage *msg); void ggp_chat_got_message(PurpleConnection *gc, uint64_t chat_id, const char *message, time_t time, uin_t who);
--- a/libpurple/protocols/irc/irc.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/irc/irc.c Mon Jan 11 01:51:14 2021 -0600 @@ -41,8 +41,8 @@ static void irc_login_cb(GObject *source, GAsyncResult *res, gpointer user_data); static void irc_close(PurpleConnection *gc); static int irc_im_send(PurpleProtocolIM *im, PurpleConnection *gc, PurpleMessage *msg); -static int irc_chat_send(PurpleConnection *gc, int id, PurpleMessage *msg); -static void irc_chat_join (PurpleConnection *gc, GHashTable *data); +static int irc_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int id, PurpleMessage *msg); +static void irc_chat_join(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, GHashTable *data); static void irc_read_input_cb(GObject *source, GAsyncResult *res, gpointer data); static guint irc_nick_hash(const char *nick); @@ -386,8 +386,8 @@ return list; } -static GList *irc_chat_join_info(PurpleConnection *gc) -{ +static GList * +irc_chat_join_info(PurpleProtocolChat *protocol_chat, PurpleConnection *gc) { GList *m = NULL; PurpleProtocolChatEntry *pce; @@ -406,7 +406,9 @@ return m; } -static GHashTable *irc_chat_info_defaults(PurpleConnection *gc, const char *chat_name) +static GHashTable * +irc_chat_info_defaults(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + const gchar *chat_name) { GHashTable *defaults; @@ -761,7 +763,9 @@ irc_read_input_cb, gc); } -static void irc_chat_join (PurpleConnection *gc, GHashTable *data) +static void +irc_chat_join(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + GHashTable *data) { struct irc_conn *irc = purple_connection_get_protocol_data(gc); const char *args[2]; @@ -771,11 +775,14 @@ irc_cmd_join(irc, "join", NULL, args); } -static char *irc_get_chat_name(GHashTable *data) { +static gchar * +irc_get_chat_name(PurpleProtocolChat *protocol_chat, GHashTable *data) { return g_strdup(g_hash_table_lookup(data, "channel")); } -static void irc_chat_invite(PurpleConnection *gc, int id, const char *message, const char *name) +static void +irc_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, const gchar *message, const gchar *name) { struct irc_conn *irc = purple_connection_get_protocol_data(gc); PurpleConversation *convo = PURPLE_CONVERSATION(purple_conversations_find_chat(gc, id)); @@ -791,7 +798,9 @@ } -static void irc_chat_leave (PurpleConnection *gc, int id) +static void +irc_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id) { struct irc_conn *irc = purple_connection_get_protocol_data(gc); PurpleConversation *convo = PURPLE_CONVERSATION(purple_conversations_find_chat(gc, id)); @@ -806,7 +815,9 @@ purple_serv_got_chat_left(gc, id); } -static int irc_chat_send(PurpleConnection *gc, int id, PurpleMessage *msg) +static gint +irc_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, gint id, + PurpleMessage *msg) { struct irc_conn *irc = purple_connection_get_protocol_data(gc); PurpleConversation *convo = PURPLE_CONVERSATION(purple_conversations_find_chat(gc, id)); @@ -854,7 +865,9 @@ g_free(ib); } -static void irc_chat_set_topic(PurpleConnection *gc, int id, const char *topic) +static void +irc_chat_set_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, const gchar *topic) { char *buf; const char *name = NULL;
--- a/libpurple/protocols/jabber/chat.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/jabber/chat.c Mon Jan 11 01:51:14 2021 -0600 @@ -31,7 +31,9 @@ #include "xdata.h" #include "data.h" -GList *jabber_chat_info(PurpleConnection *gc) +GList * +jabber_chat_info(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection) { GList *m = NULL; PurpleProtocolChatEntry *pce; @@ -203,7 +205,8 @@ void jabber_chat_member_free(JabberChatMember *jcm); -char *jabber_get_chat_name(GHashTable *data) { +gchar * +jabber_get_chat_name(PurpleProtocolChat *protocol_chat, GHashTable *data) { char *room, *server, *chat_name = NULL; room = g_hash_table_lookup(data, "room"); @@ -414,7 +417,9 @@ jabber_id_free(jid); } -void jabber_chat_leave(PurpleConnection *gc, int id) +void +jabber_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id) { JabberStream *js = purple_connection_get_protocol_data(gc); JabberChat *chat = jabber_chat_find_by_id(js, id); @@ -454,7 +459,9 @@ return purple_chat_conversation_has_user(conv, name); } -char *jabber_chat_user_real_name(PurpleConnection *gc, int id, const char *who) +gchar * +jabber_chat_user_real_name(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, gint id, const gchar *who) { JabberStream *js = purple_connection_get_protocol_data(gc); JabberChat *chat; @@ -736,7 +743,9 @@ jabber_message_free(jm); } -void jabber_chat_set_topic(PurpleConnection *gc, int id, const char *topic) +void +jabber_chat_set_topic(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, gint id, const gchar *topic) { JabberStream *js = purple_connection_get_protocol_data(gc); JabberChat *chat = jabber_chat_find_by_id(js, id);
--- a/libpurple/protocols/jabber/chat.h Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/jabber/chat.h Mon Jan 11 01:51:14 2021 -0600 @@ -52,9 +52,9 @@ time_t joined; } JabberChat; -GList *jabber_chat_info(PurpleConnection *gc); +GList *jabber_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection *connection); GHashTable *jabber_chat_info_defaults(PurpleConnection *gc, const char *chat_name); -char *jabber_get_chat_name(GHashTable *data); +char *jabber_get_chat_name(PurpleProtocolChat *protocol_chat, GHashTable *data); /** * in-protocol function for joining a chat room. Doesn't require sticking goop @@ -80,13 +80,13 @@ gboolean jabber_chat_find_buddy(PurpleChatConversation *conv, const char *name); void jabber_chat_invite(PurpleConnection *gc, int id, const char *message, const char *name); -void jabber_chat_leave(PurpleConnection *gc, int id); -char *jabber_chat_user_real_name(PurpleConnection *gc, int id, const char *who); +void jabber_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int id); +char *jabber_chat_user_real_name(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int id, const char *who); void jabber_chat_request_room_configure(JabberChat *chat); void jabber_chat_create_instant_room(JabberChat *chat); void jabber_chat_register(JabberChat *chat); void jabber_chat_change_topic(JabberChat *chat, const char *topic); -void jabber_chat_set_topic(PurpleConnection *gc, int id, const char *topic); +void jabber_chat_set_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int id, const char *topic); gboolean jabber_chat_change_nick(JabberChat *chat, const char *nick); void jabber_chat_part(JabberChat *chat, const char *msg); void jabber_chat_track_handle(JabberChat *chat, const char *handle,
--- a/libpurple/protocols/jabber/jabber.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/jabber/jabber.c Mon Jan 11 01:51:14 2021 -0600 @@ -4193,14 +4193,37 @@ im_iface->send_typing = jabber_send_typing; } +static GHashTable * +jabber_protocol_chat_info_defaults(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, + const gchar *name) +{ + return jabber_chat_info_defaults(connection, name); +} + +static void +jabber_protocol_chat_join(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, GHashTable *components) +{ + jabber_chat_join(connection, components); +} + +static void +jabber_protocol_chat_invite(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, gint id, + const gchar *message, const gchar *who) +{ + jabber_chat_invite(connection, id, message, who); +} + static void jabber_protocol_chat_iface_init(PurpleProtocolChatInterface *chat_iface) { chat_iface->info = jabber_chat_info; - chat_iface->info_defaults = jabber_chat_info_defaults; - chat_iface->join = jabber_chat_join; + chat_iface->info_defaults = jabber_protocol_chat_info_defaults; + chat_iface->join = jabber_protocol_chat_join; chat_iface->get_name = jabber_get_chat_name; - chat_iface->invite = jabber_chat_invite; + chat_iface->invite = jabber_protocol_chat_invite; chat_iface->leave = jabber_chat_leave; chat_iface->send = jabber_message_send_chat; chat_iface->get_user_real_name = jabber_chat_user_real_name;
--- a/libpurple/protocols/jabber/message.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/jabber/message.c Mon Jan 11 01:51:14 2021 -0600 @@ -1226,7 +1226,9 @@ return 1; } -int jabber_message_send_chat(PurpleConnection *gc, int id, PurpleMessage *msg) +gint +jabber_message_send_chat(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, gint id, PurpleMessage *msg) { JabberChat *chat; JabberMessage *jm;
--- a/libpurple/protocols/jabber/message.h Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/jabber/message.h Mon Jan 11 01:51:14 2021 -0600 @@ -71,7 +71,7 @@ void jabber_message_parse(JabberStream *js, PurpleXmlNode *packet); int jabber_message_send_im(PurpleProtocolIM *pim, PurpleConnection *gc, PurpleMessage *msg); -int jabber_message_send_chat(PurpleConnection *gc, int id, PurpleMessage *msg); +int jabber_message_send_chat(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, int id, PurpleMessage *msg); unsigned int jabber_send_typing(PurpleProtocolIM *pim, PurpleConnection *gc, const char *who, PurpleIMTypingState state);
--- a/libpurple/protocols/novell/novell.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/novell/novell.c Mon Jan 11 01:51:14 2021 -0600 @@ -2405,7 +2405,8 @@ } static void -novell_chat_leave(PurpleConnection * gc, int id) +novell_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id) { NMConference *conference; NMUser *user; @@ -2435,8 +2436,8 @@ } static void -novell_chat_invite(PurpleConnection *gc, int id, - const char *message, const char *who) +novell_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, const gchar *message, const gchar *who) { NMConference *conference; NMUser *user; @@ -2472,8 +2473,9 @@ } } -static int -novell_chat_send(PurpleConnection * gc, int id, PurpleMessage *msg) +static gint +novell_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, PurpleMessage *msg) { NMConference *conference; PurpleChatConversation *chat;
--- a/libpurple/protocols/null/nullprpl.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/null/nullprpl.c Mon Jan 11 01:51:14 2021 -0600 @@ -324,7 +324,8 @@ } } -static GList *null_chat_info(PurpleConnection *gc) { +static GList * +null_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection *gc) { PurpleProtocolChatEntry *pce; /* defined in protocols.h */ purple_debug_info("nullprpl", "returning chat setting 'room'\n"); @@ -337,8 +338,10 @@ return g_list_append(NULL, pce); } -static GHashTable *null_chat_info_defaults(PurpleConnection *gc, - const char *room) { +static GHashTable * +null_chat_info_defaults(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, const gchar *room) +{ GHashTable *defaults; purple_debug_info("nullprpl", "returning chat default setting " @@ -676,7 +679,10 @@ } } -static void null_join_chat(PurpleConnection *gc, GHashTable *components) { +static void +null_join_chat(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + GHashTable *components) +{ const char *username = purple_account_get_username(purple_connection_get_account(gc)); const char *room = g_hash_table_lookup(components, "room"); int chat_id = g_str_hash(room); @@ -699,7 +705,10 @@ } } -static void null_reject_chat(PurpleConnection *gc, GHashTable *components) { +static void +null_reject_chat(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + GHashTable *components) +{ const char *invited_by = g_hash_table_lookup(components, "invited_by"); const char *room = g_hash_table_lookup(components, "room"); const char *username = purple_account_get_username(purple_connection_get_account(gc)); @@ -722,14 +731,17 @@ g_free(message); } -static char *null_get_chat_name(GHashTable *components) { +static gchar * +null_get_chat_name(PurpleProtocolChat *protocol_chat, GHashTable *components) { const char *room = g_hash_table_lookup(components, "room"); purple_debug_info("nullprpl", "reporting chat room name '%s'\n", room); return g_strdup(room); } -static void null_chat_invite(PurpleConnection *gc, int id, - const char *message, const char *who) { +static void +null_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, const gchar *message, const gchar *who) +{ const char *username = purple_account_get_username(purple_connection_get_account(gc)); PurpleChatConversation *chat = purple_conversations_find_chat(gc, id); const char *room = purple_conversation_get_name(PURPLE_CONVERSATION(chat)); @@ -771,7 +783,10 @@ } } -static void null_chat_leave(PurpleConnection *gc, int id) { +static void +null_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id) +{ PurpleChatConversation *chat = purple_conversations_find_chat(gc, id); purple_debug_info("nullprpl", "%s is leaving chat room %s\n", purple_account_get_username(purple_connection_get_account(gc)), @@ -793,7 +808,10 @@ time(NULL)); } -static int null_chat_send(PurpleConnection *gc, int id, PurpleMessage *msg) { +static gint +null_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, PurpleMessage *msg) +{ const char *username = purple_account_get_username(purple_connection_get_account(gc)); PurpleChatConversation *chat = purple_conversations_find_chat(gc, id); const gchar *message = purple_message_get_contents(msg); @@ -890,8 +908,10 @@ g_free(msg); } -static void null_set_chat_topic(PurpleConnection *gc, int id, - const char *topic) { +static void +null_set_chat_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + gint id, const gchar *topic) +{ PurpleChatConversation *chat = purple_conversations_find_chat(gc, id); const char *last_topic;
--- a/libpurple/protocols/sametime/sametime.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/sametime/sametime.c Mon Jan 11 01:51:14 2021 -0600 @@ -3491,7 +3491,10 @@ } -static GList *mw_protocol_chat_info(PurpleConnection *gc) { +static GList * +mw_protocol_chat_info(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc) +{ GList *l = NULL; PurpleProtocolChatEntry *pce; @@ -3504,8 +3507,11 @@ } -static GHashTable *mw_protocol_chat_info_defaults(PurpleConnection *gc, - const char *name) { +static GHashTable * +mw_protocol_chat_info_defaults(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, + const char *name) +{ GHashTable *table; g_return_val_if_fail(gc != NULL, NULL); @@ -4362,8 +4368,10 @@ } -static void mw_protocol_join_chat(PurpleConnection *gc, - GHashTable *components) { +static void +mw_protocol_join_chat(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + GHashTable *components) +{ struct mwPurpleProtocolData *pd; char *c, *t; @@ -4403,9 +4411,11 @@ } -static void mw_protocol_reject_chat(PurpleConnection *gc, - GHashTable *components) { - +static void +mw_protocol_reject_chat(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, + GHashTable *components) +{ struct mwPurpleProtocolData *pd; struct mwServiceConference *srvc; char *c; @@ -4427,16 +4437,18 @@ } -static char *mw_protocol_get_chat_name(GHashTable *components) { +static char * +mw_protocol_get_chat_name(PurpleProtocolChat *protocol_chat, + GHashTable *components) +{ return g_hash_table_lookup(components, CHAT_KEY_NAME); } -static void mw_protocol_chat_invite(PurpleConnection *gc, - int id, - const char *invitation, - const char *who) { - +static void +mw_protocol_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + int id, const char *invitation, const char *who) +{ struct mwPurpleProtocolData *pd; struct mwConference *conf; struct mwPlace *place; @@ -4460,9 +4472,10 @@ } -static void mw_protocol_chat_leave(PurpleConnection *gc, - int id) { - +static void +mw_protocol_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + int id) +{ struct mwPurpleProtocolData *pd; struct mwConference *conf; @@ -4483,7 +4496,9 @@ } -static int mw_protocol_chat_send(PurpleConnection *gc, int id, PurpleMessage *pmsg) +static int +mw_protocol_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + int id, PurpleMessage *pmsg) { struct mwPurpleProtocolData *pd; struct mwConference *conf;
--- a/libpurple/protocols/zephyr/zephyr.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/protocols/zephyr/zephyr.c Mon Jan 11 01:51:14 2021 -0600 @@ -1623,7 +1623,9 @@ return sig; } -static int zephyr_chat_send(PurpleConnection * gc, int id, PurpleMessage *msg) +static int +zephyr_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc, + int id, PurpleMessage *msg) { zephyr_triple *zt; const char *sig; @@ -1931,8 +1933,8 @@ return types; } -static GList *zephyr_chat_info(PurpleConnection * gc) -{ +static GList * +zephyr_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection * gc) { GList *m = NULL; PurpleProtocolChatEntry *pce; @@ -1966,7 +1968,8 @@ g_free(subscribe_failed); } -static char *zephyr_get_chat_name(GHashTable *data) { +static char * +zephyr_get_chat_name(PurpleProtocolChat *protocol_chat, GHashTable *data) { gchar* zclass = g_hash_table_lookup(data,"class"); gchar* inst = g_hash_table_lookup(data,"instance"); gchar* recipient = g_hash_table_lookup(data, "recipient"); @@ -2048,7 +2051,16 @@ zephyr_chat_set_topic(gc,zt1->id,instname); } -static void zephyr_chat_leave(PurpleConnection * gc, int id) +static void +zephyr_protocol_chat_join(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, GHashTable * data) +{ + zephyr_join_chat(gc, data); +} + +static void +zephyr_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection * gc, + int id) { zephyr_triple *zt; zephyr_account *zephyr = purple_connection_get_protocol_data(gc); @@ -2163,6 +2175,13 @@ g_free(topic_utf8); } +static void +zephyr_protocol_chat_set_topic(PurpleProtocolChat *protocol_chat, + PurpleConnection *gc, int id, const char *topic) +{ + zephyr_chat_set_topic(gc, id, topic); +} + /* commands */ static PurpleCmdRet zephyr_purple_cmd_msg(PurpleConversation *conv, @@ -2549,11 +2568,11 @@ zephyr_protocol_chat_iface_init(PurpleProtocolChatInterface *chat_iface) { chat_iface->info = zephyr_chat_info; - chat_iface->join = zephyr_join_chat; + chat_iface->join = zephyr_protocol_chat_join; chat_iface->get_name = zephyr_get_chat_name; chat_iface->leave = zephyr_chat_leave; chat_iface->send = zephyr_chat_send; - chat_iface->set_topic = zephyr_chat_set_topic; + chat_iface->set_topic = zephyr_protocol_chat_set_topic; chat_iface->get_user_real_name = NULL; /* XXX */ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/purpleprotocolchat.c Mon Jan 11 01:51:14 2021 -0600 @@ -0,0 +1,207 @@ +/* + * Purple - Internet Messaging Library + * Copyright (C) Pidgin Developers <devel@pidgin.im> + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. + */ + +#include "purpleprotocolchat.h" + +/****************************************************************************** + * GObject Implementation + *****************************************************************************/ +G_DEFINE_INTERFACE(PurpleProtocolChat, purple_protocol_chat, G_TYPE_INVALID) + +static void +purple_protocol_chat_default_init(PurpleProtocolChatInterface *iface) { +} + +/****************************************************************************** + * Public API + *****************************************************************************/ +GList * +purple_protocol_chat_info(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_val_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat), NULL); + g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), NULL); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->info != NULL) { + return iface->info(protocol_chat, connection); + } + + return NULL; +} + +GHashTable * +purple_protocol_chat_info_defaults(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, + const gchar *chat_name) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_val_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat), NULL); + g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), NULL); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->info_defaults != NULL) { + return iface->info_defaults(protocol_chat, connection, chat_name); + } + + return NULL; +} + +void +purple_protocol_chat_join(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, + GHashTable *components) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat)); + g_return_if_fail(PURPLE_IS_CONNECTION(connection)); + g_return_if_fail(components != NULL); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->join != NULL) { + iface->join(protocol_chat, connection, components); + } +} + +void +purple_protocol_chat_reject(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, + GHashTable *components) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat)); + g_return_if_fail(PURPLE_IS_CONNECTION(connection)); + g_return_if_fail(components != NULL); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->reject != NULL) { + iface->reject(protocol_chat, connection, components); + } +} + +gchar * +purple_protocol_chat_get_name(PurpleProtocolChat *protocol_chat, + GHashTable *components) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_val_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat), NULL); + g_return_val_if_fail(components != NULL, NULL); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->get_name != NULL) { + return iface->get_name(protocol_chat, components); + } + + return NULL; +} + +void +purple_protocol_chat_invite(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, gint id, + const gchar *message, const gchar *who) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat)); + g_return_if_fail(PURPLE_IS_CONNECTION(connection)); + g_return_if_fail(who != NULL); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->invite != NULL) { + iface->invite(protocol_chat, connection, id, message, who); + } +} + +void +purple_protocol_chat_leave(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, gint id) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat)); + g_return_if_fail(PURPLE_IS_CONNECTION(connection)); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->leave != NULL) { + iface->leave(protocol_chat, connection, id); + } +} + +gint +purple_protocol_chat_send(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, gint id, + PurpleMessage *message) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_val_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat), -1); + g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), -1); + g_return_val_if_fail(PURPLE_IS_MESSAGE(message), -1); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->send != NULL) { + return iface->send(protocol_chat, connection, id, message); + } + + return -1; +} + +gchar * +purple_protocol_chat_get_user_real_name(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, gint id, + const gchar *who) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_val_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat), NULL); + g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), NULL); + g_return_val_if_fail(who != NULL, NULL); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->get_user_real_name != NULL) { + return iface->get_user_real_name(protocol_chat, connection, id, who); + } + + return NULL; +} + +void +purple_protocol_chat_set_topic(PurpleProtocolChat *protocol_chat, + PurpleConnection *connection, gint id, + const gchar *topic) +{ + PurpleProtocolChatInterface *iface = NULL; + + g_return_if_fail(PURPLE_IS_PROTOCOL_CHAT(protocol_chat)); + g_return_if_fail(PURPLE_IS_CONNECTION(connection)); + + iface = PURPLE_PROTOCOL_CHAT_GET_IFACE(protocol_chat); + if(iface != NULL && iface->set_topic != NULL) { + iface->set_topic(protocol_chat, connection, id, topic); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/purpleprotocolchat.h Mon Jan 11 01:51:14 2021 -0600 @@ -0,0 +1,262 @@ +/* + * Purple - Internet Messaging Library + * Copyright (C) Pidgin Developers <devel@pidgin.im> + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. + */ + +#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) +# error "only <purple.h> may be included directly" +#endif + +#ifndef PURPLE_PROTOCOL_CHAT_H +#define PURPLE_PROTOCOL_CHAT_H + +/** + * SECTION:purpleprotocolchat + * @section_id: libpurple-purpleprotocolchat + * @short_description: Protocol Chat Interface + * @title: ProtocolChat Interface + * + * #PurpleProtocolChat describes the API that protocols need to implement for + * handling multiple user conversations. + */ + +#include <glib.h> +#include <glib-object.h> + +#include <libpurple/connection.h> +#include <libpurple/purplemessage.h> + +#define PURPLE_TYPE_PROTOCOL_CHAT (purple_protocol_chat_get_type()) +G_DECLARE_INTERFACE(PurpleProtocolChat, purple_protocol_chat, PURPLE, PROTOCOL_CHAT, + GObject) + +G_BEGIN_DECLS + +/** + * PURPLE_TYPE_PROTOCOL_CHAT: + * + * The standard _get_type method for #PurpleProtocolChat. + * + * Since: 3.0.0 + */ + +/** + * PurpleProtocolChatInterface: + * @info: Returns a list of #PurpleProtocolChatEntry structs, which represent + * information required by the protocol to join a chat. libpurple will + * call join_chat along with the information filled by the user. + * @info_defaults: Returns a hashtable which maps #PurpleProtocolChatEntry + * struct identifiers to default options as strings based on + * @chat_name. The resulting hashtable should be created with + * #g_hash_table_new_full(#g_str_hash, #g_str_equal, %NULL, + * #g_free). Use @get_name if you instead need to extract a chat + * name from a hashtable. + * @join: Called when the user requests joining a chat. Should arrange for + * purple_serv_got_joined_chat() to be called. + * @reject: Called when the user refuses a chat invitation. + * @get_name: Returns a chat name based on the information in components. Use + * @info_defaults if you instead need to generate a hashtable from a + * chat name. + * @invite: Invite a user to join a chat. + * @leave: Called when the user requests leaving a chat. + * @send: Send a message to a chat. + * @get_user_real_name: Gets the real name of a participant in a chat. For + * example, on XMPP this turns a chat room nick + * <literal>foo</literal> into + * <literal>room\@server/foo</literal>. + * @set_topic: Called to set the topic for the given chat. + * + * The protocol chat interface. + * + * This interface provides callbacks needed by protocols that implement chats. + */ +struct _PurpleProtocolChatInterface { + /*< private >*/ + GTypeInterface parent; + + /*< public >*/ + GList *(*info)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection); + + GHashTable *(*info_defaults)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, const gchar *chat_name); + + void (*join)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, GHashTable *components); + + void (*reject)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, GHashTable *components); + + gchar *(*get_name)(PurpleProtocolChat *protocol_chat, GHashTable *components); + + void (*invite)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, const gchar *message, const gchar *who); + + void (*leave)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id); + + gint (*send)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, PurpleMessage *message); + + gchar *(*get_user_real_name)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, const gchar *who); + + void (*set_topic)(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, const gchar *topic); + + /*< private >*/ + gpointer reserved[8]; +}; + +/** + * purple_protocol_chat_info: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * + * Gets the list of #PurpleProtocolChatEntry's that are required to join a + * multi user chat. + * + * Returns: (transfer full) (element-type PurpleProtocolChatEntry): The list + * of #PurpleProtocolChatEntry's that are used to join a chat. + * + * Since: 3.0.0 + */ +GList *purple_protocol_chat_info(PurpleProtocolChat *protocol_chat, PurpleConnection *connection); + +/** + * purple_protocol_chat_info_defaults: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @chat_name: The name of the chat. + * + * Returns a #GHashTable of the default protocol dependent components that will + * be passed to purple_protocol_chat_join(). + * + * Returns: (transfer full) (element-type utf8 utf8): The values that will be + * used to join the chat. + * + * Since: 3.0.0 + */ +GHashTable *purple_protocol_chat_info_defaults(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, const gchar *chat_name); + +/** + * purple_protocol_chat_join: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @components: (element-type utf8 utf8) (transfer none): The protocol + * dependent join components. + * + * Joins the chat described in @components. + * + * Since: 3.0.0 + */ +void purple_protocol_chat_join(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, GHashTable *components); + +/** + * purple_protocol_chat_reject: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @components: (element-type utf8 utf8) (transfer none): The protocol + * dependent join components. + * + * Used to reject a chat invite. + * + * Since: 3.0.0 + */ +void purple_protocol_chat_reject(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, GHashTable *components); + +/** + * purple_protocol_chat_get_name: + * @protocol_chat: The #PurpleProtocolChat instance. + * @components: (element-type utf8 utf8) (transfer none): The protocol + * dependent join components. + * + * Gets the name from @components. + * + * Returns: (transfer full): The chat name from @components. + * + * Since: 3.0.0 + */ +gchar *purple_protocol_chat_get_name(PurpleProtocolChat *protocol_chat, GHashTable *components); + +/** + * purple_protocol_chat_invite: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @id: The id of the chat. + * @message: The invite message. + * @who: The target of the invite. + * + * Sends an invite to @who with @message. + * + * Since: 3.0.0 + */ +void purple_protocol_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, const gchar *message, const gchar *who); + +/** + * purple_protocol_chat_leave: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @id: The id of the chat. + * + * Leaves the chat identified by @id. + * + * Since: 3.0.0 + */ +void purple_protocol_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id); + +/** + * purple_protocol_chat_send: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @id: The id of the chat. + * @message: The message to send. + * + * Sends @message to the chat identified by @id. + * + * Returns: 0 on success, non-zero on failure. + * + * Since: 3.0.0 + */ +gint purple_protocol_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, PurpleMessage *message); + +/** + * purple_protocol_chat_get_user_real_name: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @id: The id of the chat. + * @who: The username. + * + * Gets the real name of @who. + * + * Returns: (transfer full): The realname of @who. + * + * Since: 3.0.0 + */ +gchar *purple_protocol_chat_get_user_real_name(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, const gchar *who); + +/** + * purple_protocol_chat_set_topic: + * @protocol_chat: The #PurpleProtocolChat instance. + * @connection: The #PurpleConnection instance. + * @id: The id of the chat. + * @topic: The new topic. + * + * Sets the topic for the chat with id @id to @topic. + * + * Since: 3.0.0 + */ +void purple_protocol_chat_set_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, const gchar *topic); + +G_END_DECLS + +#endif /* PURPLE_PROTOCOL_CHAT_H */ +
--- a/libpurple/server.c Mon Jan 11 01:08:47 2021 -0600 +++ b/libpurple/server.c Mon Jan 11 01:51:14 2021 -0600 @@ -35,6 +35,7 @@ #include "protocol.h" #include "purpleprivate.h" #include "purpleprotocolattention.h" +#include "purpleprotocolchat.h" #include "purpleprotocolim.h" #include "purpleprotocolprivacy.h" #include "request.h" @@ -412,7 +413,7 @@ if (gc) { protocol = purple_connection_get_protocol(gc); - purple_protocol_chat_iface_join(protocol, gc, data); + purple_protocol_chat_join(PURPLE_PROTOCOL_CHAT(protocol), gc, data); } } @@ -423,7 +424,7 @@ if (gc) { protocol = purple_connection_get_protocol(gc); - purple_protocol_chat_iface_reject(protocol, gc, data); + purple_protocol_chat_reject(PURPLE_PROTOCOL_CHAT(protocol), gc, data); } } @@ -445,8 +446,10 @@ purple_signal_emit(purple_conversations_get_handle(), "chat-inviting-user", chat, name, &buffy); - if (protocol) - purple_protocol_chat_iface_invite(protocol, gc, id, buffy, name); + if(protocol) { + purple_protocol_chat_invite(PURPLE_PROTOCOL_CHAT(protocol), gc, id, + buffy, name); + } purple_signal_emit(purple_conversations_get_handle(), "chat-invited-user", chat, name, buffy); @@ -464,7 +467,7 @@ PurpleProtocol *protocol; protocol = purple_connection_get_protocol(gc); - purple_protocol_chat_iface_leave(protocol, gc, id); + purple_protocol_chat_leave(PURPLE_PROTOCOL_CHAT(protocol), gc, id); } int purple_serv_chat_send(PurpleConnection *gc, int id, PurpleMessage *msg) @@ -474,8 +477,10 @@ g_return_val_if_fail(msg != NULL, -EINVAL); - if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, send)) - return purple_protocol_chat_iface_send(protocol, gc, id, msg); + if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, send)) { + return purple_protocol_chat_send(PURPLE_PROTOCOL_CHAT(protocol), gc, + id, msg); + } return -EINVAL; }
--- a/pidgin/gtkblist.c Mon Jan 11 01:08:47 2021 -0600 +++ b/pidgin/gtkblist.c Mon Jan 11 01:51:14 2021 -0600 @@ -380,8 +380,10 @@ components = purple_chat_get_components(chat); - if (protocol) - chat_name = purple_protocol_chat_iface_get_name(protocol, components); + if(protocol) { + chat_name = purple_protocol_chat_get_name(PURPLE_PROTOCOL_CHAT(protocol), + components); + } if (chat_name) name = chat_name; @@ -651,13 +653,15 @@ PurpleRequestField *field; GList *parts, *iter; PurpleProtocolChatEntry *pce; + PurpleProtocol *protocol; PurpleConnection *gc; PurpleChat *chat = (PurpleChat*)node; purple_request_fields_add_group(fields, group); gc = purple_account_get_connection(purple_chat_get_account(chat)); - parts = purple_protocol_chat_iface_info(purple_connection_get_protocol(gc), gc); + protocol = purple_connection_get_protocol(gc); + parts = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol), gc); for (iter = parts; iter; iter = iter->next) { pce = iter->data; @@ -732,7 +736,8 @@ account = purple_chat_get_account(c); protocol = purple_protocols_find(purple_account_get_protocol_id(account)); if (protocol) { - name = purple_protocol_chat_iface_get_name(protocol, purple_chat_get_components(c)); + name = purple_protocol_chat_get_name(PURPLE_PROTOCOL_CHAT(protocol), + purple_chat_get_components(c)); } } else if (PURPLE_IS_CONTACT(node)) { pidgin_log_show_contact(PURPLE_CONTACT(node)); @@ -1056,8 +1061,9 @@ g_list_free(data->entries); data->entries = NULL; - list = purple_protocol_chat_iface_info(protocol, gc); - defaults = purple_protocol_chat_iface_info_defaults(protocol, gc, default_chat_name); + list = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol), gc); + defaults = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol), + gc, default_chat_name); for (tmp = list; tmp; tmp = tmp->next) { @@ -3289,10 +3295,12 @@ conv = PURPLE_CHAT_CONVERSATION(bnode->conv.conv); } else { char *chat_name; - if (protocol && PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, get_name)) - chat_name = purple_protocol_chat_iface_get_name(protocol, purple_chat_get_components(chat)); - else + if (protocol && PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, get_name)) { + chat_name = purple_protocol_chat_get_name(PURPLE_PROTOCOL_CHAT(protocol), + purple_chat_get_components(chat)); + } else { chat_name = g_strdup(purple_chat_get_name(chat)); + } conv = purple_conversations_find_chat_with_account(chat_name, purple_chat_get_account(chat)); @@ -3311,8 +3319,10 @@ } } - if (protocol) - cur = purple_protocol_chat_iface_info(protocol, purple_account_get_connection(purple_chat_get_account(chat))); + if(protocol) { + cur = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol), + purple_account_get_connection(purple_chat_get_account(chat))); + } while (cur != NULL) {
--- a/pidgin/gtkconv.c Mon Jan 11 01:08:47 2021 -0600 +++ b/pidgin/gtkconv.c Mon Jan 11 01:51:14 2021 -0600 @@ -1114,9 +1114,10 @@ protocol = purple_connection_get_protocol(gc); - if (protocol) - real_who = purple_protocol_chat_iface_get_user_real_name(protocol, gc, + if(protocol) { + real_who = purple_protocol_chat_get_user_real_name(PURPLE_PROTOCOL_CHAT(protocol), gc, purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(conv)), who); + } if(!who && !real_who) return; @@ -1168,9 +1169,10 @@ protocol = purple_connection_get_protocol(gc); - if (protocol) - real_who = purple_protocol_chat_iface_get_user_real_name(protocol, gc, + if(protocol) { + real_who = purple_protocol_chat_get_user_real_name(PURPLE_PROTOCOL_CHAT(protocol), gc, purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(conv)), who); + } purple_serv_send_file(gc, real_who ? real_who : who, NULL); g_free(real_who); @@ -1256,7 +1258,7 @@ can_receive_file = FALSE; } else { gchar *real_who = NULL; - real_who = purple_protocol_chat_iface_get_user_real_name(protocol, gc, + real_who = purple_protocol_chat_get_user_real_name(PURPLE_PROTOCOL_CHAT(protocol), gc, purple_chat_conversation_get_id(chat), who); if (!purple_protocol_xfer_can_receive( @@ -2477,7 +2479,7 @@ purple_protocols_find(purple_account_get_protocol_id(account)); if (purple_account_get_connection(account) != NULL && PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, info_defaults)) { - components = purple_protocol_chat_iface_info_defaults(protocol, purple_account_get_connection(account), + components = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol), purple_account_get_connection(account), purple_conversation_get_name(conv)); } else { components = g_hash_table_new_full(g_str_hash, g_str_equal, @@ -3298,7 +3300,6 @@ PurpleConversation *conv; PidginChatPane *gtkchat; PurpleConnection *gc; - PurpleProtocol *protocol; GtkTreeModel *tm; GtkListStore *ls; GtkTreePath *newpath; @@ -3417,7 +3418,7 @@ else gtk_entry_set_text(GTK_ENTRY(gtkchat->topic_text), ""); - purple_protocol_chat_iface_set_topic(protocol, gc, purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(conv)), + purple_protocol_chat_set_topic(PURPLE_PROTOCOL_CHAT(protocol), gc, purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(conv)), new_topic); g_free(new_topic); @@ -5730,7 +5731,7 @@ PurpleChat *chat = purple_blist_find_chat(purple_conversation_get_account(conv), purple_conversation_get_name(conv)); if (chat == NULL) { PurpleProtocol *protocol = purple_connection_get_protocol(gc); - comps = purple_protocol_chat_iface_info_defaults(protocol, gc, purple_conversation_get_name(conv)); + comps = purple_protocol_chat_info_defaults(PURPLE_PROTOCOL_CHAT(protocol), gc, purple_conversation_get_name(conv)); } else { comps = purple_chat_get_components(chat); }
--- a/pidgin/gtkutils.c Mon Jan 11 01:08:47 2021 -0600 +++ b/pidgin/gtkutils.c Mon Jan 11 01:51:14 2021 -0600 @@ -421,7 +421,7 @@ protocol = purple_connection_get_protocol(conn); if (protocol != NULL) - who = purple_protocol_chat_iface_get_user_real_name(protocol, conn, chat, name); + who = purple_protocol_chat_get_user_real_name(PURPLE_PROTOCOL_CHAT(protocol), conn, chat, name); pidgin_retrieve_user_info(conn, who ? who : name); g_free(who);
--- a/po/POTFILES.in Mon Jan 11 01:08:47 2021 -0600 +++ b/po/POTFILES.in Mon Jan 11 01:51:14 2021 -0600 @@ -257,6 +257,7 @@ libpurple/purplemessage.c libpurple/purplepresence.c libpurple/purpleprotocolattention.c +libpurple/purpleprotocolchat.c libpurple/purpleprotocolclient.c libpurple/purpleprotocolim.c libpurple/purpleprotocolmedia.c