Reconsidered characters count callback for prpl API: make it per-conversation and distinguish infinite from undefined

Fri, 30 Aug 2013 14:29:45 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Fri, 30 Aug 2013 14:29:45 +0200
changeset 34321
f60fcab02bd4
parent 34320
6c217475a114
child 34322
39acbde408f3
child 34904
dee62fd8249d

Reconsidered characters count callback for prpl API: make it per-conversation and distinguish infinite from undefined

libpurple/connection.c file | annotate | diff | comparison | revisions
libpurple/connection.h file | annotate | diff | comparison | revisions
libpurple/conversation.c file | annotate | diff | comparison | revisions
libpurple/conversation.h file | annotate | diff | comparison | revisions
libpurple/protocols/bonjour/bonjour.c file | annotate | diff | comparison | revisions
libpurple/protocols/gg/gg.c file | annotate | diff | comparison | revisions
libpurple/protocols/irc/irc.c file | annotate | diff | comparison | revisions
libpurple/protocols/msn/msn.c file | annotate | diff | comparison | revisions
libpurple/protocols/novell/novell.c file | annotate | diff | comparison | revisions
libpurple/protocols/oscar/libicq.c file | annotate | diff | comparison | revisions
libpurple/protocols/oscar/oscar.c file | annotate | diff | comparison | revisions
libpurple/protocols/oscar/oscarcommon.h file | annotate | diff | comparison | revisions
libpurple/protocols/yahoo/libymsg.c file | annotate | diff | comparison | revisions
libpurple/protocols/yahoo/libymsg.h file | annotate | diff | comparison | revisions
libpurple/prpl.h file | annotate | diff | comparison | revisions
--- a/libpurple/connection.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/connection.c	Fri Aug 30 14:29:45 2013 +0200
@@ -631,26 +631,6 @@
 	gc->last_received = time(NULL);
 }
 
-gsize
-purple_connection_get_max_message_size(PurpleConnection *gc)
-{
-	PurplePlugin *prpl;
-	PurplePluginProtocolInfo *prpl_info;
-
-	g_return_val_if_fail(gc != NULL, 0);
-
-	prpl = purple_connection_get_prpl(gc);
-	g_return_val_if_fail(prpl != NULL, 0);
-
-	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
-	g_return_val_if_fail(prpl_info != NULL, 0);
-
-	if (!PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_max_message_size))
-		return 0;
-
-	return prpl_info->get_max_message_size(gc);
-}
-
 void
 purple_connections_disconnect_all(void)
 {
--- a/libpurple/connection.h	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/connection.h	Fri Aug 30 14:29:45 2013 +0200
@@ -452,18 +452,6 @@
  */
 void purple_connection_update_last_received(PurpleConnection *gc);
 
-/**
- * Gets the maximum message size in bytes for the protocol. It may depend on
- * connection-specific variables (like protocol version).
- *
- * @see PurplePluginProtocolInfo#get_max_message_size
- *
- * @param gc The connection to query.
- * @return   Maximum message size, or 0 if unspecified or infinite.
- */
-gsize
-purple_connection_get_max_message_size(PurpleConnection *gc);
-
 /*@}*/
 
 /**************************************************************************/
--- a/libpurple/conversation.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/conversation.c	Fri Aug 30 14:29:45 2013 +0200
@@ -2513,6 +2513,27 @@
 	return (status == PURPLE_CMD_STATUS_OK);
 }
 
+gssize
+purple_conversation_get_max_message_size(PurpleConversation *conv)
+{
+	PurplePlugin *prpl;
+	PurplePluginProtocolInfo *prpl_info;
+
+	g_return_val_if_fail(conv != NULL, 0);
+
+	prpl = purple_conversation_get_connection(
+		purple_connection_get_prpl(gc));
+	g_return_val_if_fail(prpl != NULL, 0);
+
+	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
+	g_return_val_if_fail(prpl_info != NULL, 0);
+
+	if (!PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_max_message_size))
+		return 0;
+
+	return prpl_info->get_max_message_size(conv);
+}
+
 void *
 purple_conversations_get_handle(void)
 {
--- a/libpurple/conversation.h	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/conversation.h	Fri Aug 30 14:29:45 2013 +0200
@@ -1374,6 +1374,18 @@
  */
 gboolean purple_conversation_do_command(PurpleConversation *conv, const gchar *cmdline, const gchar *markup, gchar **error);
 
+/**
+ * Gets the maximum message size in bytes for the conversation.
+ *
+ * @see PurplePluginProtocolInfo#get_max_message_size
+ *
+ * @param conv The conversation to query.
+ *
+ * @return Maximum message size, 0 if unspecified, -1 for infinite.
+ */
+gssize
+purple_conversation_get_max_message_size(PurpleConversation *conv);
+
 /*@}*/
 
 /**************************************************************************/
--- a/libpurple/protocols/bonjour/bonjour.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/bonjour/bonjour.c	Fri Aug 30 14:29:45 2013 +0200
@@ -470,12 +470,10 @@
 	return (buddy != NULL && purple_buddy_get_protocol_data(buddy) != NULL);
 }
 
-static gsize
-bonjour_get_max_message_size(PurpleConnection *gc)
+static gssize
+bonjour_get_max_message_size(PurpleConversation *conv)
 {
-	/* It looks, like the message length is practically unlimited (I've
-	 * tried 5MB). */
-	return 0;
+	return -1; /* 5MB successfully tested. */
 }
 
 static gboolean
--- a/libpurple/protocols/gg/gg.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/gg/gg.c	Fri Aug 30 14:29:45 2013 +0200
@@ -1369,10 +1369,10 @@
 	return table;
 }
 
-static gsize
-ggp_get_max_message_size(PurpleConnection *gc)
+static gssize
+ggp_get_max_message_size(PurpleConversation *conv)
 {
-	/* it may depend on protocol version or other factors - check it */
+	/* TODO: it may depend on protocol version or other factors */
 	return 1232;
 }
 
--- a/libpurple/protocols/irc/irc.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/irc/irc.c	Fri Aug 30 14:29:45 2013 +0200
@@ -911,10 +911,11 @@
 		irc_cmd_ping(irc, NULL, NULL, NULL);
 }
 
-static gsize
-irc_get_max_message_size(PurpleConnection *gc)
+static gssize
+irc_get_max_message_size(PurpleConversation *conv)
 {
-	/* got from pidgin-otr */
+	/* TODO: this static value is got from pidgin-otr, but it depends on
+	 * some factors, for example IRC channel name. */
 	return 417;
 }
 
--- a/libpurple/protocols/msn/msn.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/msn/msn.c	Fri Aug 30 14:29:45 2013 +0200
@@ -2882,10 +2882,10 @@
 	return FALSE;
 }
 
-static gsize
-msn_get_max_message_size(PurpleConnection *gc)
+static gssize
+msn_get_max_message_size(PurpleConversation *conv)
 {
-	/* pidgin-otr says: 1409 */
+	/* XXX: pidgin-otr says 1409. Verify and document it. */
 	return 1525 - strlen(VERSION);
 }
 
--- a/libpurple/protocols/novell/novell.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/novell/novell.c	Fri Aug 30 14:29:45 2013 +0200
@@ -3465,10 +3465,10 @@
 	_check_for_disconnect(user, rc);
 }
 
-static gsize
-novell_get_max_message_size(PurpleConnection *gc)
+static gssize
+novell_get_max_message_size(PurpleConversation *conv)
 {
-	/* got from pidgin-otr */
+	/* XXX: got from pidgin-otr - verify and document it */
 	return 1792;
 }
 
--- a/libpurple/protocols/oscar/libicq.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/oscar/libicq.c	Fri Aug 30 14:29:45 2013 +0200
@@ -36,10 +36,10 @@
 	return table;
 }
 
-static gsize
-icq_get_max_message_size(PurpleConnection *gc)
+static gssize
+icq_get_max_message_size(PurpleConversation *conv)
 {
-	/* got from pidgin-otr */
+	/* XXX: got from pidgin-otr - verify and document it */
 	return 2346;
 }
 
