libpurple/conversationtypes.c

changeset 40506
cb26b9c6d4d0
parent 40441
f23c7e772667
child 40517
5211982886af
--- a/libpurple/conversationtypes.c	Mon Aug 10 19:59:56 2020 -0500
+++ b/libpurple/conversationtypes.c	Thu Aug 13 18:29:17 2020 -0500
@@ -28,37 +28,6 @@
 #include "enums.h"
 #include "purpleprivate.h"
 
-#define SEND_TYPED_TIMEOUT_SECONDS 5
-
-/**************************************************************************/
-/* PurpleIMConversation                                                   */
-/**************************************************************************/
-
-/*
- * Data specific to Instant Messages.
- */
-typedef struct
-{
-	PurpleIMTypingState typing_state;  /* The current typing state.    */
-	guint  typing_timeout;             /* The typing timer handle.     */
-	time_t type_again;                 /* The type again time.         */
-	guint  send_typed_timeout;         /* The type again timer handle. */
-	PurpleBuddyIcon *icon;             /* The buddy icon.              */
-} PurpleIMConversationPrivate;
-
-/* IM Property enums */
-enum {
-	IM_PROP_0,
-	IM_PROP_TYPING_STATE,
-	IM_PROP_ICON,
-	IM_PROP_LAST
-};
-
-static GParamSpec *im_properties[IM_PROP_LAST];
-
-G_DEFINE_TYPE_WITH_PRIVATE(PurpleIMConversation, purple_im_conversation,
-		PURPLE_TYPE_CONVERSATION);
-
 /**************************************************************************/
 /* PurpleChatConversation                                                 */
 /**************************************************************************/
