Remove PurpleProtocolChat
This finally removes PurpleProtocolChat as it is being replaced by
PurpleProtocolConversation.
Testing Done:
Had the turtles check in on things and ran the app.
Reviewed at https://reviews.imfreedom.org/r/3115/
--- a/ChangeLog.API Sat Apr 13 21:50:34 2024 -0500
+++ b/ChangeLog.API Sat Apr 13 21:59:37 2024 -0500
@@ -367,6 +367,7 @@
* purple_attention_type_get_unlocalized_name
* purple_base64_*. Use g_base64_* instead
+ * purple_blist_find_chat * purple_blist_get_ui_data
--- a/libpurple/buddylist.c Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/buddylist.c Sat Apr 13 21:59:37 2024 -0500
@@ -30,7 +30,6 @@
#include "purpleaccountmanager.h"
#include "purpleprivate.h"
#include "purpleprotocol.h"
-#include "purpleprotocolchat.h"
#include "purpleprotocolclient.h"
#include "purpleconversation.h"
@@ -1705,66 +1704,6 @@
-purple_blist_find_chat(PurpleAccount *account, const char *name)
- PurpleProtocol *protocol = NULL;
- PurpleProtocolChatEntry *pce;
- PurpleBlistNode *node, *group;
- g_return_val_if_fail(PURPLE_IS_BUDDY_LIST(purplebuddylist), NULL);
- g_return_val_if_fail((name != NULL) && (*name != '\0'), NULL);
- if (!purple_account_is_connected(account))
- protocol = purple_account_get_protocol(account);
- if(PURPLE_IS_PROTOCOL_CLIENT(protocol)) {
- chat = purple_protocol_client_find_blist_chat(PURPLE_PROTOCOL_CLIENT(protocol),
- if(PURPLE_IS_CHAT(chat)) {
- normname = g_strdup(purple_normalize(account, name));
- for (group = purple_blist_get_default_root(); group != NULL;
- for (node = group->child; node != NULL; node = node->next) {
- if (PURPLE_IS_CHAT(node)) {
- chat = (PurpleChat*)node;
- if (account != purple_chat_get_account(chat))
- parts = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol),
- purple_account_get_connection(purple_chat_get_account(chat)));
- chat_name = g_hash_table_lookup(purple_chat_get_components(chat),
- g_list_free_full(parts, g_free);
- if (purple_chat_get_account(chat) == account && chat_name != NULL &&
- purple_strequal(purple_normalize(account, chat_name), normname)) {
void purple_blist_add_account(PurpleAccount *account)
PurpleBuddyListClass *klass = NULL;
--- a/libpurple/buddylist.h Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/buddylist.h Sat Apr 13 21:59:37 2024 -0500
@@ -476,20 +476,6 @@
PurpleGroup *purple_blist_get_default_group(void);
- * purple_blist_find_chat:
- * @account: The chat's account.
- * @name: The chat's name.
- * Finds a chat by name.
- * Returns: (transfer none): The chat, or %NULL if the chat does not exist.
-PurpleChat *purple_blist_find_chat(PurpleAccount *account, const char *name);
* purple_blist_add_account:
--- a/libpurple/chat.c Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/chat.c Sat Apr 13 21:59:37 2024 -0500
@@ -21,7 +21,6 @@
-#include "purpleprotocolchat.h"
typedef struct _PurpleChatPrivate PurpleChatPrivate;
@@ -69,31 +68,7 @@
if ((priv->alias != NULL) && (*priv->alias != '\0'))
- return purple_chat_get_name_only(chat);
-const char *purple_chat_get_name_only(PurpleChat *chat)
- PurpleChatPrivate *priv = NULL;
- PurpleProtocol *protocol = NULL;
- g_return_val_if_fail(PURPLE_IS_CHAT(chat), NULL);
- priv = purple_chat_get_instance_private(chat);
- protocol = purple_account_get_protocol(priv->account);
- if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, info)) {
- PurpleProtocolChatEntry *pce;
- GList *parts = purple_protocol_chat_info(PURPLE_PROTOCOL_CHAT(protocol),
- purple_account_get_connection(priv->account));
- ret = g_hash_table_lookup(priv->components, pce->identifier);
- g_list_free_full(parts, g_free);
--- a/libpurple/chat.h Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/chat.h Sat Apr 13 21:59:37 2024 -0500
@@ -106,19 +106,6 @@
const char *purple_chat_get_name(PurpleChat *chat);
- * purple_chat_get_name_only:
- * @chat: The chat whose name will be returned.
- * Returns the name of the chat
- * Returns: The first component value.
-const char *purple_chat_get_name_only(PurpleChat *chat);
--- a/libpurple/meson.build Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/meson.build Sat Apr 13 21:59:37 2024 -0500
@@ -70,7 +70,6 @@
'purplepresencemanager.c',
'purpleprotocolactions.c',
- 'purpleprotocolchat.c',
'purpleprotocolclient.c',
'purpleprotocolcontacts.c',
'purpleprotocolconversation.c',
@@ -182,7 +181,6 @@
'purplepresencemanager.h',
'purpleprotocolactions.h',
- 'purpleprotocolchat.h',
'purpleprotocolclient.h',
'purpleprotocolcontacts.h',
'purpleprotocolconversation.h',
--- a/libpurple/plugins/purple-toast/meson.build Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/plugins/purple-toast/meson.build Sat Apr 13 21:59:37 2024 -0500
@@ -3,6 +3,8 @@
gnu_symbol_visibility : 'hidden',
dependencies : [libpurple_dep],
- install : true, install_dir : PURPLE_PLUGINDIR)
+ install_dir : PURPLE_PLUGINDIR, + build_by_default : false) devenv.append('PURPLE_PLUGIN_PATH', meson.current_build_dir())
--- a/libpurple/purpleprotocolchat.c Sat Apr 13 21:50:34 2024 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
- * 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
- * This library 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)
- * This library 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
- * You should have received a copy of the GNU General Public License along with
- * this library; if not, see <https://www.gnu.org/licenses/>.
-#include "purpleprotocolchat.h"
-/******************************************************************************
- * GObject Implementation
- *****************************************************************************/
-G_DEFINE_INTERFACE(PurpleProtocolChat, purple_protocol_chat,
-purple_protocol_chat_default_init(G_GNUC_UNUSED PurpleProtocolChatInterface *iface)
-/******************************************************************************
- *****************************************************************************/
-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);
-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);
-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);
-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);
-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);
-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);
-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);
-purple_protocol_chat_send(PurpleProtocolChat *protocol_chat,
- PurpleConnection *connection, gint id,
- PurpleConversation *conversation,
- 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, conversation,
-purple_protocol_chat_get_user_real_name(PurpleProtocolChat *protocol_chat,
- PurpleConnection *connection, gint id,
- 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);
-purple_protocol_chat_set_topic(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->set_topic != NULL) {
- iface->set_topic(protocol_chat, connection, id, topic);
--- a/libpurple/purpleprotocolchat.h Sat Apr 13 21:50:34 2024 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,263 +0,0 @@
- * 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
- * This library 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)
- * This library 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
- * You should have received a copy of the GNU General Public License along with
- * this library; 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"
-#ifndef PURPLE_PROTOCOL_CHAT_H
-#define PURPLE_PROTOCOL_CHAT_H
-#include <glib-object.h>
-#include "purpleconversation.h"
-#include "purplemessage.h"
-#include "purpleprotocol.h"
-#include "purpleversion.h"
-#define PURPLE_TYPE_PROTOCOL_CHAT (purple_protocol_chat_get_type())
- * #PurpleProtocolChat describes the API that protocols need to implement for
- * handling multiple user conversations.
-G_DECLARE_INTERFACE(PurpleProtocolChat, purple_protocol_chat, PURPLE,
- PROTOCOL_CHAT, PurpleProtocol)
-typedef struct _PurpleProtocolChatEntry PurpleProtocolChatEntry;
- * PurpleProtocolChatEntry:
- * @label: User-friendly name of the entry
- * @identifier: Used by the protocol to identify the option
- * @required: True if it's required
- * @is_int: True if the entry expects an integer
- * @min: Minimum value in case of integer
- * @max: Maximum value in case of integer
- * @secret: True if the entry is secret (password)
- * Represents an entry containing information that must be supplied by the
- * user when joining a chat.
-struct _PurpleProtocolChatEntry {
- const char *identifier;
-struct _PurpleProtocolChatInterface {
- 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, PurpleConversation *conversation, 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);
- * 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
- * Returns: (transfer full) (element-type PurpleProtocolChatEntry): The list
- * of #PurpleProtocolChatEntry's that are used to join a chat.
-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.
-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.
-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.
-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.
-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.
-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.
-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.
- * @conversation: The [class@Conversation] of the chat.
- * @message: The message to send.
- * Sends @message to the chat identified by @id.
- * Returns: 0 on success, non-zero on failure.
-gint purple_protocol_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, PurpleConversation *conversation, PurpleMessage *message);
- * purple_protocol_chat_get_user_real_name:
- * @protocol_chat: The #PurpleProtocolChat instance.
- * @connection: The #PurpleConnection instance.
- * @id: The id of the chat.
- * Gets the real name of @who.
- * Returns: (transfer full): The realname of @who.
-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.
-void purple_protocol_chat_set_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *connection, gint id, const gchar *topic);
-#endif /* PURPLE_PROTOCOL_CHAT_H */
--- a/libpurple/roomlist.c Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/roomlist.c Sat Apr 13 21:59:37 2024 -0500
@@ -178,7 +178,7 @@
name = purple_roomlist_room_get_name(room);
g_hash_table_replace(adjusted, "name", (gpointer)name);
- purple_serv_join_chat(connection, adjusted);
+ /* purple_serv_join_chat(connection, adjusted); */ g_hash_table_destroy(adjusted);
--- a/libpurple/server.c Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/server.c Sat Apr 13 21:59:37 2024 -0500
@@ -33,7 +33,6 @@
#include "purpleconversationmanager.h"
#include "purpleprivate.h"
#include "purpleprotocol.h"
-#include "purpleprotocolchat.h"
#include "purpleprotocolserver.h"
@@ -68,13 +67,3 @@
purple_group_get_name(dest));
-void purple_serv_join_chat(PurpleConnection *gc, GHashTable *data)
- PurpleProtocol *protocol;
- protocol = purple_connection_get_protocol(gc);
- purple_protocol_chat_join(PURPLE_PROTOCOL_CHAT(protocol), gc, data);
--- a/libpurple/server.h Sat Apr 13 21:50:34 2024 -0500
+++ b/libpurple/server.h Sat Apr 13 21:59:37 2024 -0500
@@ -29,7 +29,6 @@
-#include "purplemessage.h"
#include "purpleversion.h"
@@ -47,23 +46,6 @@
void purple_serv_move_buddy(PurpleBuddy *buddy, PurpleGroup *orig, PurpleGroup *dest);
-/******************************************************************************
- *****************************************************************************/
- * purple_serv_join_chat:
- * @gc: The #PurpleConnection
- * @data: The hash function should be g_str_hash() and the equal
- * function should be g_str_equal().
- * Joins the chat described by the components in @data.
-void purple_serv_join_chat(PurpleConnection *gc, GHashTable *data);
#endif /* PURPLE_SERVER_H */
--- a/po/POTFILES.in Sat Apr 13 21:50:34 2024 -0500
+++ b/po/POTFILES.in Sat Apr 13 21:59:37 2024 -0500
@@ -64,7 +64,6 @@
libpurple/purpleplugininfo.c
libpurple/purplepresence.c
libpurple/purpleprotocol.c
-libpurple/purpleprotocolchat.c
libpurple/purpleprotocolclient.c
libpurple/purpleprotocolmanager.c
libpurple/purpleprotocolmedia.c