libpurple/purpleprotocolclient.c

changeset 40634
4d3018b00ad4
child 40637
08cb47165790
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purpleprotocolclient.c	Thu Dec 03 04:34:04 2020 -0600
@@ -0,0 +1,258 @@
+/*
+ * 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 "purpleprotocolclient.h"
+
+/******************************************************************************
+ * GObject Implementation
+ *****************************************************************************/
+G_DEFINE_INTERFACE(PurpleProtocolClient, purple_protocol_client, G_TYPE_INVALID)
+
+static void
+purple_protocol_client_default_init(PurpleProtocolClientInterface *iface) {
+}
+
+/******************************************************************************
+ * Public API
+ *****************************************************************************/
+GList *
+purple_protocol_client_get_actions(PurpleProtocolClient *client,
+                                   PurpleConnection *connection)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->get_actions != NULL) {
+		return iface->get_actions(client, connection);
+	}
+
+	return NULL;
+}
+
+const gchar *
+purple_protocol_client_list_emblem(PurpleProtocolClient *client,
+                                   PurpleBuddy *buddy)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->list_emblem != NULL) {
+		return iface->list_emblem(client, buddy);
+	}
+
+	return NULL;
+}
+
+gchar *
+purple_protocol_client_status_text(PurpleProtocolClient *client,
+                                   PurpleBuddy *buddy)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->status_text != NULL) {
+		return iface->status_text(client, buddy);
+	}
+
+	return NULL;
+}
+
+void
+purple_protocol_client_tooltip_text(PurpleProtocolClient *client,
+                                    PurpleBuddy *buddy,
+                                    PurpleNotifyUserInfo *user_info,
+                                    gboolean full)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client));
+	g_return_if_fail(PURPLE_IS_BUDDY(buddy));
+	g_return_if_fail(user_info != NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->tooltip_text != NULL) {
+		iface->tooltip_text(client, buddy, user_info, full);
+	}
+}
+
+GList *
+purple_protocol_client_blist_node_menu(PurpleProtocolClient *client,
+                                       PurpleBlistNode *node)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_BLIST_NODE(node), NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->blist_node_menu != NULL) {
+		return iface->blist_node_menu(client, node);
+	}
+
+	return NULL;
+}
+
+void
+purple_protocol_client_buddy_free(PurpleProtocolClient *client,
+                                  PurpleBuddy *buddy)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client));
+	g_return_if_fail(PURPLE_IS_BUDDY(buddy));
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->buddy_free != NULL) {
+		iface->buddy_free(client, buddy);
+	}
+}
+
+void
+purple_protocol_client_convo_closed(PurpleProtocolClient *client,
+                                    PurpleConnection *connection,
+                                    const gchar *who)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client));
+	g_return_if_fail(PURPLE_IS_CONNECTION(connection));
+	g_return_if_fail(who != NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->convo_closed != NULL) {
+		iface->convo_closed(client, connection, who);
+	}
+}
+
+const gchar *
+purple_protocol_client_normalize(PurpleProtocolClient *client,
+                                 PurpleAccount *account, const gchar *who)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
+	g_return_val_if_fail(who != NULL, NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->normalize != NULL) {
+		return iface->normalize(client, account, who);
+	}
+
+	return NULL;
+}
+
+PurpleChat *
+purple_protocol_client_find_blist_chat(PurpleProtocolClient *client,
+                                       PurpleAccount *account,
+                                       const gchar *name)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
+	g_return_val_if_fail(name != NULL, NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->find_blist_chat != NULL) {
+		return iface->find_blist_chat(client, account, name);
+	}
+
+	return NULL;
+}
+
+gboolean
+purple_protocol_client_offline_message(PurpleProtocolClient *client,
+                                       PurpleBuddy *buddy)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), FALSE);
+	g_return_val_if_fail(PURPLE_IS_BUDDY(buddy), FALSE);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->offline_message != NULL) {
+		return iface->offline_message(client, buddy);
+	}
+
+	return FALSE;
+}
+
+GHashTable *
+purple_protocol_client_get_account_text_table(PurpleProtocolClient *client,
+                                              PurpleAccount *account)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->get_account_text_table != NULL) {
+		return iface->get_account_text_table(client, account);
+	}
+
+	return NULL;
+}
+
+PurpleMood *
+purple_protocol_client_get_moods(PurpleProtocolClient *client,
+                                 PurpleAccount *account)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), NULL);
+	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->get_moods != NULL) {
+		return iface->get_moods(client, account);
+	}
+
+	return NULL;
+}
+
+gssize
+purple_protocol_client_get_max_message_size(PurpleProtocolClient *client,
+                                            PurpleConversation *conv)
+{
+	PurpleProtocolClientInterface *iface = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL_CLIENT(client), 0);
+	g_return_val_if_fail(PURPLE_IS_CONVERSATION(conv), 0);
+
+	iface = PURPLE_PROTOCOL_CLIENT_GET_IFACE(client);
+	if(iface != NULL && iface->get_max_message_size != NULL) {
+		return iface->get_max_message_size(client, conv);
+	}
+
+	return 0;
+}

mercurial