@@ -149,434 +118,6 @@
 		PurpleChatUser *b);
 
 /**************************************************************************
- * IM Conversation API
- **************************************************************************/
-static gboolean
-reset_typing_cb(gpointer data)
-{
-	PurpleIMConversation *im = (PurpleIMConversation *)data;
-
-	purple_im_conversation_set_typing_state(im, PURPLE_IM_NOT_TYPING);
-	purple_im_conversation_stop_typing_timeout(im);
-
-	return FALSE;
-}
-
-static gboolean
-send_typed_cb(gpointer data)
-{
-	PurpleIMConversation *im = PURPLE_IM_CONVERSATION(data);
-	PurpleConnection *gc;
-	const char *name;
-
-	g_return_val_if_fail(im != NULL, FALSE);
-
-	gc   = purple_conversation_get_connection(PURPLE_CONVERSATION(im));
-	name = purple_conversation_get_name(PURPLE_CONVERSATION(im));
-
-	if (gc != NULL && name != NULL) {
-		/* We set this to 1 so that PURPLE_IM_TYPING will be sent
-		 * if the Purple user types anything else.
-		 */
-		purple_im_conversation_set_type_again(im, 1);
-
-		purple_serv_send_typing(gc, name, PURPLE_IM_TYPED);
-
-		purple_debug(PURPLE_DEBUG_MISC, "conversationtypes", "typed...\n");
-	}
-
-	return FALSE;
-}
-
-void
-purple_im_conversation_set_icon(PurpleIMConversation *im, PurpleBuddyIcon *icon)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	priv = purple_im_conversation_get_instance_private(im);
-	if (priv->icon != icon)
-	{
-		purple_buddy_icon_unref(priv->icon);
-
-		priv->icon = (icon == NULL ? NULL : purple_buddy_icon_ref(icon));
-
-		g_object_notify_by_pspec(G_OBJECT(im), im_properties[IM_PROP_ICON]);
-	}
-
-	purple_conversation_update(PURPLE_CONVERSATION(im),
-							 PURPLE_CONVERSATION_UPDATE_ICON);
-}
-
-PurpleBuddyIcon *
-purple_im_conversation_get_icon(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_IM_CONVERSATION(im), NULL);
-
-	priv = purple_im_conversation_get_instance_private(im);
-	return priv->icon;
-}
-
-void
-purple_im_conversation_set_typing_state(PurpleIMConversation *im, PurpleIMTypingState state)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-	PurpleAccount *account;
-	const char *name;
-
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	priv = purple_im_conversation_get_instance_private(im);
-	name = purple_conversation_get_name(PURPLE_CONVERSATION(im));
-	account = purple_conversation_get_account(PURPLE_CONVERSATION(im));
-
-	if (priv->typing_state != state)
-	{
-		priv->typing_state = state;
-
-		g_object_notify_by_pspec(G_OBJECT(im),
-				im_properties[IM_PROP_TYPING_STATE]);
-
-		switch (state)
-		{
-			case PURPLE_IM_TYPING:
-				purple_signal_emit(purple_conversations_get_handle(),
-								   "buddy-typing", account, name);
-				break;
-			case PURPLE_IM_TYPED:
-				purple_signal_emit(purple_conversations_get_handle(),
-								   "buddy-typed", account, name);
-				break;
-			case PURPLE_IM_NOT_TYPING:
-				purple_signal_emit(purple_conversations_get_handle(),
-								   "buddy-typing-stopped", account, name);
-				break;
-		}
-
-		purple_im_conversation_update_typing(im);
-	}
-}
-
-PurpleIMTypingState
-purple_im_conversation_get_typing_state(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_IM_CONVERSATION(im), 0);
-
-	priv = purple_im_conversation_get_instance_private(im);
-	return priv->typing_state;
-}
-
-void
-purple_im_conversation_start_typing_timeout(PurpleIMConversation *im, int timeout)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	priv = purple_im_conversation_get_instance_private(im);
-	if (priv->typing_timeout > 0)
-		purple_im_conversation_stop_typing_timeout(im);
-
-	priv->typing_timeout = g_timeout_add_seconds(timeout, reset_typing_cb, im);
-}
-
-void
-purple_im_conversation_stop_typing_timeout(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	priv = purple_im_conversation_get_instance_private(im);
-	if (priv->typing_timeout == 0)
-		return;
-
-	g_source_remove(priv->typing_timeout);
-	priv->typing_timeout = 0;
-}
-
-guint
-purple_im_conversation_get_typing_timeout(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_IM_CONVERSATION(im), 0);
-
-	priv = purple_im_conversation_get_instance_private(im);
-	return priv->typing_timeout;
-}
-
-void
-purple_im_conversation_set_type_again(PurpleIMConversation *im, unsigned int val)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	priv = purple_im_conversation_get_instance_private(im);
-	if (val == 0)
-		priv->type_again = 0;
-	else
-		priv->type_again = time(NULL) + val;
-}
-
-time_t
-purple_im_conversation_get_type_again(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_IM_CONVERSATION(im), 0);
-
-	priv = purple_im_conversation_get_instance_private(im);
-	return priv->type_again;
-}
-
-void
-purple_im_conversation_start_send_typed_timeout(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	priv = purple_im_conversation_get_instance_private(im);
-	priv->send_typed_timeout = g_timeout_add_seconds(SEND_TYPED_TIMEOUT_SECONDS,
-	                                                    send_typed_cb, im);
-}
-
-void
-purple_im_conversation_stop_send_typed_timeout(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	priv = purple_im_conversation_get_instance_private(im);
-	if (priv->send_typed_timeout == 0)
-		return;
-
-	g_source_remove(priv->send_typed_timeout);
-	priv->send_typed_timeout = 0;
-}
-
-guint
-purple_im_conversation_get_send_typed_timeout(PurpleIMConversation *im)
-{
-	PurpleIMConversationPrivate *priv = NULL;
-
-	g_return_val_if_fail(PURPLE_IS_IM_CONVERSATION(im), 0);
-
-	priv = purple_im_conversation_get_instance_private(im);
-	return priv->send_typed_timeout;
-}
-
-void
-purple_im_conversation_update_typing(PurpleIMConversation *im)
-{
-	g_return_if_fail(PURPLE_IS_IM_CONVERSATION(im));
-
-	purple_conversation_update(PURPLE_CONVERSATION(im),
-							 PURPLE_CONVERSATION_UPDATE_TYPING);
-}
-
-static void
-im_conversation_write_message(PurpleConversation *conv, PurpleMessage *msg)
-{
-	PurpleIMConversation *im = PURPLE_IM_CONVERSATION(conv);
-	gboolean is_recv;
-
-	g_return_if_fail(im != NULL);
-	g_return_if_fail(msg != NULL);
-
-	is_recv = (purple_message_get_flags(msg) & PURPLE_MESSAGE_RECV);
-
-	if (is_recv)
-		purple_im_conversation_set_typing_state(im, PURPLE_IM_NOT_TYPING);
-
-	_purple_conversation_write_common(conv, msg);
-}
-
-/**************************************************************************
- * GObject code for IMs
- **************************************************************************/
-
-/* Set method for GObject properties */
-static void
-purple_im_conversation_set_property(GObject *obj, guint param_id, const GValue *value,
-		GParamSpec *pspec)
-{
-	PurpleIMConversation *im = PURPLE_IM_CONVERSATION(obj);
-
-	switch (param_id) {
-		case IM_PROP_TYPING_STATE:
-			purple_im_conversation_set_typing_state(im, g_value_get_enum(value));
-			break;
-		case IM_PROP_ICON:
-			purple_im_conversation_set_icon(im, g_value_get_pointer(value));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-/* Get method for GObject properties */
-static void
-purple_im_conversation_get_property(GObject *obj, guint param_id, GValue *value,
-		GParamSpec *pspec)
-{
-	PurpleIMConversation *im = PURPLE_IM_CONVERSATION(obj);
-
-	switch (param_id) {
-		case IM_PROP_TYPING_STATE:
-			g_value_set_enum(value, purple_im_conversation_get_typing_state(im));
-			break;
-		case IM_PROP_ICON:
-			g_value_set_pointer(value, purple_im_conversation_get_icon(im));
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-			break;
-	}
-}
-
-/* GObject initialization function */
-static void purple_im_conversation_init(PurpleIMConversation *im)
-{
-}
-
-/* Called when done constructing */
-static void
-purple_im_conversation_constructed(GObject *object)
-{
-	PurpleIMConversation *im = PURPLE_IM_CONVERSATION(object);
-	PurpleAccount *account;
-	PurpleBuddyIcon *icon;
-	gchar *name;
-
-	G_OBJECT_CLASS(purple_im_conversation_parent_class)->
-			constructed(object);
-
-	g_object_get(object,
-			"account", &account,
-			"name",    &name,
-			NULL);
-
-	if ((icon = purple_buddy_icons_find(account, name)))
-	{
-		purple_im_conversation_set_icon(im, icon);
-		/* purple_im_conversation_set_icon refs the icon. */
-		purple_buddy_icon_unref(icon);
-	}
-
-	if (purple_prefs_get_bool("/purple/logging/log_ims"))
-		purple_conversation_set_logging(PURPLE_CONVERSATION(im), TRUE);
-
-	g_object_unref(account);
-	g_free(name);
-}
-
-/* GObject dispose function */
-static void
-purple_im_conversation_dispose(GObject *object)
-{
-	PurpleIMConversationPrivate *priv =
-			purple_im_conversation_get_instance_private(
-					PURPLE_IM_CONVERSATION(object));
-
-	if (priv->icon) {
-		purple_buddy_icon_unref(priv->icon);
-		priv->icon = NULL;
-	}
-
-	G_OBJECT_CLASS(purple_im_conversation_parent_class)->dispose(object);
-}
-
-/* GObject finalize function */
-static void
-purple_im_conversation_finalize(GObject *object)
-{
-	PurpleIMConversation *im = PURPLE_IM_CONVERSATION(object);
-	PurpleConnection *gc = purple_conversation_get_connection(PURPLE_CONVERSATION(im));
-	PurpleProtocol *protocol = NULL;
-	const char *name = purple_conversation_get_name(PURPLE_CONVERSATION(im));
-
-	if (gc != NULL)
-	{
-		/* Still connected */
-		protocol = purple_connection_get_protocol(gc);
-
-		if (purple_prefs_get_bool("/purple/conversations/im/send_typing"))
-			purple_serv_send_typing(gc, name, PURPLE_IM_NOT_TYPING);
-
-		purple_protocol_client_iface_convo_closed(protocol, gc, name);
-	}
-
-	purple_im_conversation_stop_typing_timeout(im);
-	purple_im_conversation_stop_send_typed_timeout(im);
-
-	G_OBJECT_CLASS(purple_im_conversation_parent_class)->finalize(object);
-}
-
-/* Class initializer function */
-static void purple_im_conversation_class_init(PurpleIMConversationClass *klass)
-{
-	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
-	PurpleConversationClass *conv_class = PURPLE_CONVERSATION_CLASS(klass);
-
-	obj_class->dispose = purple_im_conversation_dispose;
-	obj_class->finalize = purple_im_conversation_finalize;
-	obj_class->constructed = purple_im_conversation_constructed;
-
-	/* Setup properties */
-	obj_class->get_property = purple_im_conversation_get_property;
-	obj_class->set_property = purple_im_conversation_set_property;
-
-	conv_class->write_message = im_conversation_write_message;
-
-	im_properties[IM_PROP_TYPING_STATE] =
-	        g_param_spec_enum("typing-state", "Typing state",
-	                          "Status of the user's typing of a message.",
-	                          PURPLE_TYPE_IM_TYPING_STATE, PURPLE_IM_NOT_TYPING,
-	                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	im_properties[IM_PROP_ICON] = g_param_spec_pointer(
-	        "icon", "Buddy icon", "The buddy icon for the IM.",
-	        G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
-	g_object_class_install_properties(obj_class, IM_PROP_LAST, im_properties);
-}
-
-PurpleIMConversation *
-purple_im_conversation_new(PurpleAccount *account, const char *name)
-{
-	PurpleIMConversation *im;
-	PurpleConnection *gc;
-
-	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
-	g_return_val_if_fail(name != NULL, NULL);
-
-	/* Check if this conversation already exists. */
-	if ((im = purple_conversations_find_im_with_account(name, account)) != NULL)
-		return im;
-
-	gc = purple_account_get_connection(account);
-	g_return_val_if_fail(PURPLE_IS_CONNECTION(gc), NULL);
-
-	im = g_object_new(PURPLE_TYPE_IM_CONVERSATION,
-			"account", account,
-			"name",    name,
-			"title",   name,
-			NULL);
-
-	return im;
-}
-
-/**************************************************************************
  * Chat Conversation API
  **************************************************************************/
 static guint

mercurial