--- a/libpurple/protocols/oscar/oscar.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/oscar/oscar.c	Fri Aug 30 14:29:45 2013 +0200
@@ -5433,10 +5433,10 @@
 	return TRUE;
 }
 
-gsize
-oscar_get_max_message_size(PurpleConnection *gc)
+gssize
+oscar_get_max_message_size(PurpleConversation *conv)
 {
-	/* got from pidgin-otr */
+	/* XXX: got from pidgin-otr - verify and document it */
 	return 2343;
 }
 
--- a/libpurple/protocols/oscar/oscarcommon.h	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/oscar/oscarcommon.h	Fri Aug 30 14:29:45 2013 +0200
@@ -102,6 +102,6 @@
 void oscar_send_file(PurpleConnection *gc, const char *who, const char *file);
 PurpleXfer *oscar_new_xfer(PurpleConnection *gc, const char *who);
 gboolean oscar_offline_message(const PurpleBuddy *buddy);
-gsize oscar_get_max_message_size(PurpleConnection *gc);
+gssize oscar_get_max_message_size(PurpleConversation *conv);
 GList *oscar_actions(PurplePlugin *plugin, gpointer context);
 void oscar_init(PurplePlugin *plugin, gboolean is_icq);
--- a/libpurple/protocols/yahoo/libymsg.c	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/yahoo/libymsg.c	Fri Aug 30 14:29:45 2013 +0200
@@ -5134,9 +5134,8 @@
 	return list;
 }
 
-gsize
-yahoo_get_max_message_size(PurpleConnection *gc)
+gssize
+yahoo_get_max_message_size(PurpleConversation *conv)
 {
-	/* got from pidgin-otr */
-	return 799;
+	return YAHOO_MAX_MESSAGE_LENGTH_CHARS;
 }
--- a/libpurple/protocols/yahoo/libymsg.h	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/protocols/yahoo/libymsg.h	Fri Aug 30 14:29:45 2013 +0200
@@ -384,7 +384,7 @@
 
 GList *yahoo_actions(PurplePlugin *plugin, gpointer context);
 void yahoopurple_register_commands(void);
-gsize yahoo_get_max_message_size(PurpleConnection *gc);
+gssize yahoo_get_max_message_size(PurpleConversation *conv);
 
 PurpleCmdRet yahoopurple_cmd_buzz(PurpleConversation *c, const gchar *cmd, gchar **args, gchar **error, void *data);
 PurpleCmdRet yahoopurple_cmd_chat_join(PurpleConversation *conv, const char *cmd, char **args, char **error, void *data);
--- a/libpurple/prpl.h	Thu Aug 29 23:01:58 2013 -0700
+++ b/libpurple/prpl.h	Fri Aug 30 14:29:45 2013 +0200
@@ -630,8 +630,10 @@
 	                         PurpleGetPublicAliasFailureCallback failure_cb);
 
 	/**
-	 * Gets the maximum message size in bytes for the protocol. It may
-	 * depend on connection-specific variables (like protocol version).
+	 * Gets the maximum message size in bytes for the conversation.
+	 *
+	 * It may depend on connection-specific or conversation-specific
+	 * variables, like channel or buddy's name length.
 	 *
 	 * This value is intended for plaintext message, the exact value may be
 	 * lower because of:
@@ -639,10 +641,12 @@
 	 *  - formatting,
 	 *  - used special characters.
 	 *
-	 * @param gc The connection to query, or NULL to get safe minimum.
-	 * @return   Maximum message size, or 0 if unspecified or infinite.
+	 * @param conv The conversation to query, or NULL to get safe minimum
+	 *             for the protocol.
+	 *
+	 * @return     Maximum message size, 0 if unspecified, -1 for infinite.
 	 */
-	gsize (*get_max_message_size)(PurpleConnection *gc);
+	gssize (*get_max_message_size)(PurpleConversation *conv);
 };
 
 #define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \

mercurial