comparison libpurple/protocols/jabber/message.c @ 29952:b71821db0516

jabber: Unlock from locked resource on a message *with content*, as opposed to any message. Thanks to rjoly for testing deryni's fix. Closes #11489
author Paul Aurich <paul@darkrain42.org>
date Mon, 08 Mar 2010 16:54:02 +0000
parents 97974856c920
children 2292d8896b0b fce17268c9ec 10bf97a36be0
comparison
equal deleted inserted replaced
29951:80724c326423 29952:b71821db0516
72 account = purple_connection_get_account(gc); 72 account = purple_connection_get_account(gc);
73 73
74 jb = jabber_buddy_find(jm->js, jm->from, TRUE); 74 jb = jabber_buddy_find(jm->js, jm->from, TRUE);
75 jbr = jabber_buddy_find_resource(jb, jid->resource); 75 jbr = jabber_buddy_find_resource(jb, jid->resource);
76 76
77 if (jid->resource) {
78 /*
79 * We received a message from a specific resource, so we probably want a
80 * reply to go to this specific resource (i.e. bind/lock the
81 * conversation to this resource).
82 *
83 * This works because purple_conv_im_send gets the name from
84 * purple_conversation_get_name()
85 */
86 PurpleConversation *conv;
87
88 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, jm->from, account);
89 if (conv && !g_str_equal(jm->from, purple_conversation_get_name(conv))) {
90 purple_debug_info("jabber", "Binding conversation to %s\n", jm->from);
91 purple_conversation_set_name(conv, jm->from);
92 }
93 }
94
95 if(!jm->xhtml && !jm->body) { 77 if(!jm->xhtml && !jm->body) {
96 if (jbr) { 78 if (jbr) {
97 if (jm->chat_state != JM_STATE_NONE) 79 if (jm->chat_state != JM_STATE_NONE)
98 jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED; 80 jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
99 else 81 else
135 117
136 } else { 118 } else {
137 serv_got_typing_stopped(gc, jm->from); 119 serv_got_typing_stopped(gc, jm->from);
138 } 120 }
139 } else { 121 } else {
122 if (jid->resource) {
123 /*
124 * We received a message from a specific resource, so
125 * we probably want a reply to go to this specific
126 * resource (i.e. bind/lock the conversation to this
127 * resource).
128 *
129 * This works because purple_conv_im_send gets the name
130 * from purple_conversation_get_name()
131 */
132 PurpleConversation *conv;
133
134 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
135 jm->from, account);
136 if (conv && !g_str_equal(jm->from,
137 purple_conversation_get_name(conv))) {
138 purple_debug_info("jabber", "Binding conversation to %s\n",
139 jm->from);
140 purple_conversation_set_name(conv, jm->from);
141 }
142 }
143
140 if(jbr) { 144 if(jbr) {
141 if (jm->chat_state != JM_STATE_NONE) 145 if (jm->chat_state != JM_STATE_NONE)
142 jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED; 146 jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
143 else 147 else
144 jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED; 148 jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED;