Mercurial > pidgin
changeset 22756:17cda378a2dd
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.
author | Evan Schoenberg <evan.s@dreskin.net> |
---|---|
date | Tue, 29 Apr 2008 01:46:40 +0000 |
parents | 01e0ddc7e040 |
children | 1517d3c763fc 06c98bab9bd2 |
files | libpurple/conversation.c libpurple/protocols/jabber/chat.c libpurple/protocols/jabber/presence.c libpurple/server.c libpurple/server.h |
diffstat | 5 files changed, 32 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/conversation.c Mon Apr 28 20:10:41 2008 +0000 +++ b/libpurple/conversation.c Tue Apr 29 01:46:40 2008 +0000 @@ -2368,6 +2368,12 @@ 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,
--- a/libpurple/protocols/jabber/chat.c Mon Apr 28 20:10:41 2008 +0000 +++ b/libpurple/protocols/jabber/chat.c Tue Apr 29 01:46:40 2008 +0000 @@ -222,33 +222,39 @@ 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;
--- a/libpurple/protocols/jabber/presence.c Mon Apr 28 20:10:41 2008 +0000 +++ b/libpurple/protocols/jabber/presence.c Tue Apr 29 01:46:40 2008 +0000 @@ -575,6 +575,7 @@ 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);
--- a/libpurple/server.c Mon Apr 28 20:10:41 2008 +0000 +++ b/libpurple/server.c Tue Apr 29 01:46:40 2008 +0000 @@ -967,6 +967,12 @@ 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) {
--- a/libpurple/server.h Mon Apr 28 20:10:41 2008 +0000 +++ b/libpurple/server.h Tue Apr 29 01:46:40 2008 +0000 @@ -166,6 +166,15 @@ 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);