pidgin: ae37fe6b: Added "chat-join-failed" signal, emitted...
evands at pidgin.im
evands at pidgin.im
Mon Apr 28 22:05:51 EDT 2008
-----------------------------------------------------------------
Revision: ae37fe6b64c30704715a369df88bd76674a39b1a
Ancestor: 4c5110037671f84e3e775214c32692b5b23c11e1
Author: evands at pidgin.im
Date: 2008-04-29T01:46:40
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/ae37fe6b64c30704715a369df88bd76674a39b1a
Modified files:
libpurple/conversation.c libpurple/protocols/jabber/chat.c
libpurple/protocols/jabber/presence.c libpurple/server.c
libpurple/server.h
ChangeLog:
Added "chat-join-failed" signal, emitted by a new serv_got_join_chat_failed()
function in server.c. This is emitted with the PurpleConnection and
chat name and allows a UI or plugin which was expecting a group chat to be
joined to know if failure occurred.
serv_got_join_chat_failed() is only called by jabber so far; I know that
at least oscar should call it some situations, as well, such as when a
busted SNAC error is received after trying to join a chat with an invalid
room name.
-------------- next part --------------
============================================================
--- libpurple/conversation.c 17b8b84a715854e1cab3ba81023f83cbebcc4399
+++ libpurple/conversation.c 933fb27de584a3aee0c80c0a9b68d9e0c2e5fbbf
@@ -2368,6 +2368,12 @@ purple_conversations_init(void)
purple_value_new(PURPLE_TYPE_SUBTYPE,
PURPLE_SUBTYPE_CONVERSATION));
+ purple_signal_register(handle, "chat-join-failed",
+ purple_marshal_VOID__POINTER_POINTER, NULL, 2,
+ purple_value_new(PURPLE_TYPE_SUBTYPE,
+ PURPLE_SUBTYPE_CONNECTION),
+ purple_value_new(PURPLE_TYPE_STRING));
+
purple_signal_register(handle, "chat-left",
purple_marshal_VOID__POINTER, NULL, 1,
purple_value_new(PURPLE_TYPE_SUBTYPE,
============================================================
--- libpurple/protocols/jabber/chat.c 922040aed6450ac224b540538183be49daf143d6
+++ libpurple/protocols/jabber/chat.c 90097e85bdd98211f5ca7fbddc868421ef38586e
@@ -222,33 +222,39 @@ void jabber_chat_join(PurpleConnection *
if(!handle)
handle = js->user->node;
+ tmp = g_strdup_printf("%s@%s", room, server);
+ room_jid = g_strdup(jabber_normalize(NULL, tmp));
+ g_free(tmp);
+
if(!jabber_nodeprep_validate(room)) {
char *buf = g_strdup_printf(_("%s is not a valid room name"), room);
purple_notify_error(gc, _("Invalid Room Name"), _("Invalid Room Name"),
buf);
+ serv_got_join_chat_failed(gc, room_jid);
+ g_free(room_jid);
g_free(buf);
return;
} else if(!jabber_nameprep_validate(server)) {
char *buf = g_strdup_printf(_("%s is not a valid server name"), server);
purple_notify_error(gc, _("Invalid Server Name"),
_("Invalid Server Name"), buf);
+ serv_got_join_chat_failed(gc, room_jid);
+ g_free(room_jid);
g_free(buf);
return;
} else if(!jabber_resourceprep_validate(handle)) {
char *buf = g_strdup_printf(_("%s is not a valid room handle"), handle);
purple_notify_error(gc, _("Invalid Room Handle"),
_("Invalid Room Handle"), buf);
+ serv_got_join_chat_failed(gc, room_jid);
g_free(buf);
+ g_free(room_jid);
return;
}
if(jabber_chat_find(js, room, server))
return;
- tmp = g_strdup_printf("%s@%s", room, server);
- room_jid = g_strdup(jabber_normalize(NULL, tmp));
- g_free(tmp);
-
chat = g_new0(JabberChat, 1);
chat->js = gc->proto_data;
============================================================
--- libpurple/protocols/jabber/presence.c 2b0f7846f1356123376598e49a935328b8921248
+++ libpurple/protocols/jabber/presence.c b89e6907bcb37fac8a1c33283a14bc5e0d13aabb
@@ -575,6 +575,7 @@ void jabber_presence_parse(JabberStream
serv_got_chat_left(js->gc, chat->id);
} else {
title = g_strdup_printf(_("Error joining chat %s"), from);
+ serv_got_join_chat_failed(js->gc, room_jid);
}
purple_notify_error(js->gc, title, title, msg);
g_free(title);
============================================================
--- libpurple/server.c 6f8e729ec6c6920f6ea090d8778bc2814c76f132
+++ libpurple/server.c 8722e6ec363280c9b4b9f071e20fac61f97fa8d0
@@ -967,6 +967,12 @@ void serv_got_chat_left(PurpleConnection
purple_signal_emit(purple_conversations_get_handle(), "chat-left", conv);
}
+void serv_got_join_chat_failed(PurpleConnection *gc, const char *name)
+{
+ purple_signal_emit(purple_conversations_get_handle(), "chat-join-failed",
+ gc, name);
+}
+
void serv_got_chat_in(PurpleConnection *g, int id, const char *who,
PurpleMessageFlags flags, const char *message, time_t mtime)
{
============================================================
--- libpurple/server.h 28c75b20775231ef3c25d445bcf7a748bde04ae5
+++ libpurple/server.h ecf4a59541e6dd4dd85c1ec0f75e413f627b7279
@@ -166,6 +166,15 @@ PurpleConversation *serv_got_joined_chat
PurpleConversation *serv_got_joined_chat(PurpleConnection *gc,
int id, const char *name);
+/**
+ * Called by a prpl when an attempt to join a chat via serv_join_chat()
+ * fails.
+ *
+ * @param gc The connection on which chat joining failed
+ * @param name The name of the chat which we did not join
+ */
+void serv_got_join_chat_failed(PurpleConnection *gc, const char *name);
+
void serv_got_chat_left(PurpleConnection *g, int id);
void serv_got_chat_in(PurpleConnection *g, int id, const char *who,
PurpleMessageFlags flags, const char *message, time_t mtime);
More information about the Commits
mailing list