Sat, 13 Mar 2021 15:33:49 -0600
Fix building on glib < 2.58.0 as we have a minimum of 2.52.0
Add compatibility for G_SOURCE_FUNC and g_time_zone_new_offset that were added in 2.58.0
g_time_zone_new_offset is from 2.58.0 which might be buggy, the version of it
from glib git has some fixes it but it is much more involved so using the older
version is a calculated risk.
Testing Done:
Built on ubuntu:bionic.
Reviewed at https://reviews.imfreedom.org/r/573/
| 7014 | 1 | /* |
| 15884 | 2 | * purple - Jabber Protocol Plugin |
| 7014 | 3 | * |
|
28322
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
27900
diff
changeset
|
4 | * Purple is the legal property of its developers, whose names are too numerous |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
27900
diff
changeset
|
5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
27900
diff
changeset
|
6 | * source distribution. |
| 7014 | 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19419
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 7014 | 21 | * |
| 22 | */ | |
|
40439
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40358
diff
changeset
|
23 | #include <glib/gi18n-lib.h> |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40358
diff
changeset
|
24 | |
|
40358
e6fe6fc1f516
move all protocols, purple plugins, and purple tests to use purple.h instead of including files individually
Gary Kramlich <grim@reaperworld.com>
parents:
40294
diff
changeset
|
25 | #include <purple.h> |
| 7014 | 26 | |
|
26871
d62964222795
Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents:
26867
diff
changeset
|
27 | #include "adhoccommands.h" |
| 7014 | 28 | #include "buddy.h" |
| 29 | #include "chat.h" | |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
30 | #include "data.h" |
| 7014 | 31 | #include "message.h" |
|
17768
7be011945a1b
added preliminary frame for pep-support
Andreas Monitzer <am@adiumx.com>
parents:
17351
diff
changeset
|
32 | #include "pep.h" |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
33 | #include "iq.h" |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
34 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
35 | #include <string.h> |
| 7014 | 36 | |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
37 | typedef struct { |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
38 | PurpleConversation *conv; |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
39 | gchar *shortcut; |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
40 | } JabberMessageRemoteSmileyAddData; |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
41 | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
42 | static GString *jm_body_with_oob(JabberMessage *jm) { |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
43 | GList *etc; |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
44 | GString *body = g_string_new(""); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
45 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
46 | if(jm->xhtml) |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
47 | g_string_append(body, jm->xhtml); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
48 | else if(jm->body) |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
49 | g_string_append(body, jm->body); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
50 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
51 | for(etc = jm->etc; etc; etc = etc->next) { |
| 38358 | 52 | PurpleXmlNode *x = etc->data; |
| 53 | const char *xmlns = purple_xmlnode_get_namespace(x); | |
|
38264
99356e68aff5
Merge release-2.x.y changes, resolve conflicts
qarkai <qarkai@gmail.com>
diff
changeset
|
54 | if(purple_strequal(xmlns, NS_OOB_X_DATA)) { |
| 38358 | 55 | PurpleXmlNode *url, *desc; |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
56 | char *urltxt, *desctxt; |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
57 | |
| 38358 | 58 | url = purple_xmlnode_get_child(x, "url"); |
| 59 | desc = purple_xmlnode_get_child(x, "desc"); | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
60 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
61 | if(!url) |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
62 | continue; |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
63 | |
| 38358 | 64 | urltxt = purple_xmlnode_get_data(url); |
| 65 | desctxt = desc ? purple_xmlnode_get_data(desc) : urltxt; | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
66 | |
|
38264
99356e68aff5
Merge release-2.x.y changes, resolve conflicts
qarkai <qarkai@gmail.com>
diff
changeset
|
67 | if(body->len && !purple_strequal(body->str, urltxt)) |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
68 | g_string_append_printf(body, "<br/><a href='%s'>%s</a>", |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
69 | urltxt, desctxt); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
70 | else |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
71 | g_string_printf(body, "<a href='%s'>%s</a>", |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
72 | urltxt, desctxt); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
73 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
74 | g_free(urltxt); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
75 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
76 | if(desctxt != urltxt) |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
77 | g_free(desctxt); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
78 | } |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
79 | } |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
80 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
81 | return body; |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
82 | } |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
83 | |
| 7014 | 84 | void jabber_message_free(JabberMessage *jm) |
| 85 | { | |
| 15980 | 86 | g_free(jm->from); |
| 13484 | 87 | g_free(jm->to); |
| 88 | g_free(jm->id); | |
| 89 | g_free(jm->subject); | |
| 90 | g_free(jm->body); | |
| 91 | g_free(jm->xhtml); | |
| 92 | g_free(jm->password); | |
|
20057
728a7dce565e
grab revision 41389df89a4a6a007d41cec33e33043cd41ea159
Luke Schierer <lschiere@pidgin.im>
parents:
19917
diff
changeset
|
93 | g_free(jm->error); |
|
728a7dce565e
grab revision 41389df89a4a6a007d41cec33e33043cd41ea159
Luke Schierer <lschiere@pidgin.im>
parents:
19917
diff
changeset
|
94 | g_free(jm->thread_id); |
| 13484 | 95 | g_list_free(jm->etc); |
|
20057
728a7dce565e
grab revision 41389df89a4a6a007d41cec33e33043cd41ea159
Luke Schierer <lschiere@pidgin.im>
parents:
19917
diff
changeset
|
96 | g_list_free(jm->eventitems); |
| 7014 | 97 | |
| 98 | g_free(jm); | |
| 99 | } | |
| 100 | ||
| 7145 | 101 | static void handle_chat(JabberMessage *jm) |
| 7014 | 102 | { |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
103 | const gchar *contact = jm->outgoing ? jm->to : jm->from; |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
104 | JabberID *jid = jabber_id_new(contact); |
| 7014 | 105 | |
|
29331
9e828e599fc2
jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents:
29330
diff
changeset
|
106 | PurpleConnection *gc; |
|
9e828e599fc2
jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents:
29330
diff
changeset
|
107 | PurpleAccount *account; |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
108 | PurpleMessageFlags flags = 0; |
| 7014 | 109 | JabberBuddy *jb; |
| 110 | JabberBuddyResource *jbr; | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
111 | GString *body; |
| 7014 | 112 | |
| 7310 | 113 | if(!jid) |
| 114 | return; | |
| 115 | ||
|
29331
9e828e599fc2
jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents:
29330
diff
changeset
|
116 | gc = jm->js->gc; |
|
9e828e599fc2
jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents:
29330
diff
changeset
|
117 | account = purple_connection_get_account(gc); |
|
9e828e599fc2
jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents:
29330
diff
changeset
|
118 | |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
119 | jb = jabber_buddy_find(jm->js, contact, TRUE); |
| 7306 | 120 | jbr = jabber_buddy_find_resource(jb, jid->resource); |
| 7014 | 121 | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
122 | if (jbr && jm->chat_state != JM_STATE_NONE) |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
123 | jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED; |
|
27750
f25b6a565494
Use Entity Capabilities to pick up Chat States support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27749
diff
changeset
|
124 | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
125 | switch(jm->chat_state) { |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
126 | case JM_STATE_COMPOSING: |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
127 | purple_serv_got_typing(gc, contact, 0, PURPLE_IM_TYPING); |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
128 | break; |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
129 | case JM_STATE_PAUSED: |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
130 | purple_serv_got_typing(gc, contact, 0, PURPLE_IM_TYPED); |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
131 | break; |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
132 | case JM_STATE_GONE: { |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
133 | PurpleIMConversation *im = purple_conversations_find_im_with_account( |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
134 | contact, account); |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
135 | if (im && jid->node && jid->domain) { |
|
15721
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
136 | char buf[256]; |
| 15884 | 137 | PurpleBuddy *buddy; |
|
15721
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
138 | |
|
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
139 | g_snprintf(buf, sizeof(buf), "%s@%s", jid->node, jid->domain); |
|
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
140 | |
|
34728
8efd73063ecf
Renamed buddy list functions to more appropriate/simler names.
Ankit Vani <a@nevitus.org>
parents:
34670
diff
changeset
|
141 | if ((buddy = purple_blist_find_buddy(account, buf))) { |
|
15721
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
142 | const char *who; |
|
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
143 | char *escaped; |
|
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
144 | |
| 15884 | 145 | who = purple_buddy_get_alias(buddy); |
|
15721
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
146 | escaped = g_markup_escape_text(who, -1); |
|
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
147 | |
|
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
148 | g_snprintf(buf, sizeof(buf), |
| 16946 | 149 | _("%s has left the conversation."), escaped); |
|
21193
e918a1846d03
Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20361
diff
changeset
|
150 | g_free(escaped); |
|
15721
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
151 | |
| 15884 | 152 | /* At some point when we restructure PurpleConversation, |
|
15721
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
153 | * this should be able to be implemented by removing the |
|
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
154 | * user from the conversation like we do with chats now. */ |
|
36089
c035b9a63457
Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36084
diff
changeset
|
155 | purple_conversation_write_system_message( |
|
c035b9a63457
Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36084
diff
changeset
|
156 | PURPLE_CONVERSATION(im), buf, 0); |
|
15721
8b054202d398
Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents:
15710
diff
changeset
|
157 | } |
|
15710
fbc4a200c853
Receiving XEP 85 'gone' messages. Doesn't do anything because of the string freeze. This is akin to the MSN 'so-and-so has closed the conversation window' messages. Rlaager made a strong point to me that they're not altogether stalky, but can be useful.
Sean Egan <seanegan@pidgin.im>
parents:
15709
diff
changeset
|
158 | } |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
159 | purple_serv_got_typing_stopped(gc, contact); |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
160 | break; |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
161 | } |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
162 | default: |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
163 | purple_serv_got_typing_stopped(gc, contact); |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
164 | } |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
165 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
166 | body = jm_body_with_oob(jm); |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
167 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
168 | if(body && body->len) { |
|
29840
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
169 | if (jid->resource) { |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
170 | /* |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
171 | * We received a message from a specific resource, so |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
172 | * we probably want a reply to go to this specific |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
173 | * resource (i.e. bind/lock the conversation to this |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
174 | * resource). |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
175 | * |
|
34622
753f46dd000f
Global replace - renamed functions and types according to GObject-based PurpleConversation API
Ankit Vani <a@nevitus.org>
parents:
33722
diff
changeset
|
176 | * This works because purple_im_conversation_send gets the name |
|
29840
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
177 | * from purple_conversation_get_name() |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
178 | */ |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
179 | PurpleIMConversation *im; |
|
29840
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
180 | |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
181 | im = purple_conversations_find_im_with_account(contact, account); |
|
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
182 | if (im && !purple_strequal(contact, |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
183 | purple_conversation_get_name(PURPLE_CONVERSATION(im)))) { |
|
29840
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
184 | purple_debug_info("jabber", "Binding conversation to %s\n", |
|
40290
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
185 | contact); |
|
0a722071a754
Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents:
39470
diff
changeset
|
186 | purple_conversation_set_name(PURPLE_CONVERSATION(im), contact); |
|
29840
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
187 | } |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
188 | } |
|
8792e8fbaa18
jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents:
29366
diff
changeset
|
189 | |
| 8400 | 190 | if(jbr) { |
|
30239
88550c8e461b
jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents:
30235
diff
changeset
|
191 | /* Treat SUPPORTED as a terminal with no escape :) */ |
|
88550c8e461b
jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents:
30235
diff
changeset
|
192 | if (jbr->chat_states != JABBER_CHAT_STATES_SUPPORTED) { |
|
88550c8e461b
jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents:
30235
diff
changeset
|
193 | if (jm->chat_state != JM_STATE_NONE) |
|
88550c8e461b
jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents:
30235
diff
changeset
|
194 | jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED; |
|
88550c8e461b
jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents:
30235
diff
changeset
|
195 | else |
|
88550c8e461b
jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents:
30235
diff
changeset
|
196 | jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED; |
|
88550c8e461b
jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents:
30235
diff
changeset
|
197 | } |
| 13708 | 198 | |
|
37423
d2f0259aa43f
Remove NULL-checks before free(). No functional change.
Michael McConville <mmcco@mykolab.com>
parents:
37153
diff
changeset
|
199 | g_free(jbr->thread_id); |
|
39470
92dbadc3c6e4
Fix jabber message thread handling.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39433
diff
changeset
|
200 | jbr->thread_id = g_strdup(jm->thread_id); |
| 8400 | 201 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
202 | |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
203 | if(jm->forwarded) { |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
204 | flags |= PURPLE_MESSAGE_FORWARDED; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
205 | } |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
206 | flags |= jm->outgoing ? PURPLE_MESSAGE_SEND : PURPLE_MESSAGE_RECV; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
207 | |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
208 | purple_serv_got_im(gc, contact, body->str, flags, jm->sent); |
| 7014 | 209 | } |
| 210 | ||
| 211 | jabber_id_free(jid); | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
212 | |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
213 | if(body) |
|
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
214 | g_string_free(body, TRUE); |
| 7014 | 215 | } |
| 216 | ||
| 7145 | 217 | static void handle_headline(JabberMessage *jm) |
| 218 | { | |
| 219 | char *title; | |
|
17819
862fe0f947a9
Added buzz support using a private extension. Maybe I should write a XEP about that.
Andreas Monitzer <am@adiumx.com>
parents:
17811
diff
changeset
|
220 | GString *body; |
| 7145 | 221 | |
|
17819
862fe0f947a9
Added buzz support using a private extension. Maybe I should write a XEP about that.
Andreas Monitzer <am@adiumx.com>
parents:
17811
diff
changeset
|
222 | if(!jm->xhtml && !jm->body) |
|
862fe0f947a9
Added buzz support using a private extension. Maybe I should write a XEP about that.
Andreas Monitzer <am@adiumx.com>
parents:
17811
diff
changeset
|
223 | return; /* ignore headlines without any content */ |
| 7145 | 224 | |
|
38248
1034c641ec6c
Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
31512
diff
changeset
|
225 | body = jm_body_with_oob(jm); |
| 7145 | 226 | title = g_strdup_printf(_("Message from %s"), jm->from); |
| 227 | ||
| 15884 | 228 | purple_notify_formatted(jm->js->gc, title, jm->subject ? jm->subject : title, |
| 7145 | 229 | NULL, body->str, NULL, NULL); |
| 230 | ||
| 231 | g_free(title); | |
| 232 | g_string_free(body, TRUE); | |
| 233 | } | |
| 234 | ||
| 235 | static void handle_groupchat(JabberMessage *jm) | |
| 7014 | 236 | { |
| 237 | JabberID *jid = jabber_id_new(jm->from); | |
| 7310 | 238 | JabberChat *chat; |
|
36108
69b4fce85ffa
Switch _purple_conversation_write_common and (writing|wrote)-(chat|im)-msg to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36098
diff
changeset
|
239 | PurpleMessageFlags messageFlags = 0; |
| 7310 | 240 | |
| 241 | if(!jid) | |
| 242 | return; | |
| 243 | ||
| 244 | chat = jabber_chat_find(jm->js, jid->node, jid->domain); | |
| 7014 | 245 | |
| 246 | if(!chat) | |
| 247 | return; | |
| 248 | ||
| 7971 | 249 | if(jm->subject) { |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
250 | purple_chat_conversation_set_topic(chat->conv, jid->resource, |
| 7183 | 251 | jm->subject); |
|
33722
dd2cec2beaf6
Don't log system messages, that appear on *every* MUC entry/exit
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
32323
diff
changeset
|
252 | messageFlags |= PURPLE_MESSAGE_NO_LOG; |
| 7971 | 253 | if(!jm->xhtml && !jm->body) { |
| 9762 | 254 | char *msg, *tmp, *tmp2; |
|
10732
5e314ab498bf
[gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents:
10607
diff
changeset
|
255 | tmp = g_markup_escape_text(jm->subject, -1); |
| 15884 | 256 | tmp2 = purple_markup_linkify(tmp); |
| 7971 | 257 | if(jid->resource) |
| 9762 | 258 | msg = g_strdup_printf(_("%s has set the topic to: %s"), jid->resource, tmp2); |
| 7971 | 259 | else |
| 9762 | 260 | msg = g_strdup_printf(_("The topic is: %s"), tmp2); |
|
36084
2172bd6dad3e
Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36077
diff
changeset
|
261 | purple_conversation_write_system_message(PURPLE_CONVERSATION(chat->conv), |
|
2172bd6dad3e
Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36077
diff
changeset
|
262 | msg, messageFlags); |
| 9762 | 263 | g_free(tmp); |
| 264 | g_free(tmp2); | |
| 7971 | 265 | g_free(msg); |
| 266 | } | |
| 267 | } | |
| 7014 | 268 | |
| 7630 | 269 | if(jm->xhtml || jm->body) { |
| 270 | if(jid->resource) | |
|
35499
c4c5e0a670b1
Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents:
35070
diff
changeset
|
271 | purple_serv_got_chat_in(jm->js->gc, chat->id, jid->resource, |
|
33722
dd2cec2beaf6
Don't log system messages, that appear on *every* MUC entry/exit
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
32323
diff
changeset
|
272 | messageFlags | (jm->delayed ? PURPLE_MESSAGE_DELAYED : 0), |
| 7630 | 273 | jm->xhtml ? jm->xhtml : jm->body, jm->sent); |
| 274 | else if(chat->muc) | |
|
36084
2172bd6dad3e
Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36077
diff
changeset
|
275 | purple_conversation_write_system_message( |
|
2172bd6dad3e
Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36077
diff
changeset
|
276 | PURPLE_CONVERSATION(chat->conv), |
|
2172bd6dad3e
Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36077
diff
changeset
|
277 | jm->xhtml ? jm->xhtml : jm->body, messageFlags); |
| 7630 | 278 | } |
| 279 | ||
| 7014 | 280 | jabber_id_free(jid); |
| 281 | } | |
| 282 | ||
| 7145 | 283 | static void handle_groupchat_invite(JabberMessage *jm) |
| 7014 | 284 | { |
| 7310 | 285 | GHashTable *components; |
| 7014 | 286 | JabberID *jid = jabber_id_new(jm->to); |
| 287 | ||
| 7310 | 288 | if(!jid) |
| 289 | return; | |
| 290 | ||
|
15598
834a88c83e95
Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents:
15587
diff
changeset
|
291 | components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); |
| 7310 | 292 | |
|
15598
834a88c83e95
Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents:
15587
diff
changeset
|
293 | g_hash_table_replace(components, "room", g_strdup(jid->node)); |
|
834a88c83e95
Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents:
15587
diff
changeset
|
294 | g_hash_table_replace(components, "server", g_strdup(jid->domain)); |
|
834a88c83e95
Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents:
15587
diff
changeset
|
295 | g_hash_table_replace(components, "handle", g_strdup(jm->js->user->node)); |
|
834a88c83e95
Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents:
15587
diff
changeset
|
296 | g_hash_table_replace(components, "password", g_strdup(jm->password)); |
| 7014 | 297 | |
| 298 | jabber_id_free(jid); | |
| 35501 | 299 | purple_serv_got_chat_invite(jm->js->gc, jm->to, jm->from, jm->body, components); |
| 7014 | 300 | } |
| 301 | ||
| 7145 | 302 | static void handle_error(JabberMessage *jm) |
| 7014 | 303 | { |
| 304 | char *buf; | |
| 305 | ||
| 306 | if(!jm->body) | |
| 307 | return; | |
| 308 | ||
| 309 | buf = g_strdup_printf(_("Message delivery to %s failed: %s"), | |
|
13766
6b92ce47f7e5
[gaim-migrate @ 16176]
Daniel Atallah <datallah@pidgin.im>
parents:
13708
diff
changeset
|
310 | jm->from, jm->error ? jm->error : ""); |
| 7014 | 311 | |
|
16961
b6955f946f8f
s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@pidgin.im>
parents:
16946
diff
changeset
|
312 | purple_notify_formatted(jm->js->gc, _("XMPP Message Error"), _("XMPP Message Error"), buf, |
| 7944 | 313 | jm->xhtml ? jm->xhtml : jm->body, NULL, NULL); |
| 7014 | 314 | |
| 315 | g_free(buf); | |
| 316 | } | |
| 317 | ||
|
17822
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
318 | static void handle_buzz(JabberMessage *jm) { |
|
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
319 | PurpleAccount *account; |
|
25316
8b6461a2f967
Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents:
25154
diff
changeset
|
320 | |
|
17823
2ca25e7e65dd
Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents:
17822
diff
changeset
|
321 | /* Delayed buzz MUST NOT be accepted */ |
|
2ca25e7e65dd
Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents:
17822
diff
changeset
|
322 | if(jm->delayed) |
|
2ca25e7e65dd
Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents:
17822
diff
changeset
|
323 | return; |
|
25316
8b6461a2f967
Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents:
25154
diff
changeset
|
324 | |
|
17824
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17823
diff
changeset
|
325 | /* Reject buzz when it's not enabled */ |
|
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17823
diff
changeset
|
326 | if(!jm->js->allowBuzz) |
|
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17823
diff
changeset
|
327 | return; |
|
25316
8b6461a2f967
Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents:
25154
diff
changeset
|
328 | |
|
17822
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
329 | account = purple_connection_get_account(jm->js->gc); |
|
25316
8b6461a2f967
Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents:
25154
diff
changeset
|
330 | |
|
34728
8efd73063ecf
Renamed buddy list functions to more appropriate/simler names.
Ankit Vani <a@nevitus.org>
parents:
34670
diff
changeset
|
331 | if (purple_blist_find_buddy(account, jm->from) == NULL) |
|
17823
2ca25e7e65dd
Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents:
17822
diff
changeset
|
332 | return; /* Do not accept buzzes from unknown people */ |
|
2ca25e7e65dd
Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents:
17822
diff
changeset
|
333 | |
|
25316
8b6461a2f967
Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents:
25154
diff
changeset
|
334 | /* xmpp only has 1 attention type, so index is 0 */ |
|
36545
23b59a16c808
Replaced some _prpl_ stuff with _protocol_
Ankit Vani <a@nevitus.org>
parents:
36362
diff
changeset
|
335 | purple_protocol_got_attention(jm->js->gc, jm->from, 0); |
|
17822
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
336 | } |
|
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
337 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
338 | static void |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
339 | jabber_message_get_refs_from_xmlnode_internal(const PurpleXmlNode *message, |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
340 | GHashTable *table) |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
341 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
342 | PurpleXmlNode *child; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
343 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
344 | for (child = purple_xmlnode_get_child(message, "img") ; child ; |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
345 | child = purple_xmlnode_get_next_twin(child)) { |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
346 | const gchar *src = purple_xmlnode_get_attrib(child, "src"); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
347 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
348 | if (g_str_has_prefix(src, "cid:")) { |
|
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
349 | const gchar *cid = src + 4; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
350 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
351 | /* if we haven't "fetched" this yet... */ |
|
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
352 | if (!g_hash_table_lookup(table, cid)) { |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
353 | gchar *value; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
354 | const gchar *alt = purple_xmlnode_get_attrib(child, "alt"); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
355 | /* if there is no "alt" string, use the cid... |
|
24258
9ae10fafad7a
When receiving an <img/> without the "alt" attribute, set
Marcus Lundblad <malu@pidgin.im>
parents:
24257
diff
changeset
|
356 | include the entire src, eg. "cid:.." to avoid linkification */ |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
357 | if (alt && alt[0] != '\0') { |
|
24259
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
358 | /* workaround for when "alt" is set to the value of the |
|
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
359 | CID (which Jabbim seems to do), to avoid it showing up |
|
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
360 | as an mailto: link */ |
|
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
361 | if (purple_email_is_valid(alt)) { |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
362 | value = g_strdup_printf("smiley:%s", alt); |
|
24259
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
363 | } else { |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
364 | value = g_strdup(alt); |
|
24259
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
365 | } |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
366 | } else { |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
367 | value = g_strdup(src); |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
368 | } |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
369 | g_hash_table_insert(table, g_strdup(cid), value); |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
370 | } |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
371 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
372 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
373 | |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
374 | for (child = message->child ; child ; child = child->next) { |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
375 | jabber_message_get_refs_from_xmlnode_internal(child, table); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
376 | } |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
377 | } |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
378 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
379 | static gboolean |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
380 | jabber_message_get_refs(gpointer key, gpointer value, gpointer user_data) |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
381 | { |
|
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
382 | GList **refs = (GList **) user_data; |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
383 | PurpleKeyValuePair *ref = purple_key_value_pair_new_full(key, value, g_free); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
384 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
385 | *refs = g_list_append(*refs, ref); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
386 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
387 | return TRUE; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
388 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
389 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
390 | static GList * |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
391 | jabber_message_get_refs_from_xmlnode(const PurpleXmlNode *message) |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
392 | { |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
393 | GList *refs = NULL; |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
394 | GHashTable *unique_refs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
395 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
396 | jabber_message_get_refs_from_xmlnode_internal(message, unique_refs); |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
397 | (void)g_hash_table_foreach_remove(unique_refs, jabber_message_get_refs, &refs); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
398 | g_hash_table_destroy(unique_refs); |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
399 | return refs; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
400 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
401 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
402 | static gchar * |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
403 | jabber_message_xml_to_string_strip_img_smileys(PurpleXmlNode *xhtml) |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
404 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
405 | gchar *markup = purple_xmlnode_to_str(xhtml, NULL); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
406 | int len = strlen(markup); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
407 | int pos = 0; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
408 | GString *out = g_string_new(NULL); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
409 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
410 | while (pos < len) { |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
411 | /* this is a bit cludgy, maybe there is a better way to do this... |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
412 | we need to find all <img> tags within the XHTML and replace those |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
413 | tags with the value of their "alt" attributes */ |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
414 | if (g_str_has_prefix(&(markup[pos]), "<img")) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
415 | PurpleXmlNode *img = NULL; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
416 | int pos2 = pos; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
417 | const gchar *src; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
418 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
419 | for (; pos2 < len ; pos2++) { |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
420 | if (g_str_has_prefix(&(markup[pos2]), "/>")) { |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
421 | pos2 += 2; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
422 | break; |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
423 | } else if (g_str_has_prefix(&(markup[pos2]), "</img>")) { |
|
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
424 | pos2 += 5; |
|
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
425 | break; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
426 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
427 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
428 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
429 | /* note, if the above loop didn't find the end of the <img> tag, |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
430 | it the parsed string will be until the end of the input string, |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
431 | in which case purple_xmlnode_from_str will bail out and return NULL, |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
432 | in this case the "if" statement below doesn't trigger and the |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
433 | text is copied unchanged */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
434 | img = purple_xmlnode_from_str(&(markup[pos]), pos2 - pos); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
435 | src = purple_xmlnode_get_attrib(img, "src"); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
436 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
437 | if (g_str_has_prefix(src, "cid:")) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
438 | const gchar *alt = purple_xmlnode_get_attrib(img, "alt"); |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
439 | /* if the "alt" attribute is empty, put the cid as smiley string */ |
|
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
440 | if (alt && alt[0] != '\0') { |
|
24259
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
441 | /* if the "alt" is the same as the CID, as Jabbim does, |
|
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
442 | this prevents linkification... */ |
|
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
443 | if (purple_email_is_valid(alt)) { |
|
24386
0710eb7a41c5
A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24259
diff
changeset
|
444 | gchar *safe_alt = g_strdup_printf("smiley:%s", alt); |
|
24259
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
445 | out = g_string_append(out, safe_alt); |
|
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
446 | g_free(safe_alt); |
|
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
447 | } else { |
|
35783
dcff8ce68d1b
Remote smileys: fix a xmpp bug of non-escaped custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35764
diff
changeset
|
448 | gchar *alt_escaped = g_markup_escape_text(alt, -1); |
|
dcff8ce68d1b
Remote smileys: fix a xmpp bug of non-escaped custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35764
diff
changeset
|
449 | out = g_string_append(out, alt_escaped); |
|
dcff8ce68d1b
Remote smileys: fix a xmpp bug of non-escaped custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35764
diff
changeset
|
450 | g_free(alt_escaped); |
|
24259
e69d72917038
Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents:
24258
diff
changeset
|
451 | } |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
452 | } else { |
|
24258
9ae10fafad7a
When receiving an <img/> without the "alt" attribute, set
Marcus Lundblad <malu@pidgin.im>
parents:
24257
diff
changeset
|
453 | out = g_string_append(out, src); |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
454 | } |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
455 | pos += pos2 - pos; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
456 | } else { |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
457 | out = g_string_append_c(out, markup[pos]); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
458 | pos++; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
459 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
460 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
461 | purple_xmlnode_free(img); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
462 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
463 | } else { |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
464 | out = g_string_append_c(out, markup[pos]); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
465 | pos++; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
466 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
467 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
468 | |
|
24387
cba0cfba936e
Another memory leak fix. Also, keep a copy of the alt-text in
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24386
diff
changeset
|
469 | g_free(markup); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
470 | return g_string_free(out, FALSE); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
471 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
472 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
473 | static void |
|
29912
4f8e1c3bbc4a
jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents:
29910
diff
changeset
|
474 | jabber_message_add_remote_smileys(JabberStream *js, const gchar *who, |
|
40293
c60c4f96749d
Fix some line wrapping
Richard Laager <rlaager@pidgin.im>
parents:
40290
diff
changeset
|
475 | const PurpleXmlNode *message) |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
476 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
477 | PurpleXmlNode *data_tag; |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
478 | for (data_tag = purple_xmlnode_get_child_with_namespace(message, "data", NS_BOB) ; |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
479 | data_tag ; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
480 | data_tag = purple_xmlnode_get_next_twin(data_tag)) { |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
481 | const gchar *cid = purple_xmlnode_get_attrib(data_tag, "cid"); |
|
29912
4f8e1c3bbc4a
jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents:
29910
diff
changeset
|
482 | const JabberData *data = jabber_data_find_remote_by_cid(js, who, cid); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
483 | |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
484 | if (!data && cid != NULL) { |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
485 | /* we haven't cached this already, let's add it */ |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
486 | JabberData *new_data = jabber_data_create_from_xml(data_tag); |
|
29910
f1c6e586e5c1
jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents:
29906
diff
changeset
|
487 | |
|
f1c6e586e5c1
jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents:
29906
diff
changeset
|
488 | if (new_data) { |
|
29912
4f8e1c3bbc4a
jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents:
29910
diff
changeset
|
489 | jabber_data_associate_remote(js, who, new_data); |
|
29910
f1c6e586e5c1
jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents:
29906
diff
changeset
|
490 | } |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
491 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
492 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
493 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
494 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
495 | static void |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
496 | jabber_message_remote_smiley_got(JabberData *jdata, gchar *alt, gpointer d) { |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
497 | JabberMessageRemoteSmileyAddData *data = (JabberMessageRemoteSmileyAddData *)d; |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
498 | |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
499 | if (jdata) { |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
500 | PurpleSmiley *smiley = NULL; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
501 | |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
502 | purple_debug_info("jabber", |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
503 | "smiley data retrieved successfully"); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
504 | |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
505 | smiley = purple_smiley_new_from_data( |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
506 | data->shortcut, |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
507 | jabber_data_get_data(jdata), |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
508 | jabber_data_get_size(jdata) |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
509 | ); |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
510 | |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
511 | purple_conversation_add_smiley(data->conv, smiley); |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
512 | |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
513 | g_object_unref(G_OBJECT(smiley)); |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
514 | } else { |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
515 | purple_debug_error("jabber", "failed retrieving smiley data"); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
516 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
517 | |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
518 | g_object_unref(G_OBJECT(data->conv)); |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
519 | g_free(data->shortcut); |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
520 | g_slice_free(JabberMessageRemoteSmileyAddData, data); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
521 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
522 | |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
523 | static void |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
524 | jabber_message_remote_smiley_add(JabberStream *js, PurpleConversation *conv, |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
525 | const gchar *from, const gchar *shortcut, const gchar *cid) |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
526 | { |
|
38281
df274be2afa2
A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents:
37423
diff
changeset
|
527 | PurpleSmiley *smiley = NULL; |
|
df274be2afa2
A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents:
37423
diff
changeset
|
528 | const JabberData *jdata = NULL; |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
529 | |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
530 | purple_debug_misc("jabber", "about to add remote smiley %s to the conv", |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
531 | shortcut); |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
532 | |
|
38281
df274be2afa2
A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents:
37423
diff
changeset
|
533 | smiley = purple_conversation_get_smiley(conv, shortcut); |
|
df274be2afa2
A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents:
37423
diff
changeset
|
534 | if(PURPLE_IS_SMILEY(smiley)) { |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
535 | purple_debug_misc("jabber", "smiley was already present"); |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
536 | return; |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
537 | } |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
538 | |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
539 | /* TODO: cache lookup by "cid" */ |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
540 | jdata = jabber_data_find_remote_by_cid(js, from, cid); |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
541 | if (jdata) { |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
542 | purple_debug_info("jabber", "smiley data is already known"); |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
543 | |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
544 | smiley = purple_smiley_new_from_data( |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
545 | shortcut, |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
546 | jabber_data_get_data(jdata), |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
547 | jabber_data_get_size(jdata) |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
548 | ); |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
549 | |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
550 | purple_conversation_add_smiley(conv, smiley); |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
551 | |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
552 | g_object_unref(G_OBJECT(smiley)); |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
553 | } else { |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
554 | JabberMessageRemoteSmileyAddData *data = NULL; |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
555 | |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
556 | data = g_slice_new(JabberMessageRemoteSmileyAddData); |
|
39065
3997b9da75e8
jabber: Fix assignment from incompatible pointer type warning
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
557 | data->conv = g_object_ref(conv); |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
558 | data->shortcut = g_strdup(shortcut); |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
559 | |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
560 | purple_debug_info("jabber", "smiley data is unknown, " |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
561 | "need to request it"); |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
562 | |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
563 | jabber_data_request(js, cid, from, NULL, FALSE, |
|
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
564 | jabber_message_remote_smiley_got, data); |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
565 | } |
|
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
566 | } |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
567 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
568 | void jabber_message_parse(JabberStream *js, PurpleXmlNode *packet) |
| 7014 | 569 | { |
| 570 | JabberMessage *jm; | |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
571 | const char *id, *from, *to, *type; |
|
40594
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
572 | PurpleXmlNode *child = NULL, *received = NULL; |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
573 | gboolean signal_return; |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
574 | gboolean delayed = FALSE, is_outgoing = FALSE, is_forwarded = FALSE; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
575 | time_t timestamp = time(NULL); |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
576 | |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
577 | /* Check if we have a carbons received element from our own account. */ |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
578 | from = purple_xmlnode_get_attrib(packet, "from"); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
579 | if(from != NULL && jabber_is_own_account(js, from)) { |
|
40594
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
580 | PurpleXmlNode *forwarded = NULL; |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
581 | |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
582 | /* We check if this is a received carbon first. */ |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
583 | received = purple_xmlnode_get_child_with_namespace(packet, "received", |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
584 | NS_MESSAGE_CARBONS); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
585 | if(received != NULL) { |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
586 | forwarded = purple_xmlnode_get_child_with_namespace(received, |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
587 | "forwarded", |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
588 | NS_FORWARD); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
589 | } else { |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
590 | PurpleXmlNode *sent = NULL; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
591 | |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
592 | sent = purple_xmlnode_get_child_with_namespace(packet, "sent", |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
593 | NS_MESSAGE_CARBONS); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
594 | if(sent != NULL) { |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
595 | forwarded = purple_xmlnode_get_child_with_namespace(sent, |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
596 | "forwarded", |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
597 | NS_FORWARD); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
598 | is_outgoing = TRUE; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
599 | } |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
600 | } |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
601 | |
|
40594
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
602 | if(forwarded != NULL) { |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
603 | PurpleXmlNode *fwd_msg = NULL; |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
604 | |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
605 | fwd_msg = purple_xmlnode_get_child_with_namespace(forwarded, |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
606 | "message", |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
607 | NS_XMPP_CLIENT); |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
608 | if(fwd_msg != NULL) { |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
609 | PurpleXmlNode *delay = NULL; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
610 | |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
611 | /* We have a forwarded message, so update the packet to point |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
612 | * to it directly. |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
613 | */ |
|
40594
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
614 | packet = fwd_msg; |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
615 | is_forwarded = TRUE; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
616 | |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
617 | /* Now check if it was a delayed message and if so, grab the |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
618 | * timestamp that the server sent. |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
619 | */ |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
620 | delay = purple_xmlnode_get_child_with_namespace(forwarded, |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
621 | "delay", |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
622 | NS_DELAYED_DELIVERY); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
623 | if(delay != NULL) { |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
624 | const gchar *ts = purple_xmlnode_get_attrib(delay, |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
625 | "stamp"); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
626 | |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
627 | timestamp = purple_str_to_time(ts, TRUE, NULL, NULL, NULL); |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
628 | delayed = TRUE; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
629 | } |
|
40594
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
630 | } |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
631 | } |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
632 | } |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
633 | |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
634 | /* If the message was forwarded, packet is now pointing to the forwarded |
|
40594
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
635 | * message. |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
636 | */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
637 | from = purple_xmlnode_get_attrib(packet, "from"); |
|
40594
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
638 | id = purple_xmlnode_get_attrib(packet, "id"); |
|
e32ab786a04f
Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents:
40507
diff
changeset
|
639 | to = purple_xmlnode_get_attrib(packet, "to"); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
640 | type = purple_xmlnode_get_attrib(packet, "type"); |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
641 | |
|
36623
caaadef03507
Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents:
36545
diff
changeset
|
642 | signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(purple_connection_get_protocol(js->gc), |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
643 | "jabber-receiving-message", js->gc, type, id, from, to, packet)); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
644 | if (signal_return) |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
645 | return; |
| 7014 | 646 | |
| 647 | jm = g_new0(JabberMessage, 1); | |
| 648 | jm->js = js; | |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
649 | jm->sent = timestamp; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
650 | jm->delayed = delayed; |
|
27429
3313d7d74962
Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
651 | jm->chat_state = JM_STATE_NONE; |
|
40742
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
652 | jm->forwarded = is_forwarded; |
|
2fc55152b79c
Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents:
40726
diff
changeset
|
653 | jm->outgoing = is_outgoing; |
| 7014 | 654 | |
| 655 | if(type) { | |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
656 | if(purple_strequal(type, "normal")) |
| 7014 | 657 | jm->type = JABBER_MESSAGE_NORMAL; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
658 | else if(purple_strequal(type, "chat")) |
| 7014 | 659 | jm->type = JABBER_MESSAGE_CHAT; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
660 | else if(purple_strequal(type, "groupchat")) |
| 7014 | 661 | jm->type = JABBER_MESSAGE_GROUPCHAT; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
662 | else if(purple_strequal(type, "headline")) |
| 7014 | 663 | jm->type = JABBER_MESSAGE_HEADLINE; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
664 | else if(purple_strequal(type, "error")) |
| 7014 | 665 | jm->type = JABBER_MESSAGE_ERROR; |
| 666 | else | |
| 667 | jm->type = JABBER_MESSAGE_OTHER; | |
| 668 | } else { | |
| 669 | jm->type = JABBER_MESSAGE_NORMAL; | |
| 670 | } | |
| 671 | ||
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
672 | jm->from = g_strdup(from); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
673 | jm->to = g_strdup(to); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
27061
diff
changeset
|
674 | jm->id = g_strdup(id); |
| 7014 | 675 | |
| 676 | for(child = packet->child; child; child = child->next) { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
677 | const char *xmlns = purple_xmlnode_get_namespace(child); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
678 | if(child->type != PURPLE_XMLNODE_TYPE_TAG) |
| 7014 | 679 | continue; |
| 680 | ||
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
681 | if(purple_strequal(child->name, "error")) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
682 | const char *code = purple_xmlnode_get_attrib(child, "code"); |
|
25154
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
683 | char *code_txt = NULL; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
684 | char *text = purple_xmlnode_get_data(child); |
|
25154
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
685 | if (!text) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
686 | PurpleXmlNode *enclosed_text_node; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
687 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
688 | if ((enclosed_text_node = purple_xmlnode_get_child(child, "text"))) |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
689 | text = purple_xmlnode_get_data(enclosed_text_node); |
|
25154
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
690 | } |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
691 | |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
692 | if(code) |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
693 | code_txt = g_strdup_printf(_("(Code %s)"), code); |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
694 | |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
695 | if(!jm->error) |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
696 | jm->error = g_strdup_printf("%s%s%s", |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
697 | text ? text : "", |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
698 | text && code_txt ? " " : "", |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
699 | code_txt ? code_txt : ""); |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
700 | |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
701 | g_free(code_txt); |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
702 | g_free(text); |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
703 | } else if (xmlns == NULL) { |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
704 | /* QuLogic: Not certain this is correct, but it would have happened |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
705 | with the previous code. */ |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
706 | if(purple_strequal(child->name, "x")) |
|
25154
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
707 | jm->etc = g_list_append(jm->etc, child); |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
708 | /* The following tests expect xmlns != NULL */ |
|
492b9d6b48a5
Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
24800
diff
changeset
|
709 | continue; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
710 | } else if(purple_strequal(child->name, "subject") && purple_strequal(xmlns, NS_XMPP_CLIENT)) { |
|
26859
8175186cf34a
Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents:
26711
diff
changeset
|
711 | if(!jm->subject) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
712 | jm->subject = purple_xmlnode_get_data(child); |
|
26859
8175186cf34a
Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents:
26711
diff
changeset
|
713 | if(!jm->subject) |
|
8175186cf34a
Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents:
26711
diff
changeset
|
714 | jm->subject = g_strdup(""); |
|
8175186cf34a
Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents:
26711
diff
changeset
|
715 | } |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
716 | } else if(purple_strequal(child->name, "thread") && purple_strequal(xmlns, NS_XMPP_CLIENT)) { |
| 8400 | 717 | if(!jm->thread_id) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
718 | jm->thread_id = purple_xmlnode_get_data(child); |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
719 | } else if(purple_strequal(child->name, "body") && purple_strequal(xmlns, NS_XMPP_CLIENT)) { |
| 13385 | 720 | if(!jm->body) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
721 | char *msg = purple_xmlnode_get_data(child); |
|
30583
2482f350d8f5
jabber: Fix the last commit to pass escaped text off to the core.
Paul Aurich <darkrain42@pidgin.im>
parents:
30582
diff
changeset
|
722 | char *escaped = purple_markup_escape_text(msg, -1); |
|
2482f350d8f5
jabber: Fix the last commit to pass escaped text off to the core.
Paul Aurich <darkrain42@pidgin.im>
parents:
30582
diff
changeset
|
723 | jm->body = purple_strdup_withhtml(escaped); |
|
2482f350d8f5
jabber: Fix the last commit to pass escaped text off to the core.
Paul Aurich <darkrain42@pidgin.im>
parents:
30582
diff
changeset
|
724 | g_free(escaped); |
| 13385 | 725 | g_free(msg); |
| 726 | } | |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
727 | } else if(purple_strequal(child->name, "html") && purple_strequal(xmlns, NS_XHTML_IM)) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
728 | if(!jm->xhtml && purple_xmlnode_get_child(child, "body")) { |
|
17328
7a5668fb7bad
Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents:
16961
diff
changeset
|
729 | char *c; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
730 | |
|
39433
f033955d125a
Use G_DEFINE_TYPE_WITH_PRIVATE for PurpleConnection.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39065
diff
changeset
|
731 | PurpleConnection *gc = js->gc; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
732 | PurpleAccount *account = purple_connection_get_account(gc); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
733 | PurpleConversation *conv = NULL; |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
734 | GList *smiley_refs = NULL; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
735 | gchar *reformatted_xhtml; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
736 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
737 | if (purple_account_get_bool(account, "custom_smileys", TRUE)) { |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
738 | /* find a list of smileys ("cid" and "alt" text pairs) |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
739 | occuring in the message */ |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
740 | smiley_refs = jabber_message_get_refs_from_xmlnode(child); |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
741 | purple_debug_info("jabber", "found %d smileys\n", |
|
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
742 | g_list_length(smiley_refs)); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
743 | |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27131
diff
changeset
|
744 | if (smiley_refs) { |
|
26711
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
745 | if (jm->type == JABBER_MESSAGE_GROUPCHAT) { |
|
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
746 | JabberID *jid = jabber_id_new(jm->from); |
|
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
747 | JabberChat *chat = NULL; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
748 | |
|
26711
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
749 | if (jid) { |
|
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
750 | chat = jabber_chat_find(js, jid->node, jid->domain); |
|
27782
68314a2ac01b
Break the 'if' onto two lines and don't bother calling jabber_id_free()
Mark Doliner <markdoliner@pidgin.im>
parents:
27750
diff
changeset
|
751 | if (chat) |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
752 | conv = PURPLE_CONVERSATION(chat->conv); |
|
27782
68314a2ac01b
Break the 'if' onto two lines and don't bother calling jabber_id_free()
Mark Doliner <markdoliner@pidgin.im>
parents:
27750
diff
changeset
|
753 | jabber_id_free(jid); |
|
26711
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
754 | } |
|
26867
20bf84d510d8
Only look for and add custom smileys to incoming messages that are going to
Paul Aurich <darkrain42@pidgin.im>
parents:
26859
diff
changeset
|
755 | } else if (jm->type == JABBER_MESSAGE_NORMAL || |
|
20bf84d510d8
Only look for and add custom smileys to incoming messages that are going to
Paul Aurich <darkrain42@pidgin.im>
parents:
26859
diff
changeset
|
756 | jm->type == JABBER_MESSAGE_CHAT) { |
|
26711
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
757 | conv = |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
758 | purple_conversations_find_with_account(from, account); |
|
26711
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
759 | if (!conv) { |
|
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
760 | /* we need to create the conversation here */ |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
761 | conv = PURPLE_CONVERSATION( |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
762 | purple_im_conversation_new(account, from)); |
|
26711
07cfe1520055
Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents:
26687
diff
changeset
|
763 | } |
|
24257
d6402f066933
Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents:
24254
diff
changeset
|
764 | } |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
765 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
766 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
767 | /* process any newly provided smileys */ |
|
29912
4f8e1c3bbc4a
jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents:
29910
diff
changeset
|
768 | jabber_message_add_remote_smileys(js, to, packet); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
769 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
770 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
771 | purple_xmlnode_strip_prefixes(child); |
|
32323
df78cc32b2cd
jabber: Strip element prefixes on XHTML-IM content.
Paul Aurich <darkrain42@pidgin.im>
parents:
32277
diff
changeset
|
772 | |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
773 | /* reformat xhtml so that img tags with a "cid:" src gets |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
774 | translated to the bare text of the emoticon (the "alt" attrib) */ |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
775 | /* this is done also when custom smiley retrieval is turned off, |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
776 | this way the receiver always sees the shortcut instead */ |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
777 | reformatted_xhtml = |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
778 | jabber_message_xml_to_string_strip_img_smileys(child); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
779 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
780 | jm->xhtml = reformatted_xhtml; |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
781 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
782 | /* add known custom emoticons to the conversation */ |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
783 | /* note: if there were no smileys in the incoming message, or |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
784 | if receiving custom smileys is turned off, smiley_refs will |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
785 | be NULL */ |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
786 | if (conv) { |
|
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
787 | for (GList *it = smiley_refs; it; it = g_list_next(it)) { |
|
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
788 | PurpleKeyValuePair *ref = it->data; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
789 | |
|
35746
e4a656378516
Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35745
diff
changeset
|
790 | jabber_message_remote_smiley_add(js, |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
791 | conv, from, ref->value, ref->key); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
792 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
793 | } |
|
40798
52f630910634
Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40742
diff
changeset
|
794 | g_list_free_full(smiley_refs, (GDestroyNotify)purple_key_value_pair_free); |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
795 | |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
796 | /* Convert all newlines to whitespace. Technically, even regular, non-XML HTML is supposed to ignore newlines, but Pidgin has, as convention |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
797 | * treated \n as a newline for compatibility with other protocols |
|
17328
7a5668fb7bad
Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents:
16961
diff
changeset
|
798 | */ |
|
7a5668fb7bad
Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents:
16961
diff
changeset
|
799 | for (c = jm->xhtml; *c != '\0'; c++) { |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
800 | if (*c == '\n') |
|
17328
7a5668fb7bad
Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents:
16961
diff
changeset
|
801 | *c = ' '; |
|
7a5668fb7bad
Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents:
16961
diff
changeset
|
802 | } |
|
7a5668fb7bad
Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents:
16961
diff
changeset
|
803 | } |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
804 | } else if(purple_strequal(child->name, "active") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) { |
| 13708 | 805 | jm->chat_state = JM_STATE_ACTIVE; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
806 | } else if(purple_strequal(child->name, "composing") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) { |
| 13708 | 807 | jm->chat_state = JM_STATE_COMPOSING; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
808 | } else if(purple_strequal(child->name, "paused") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) { |
| 13708 | 809 | jm->chat_state = JM_STATE_PAUSED; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
810 | } else if(purple_strequal(child->name, "inactive") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) { |
| 13708 | 811 | jm->chat_state = JM_STATE_INACTIVE; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
812 | } else if(purple_strequal(child->name, "gone") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) { |
| 13708 | 813 | jm->chat_state = JM_STATE_GONE; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
814 | } else if(purple_strequal(child->name, "event") && purple_strequal(xmlns,"http://jabber.org/protocol/pubsub#event")) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
815 | PurpleXmlNode *items; |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17776
diff
changeset
|
816 | jm->type = JABBER_MESSAGE_EVENT; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
817 | for(items = purple_xmlnode_get_child(child,"items"); items; items = items->next) |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17776
diff
changeset
|
818 | jm->eventitems = g_list_append(jm->eventitems, items); |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
819 | } else if(purple_strequal(child->name, "attention") && purple_strequal(xmlns, NS_ATTENTION)) { |
|
17822
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
820 | jm->hasBuzz = TRUE; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
821 | } else if(purple_strequal(child->name, "delay") && purple_strequal(xmlns, NS_DELAYED_DELIVERY)) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
822 | const char *timestamp = purple_xmlnode_get_attrib(child, "stamp"); |
|
17811
d9a7ec9277f6
Implemented XEP-0203: Delayed Delivery
Andreas Monitzer <am@adiumx.com>
parents:
17792
diff
changeset
|
823 | jm->delayed = TRUE; |
|
d9a7ec9277f6
Implemented XEP-0203: Delayed Delivery
Andreas Monitzer <am@adiumx.com>
parents:
17792
diff
changeset
|
824 | if(timestamp) |
|
d9a7ec9277f6
Implemented XEP-0203: Delayed Delivery
Andreas Monitzer <am@adiumx.com>
parents:
17792
diff
changeset
|
825 | jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL); |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
826 | } else if(purple_strequal(child->name, "x")) { |
|
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
827 | if(purple_strequal(xmlns, NS_DELAYED_DELIVERY_LEGACY)) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
828 | const char *timestamp = purple_xmlnode_get_attrib(child, "stamp"); |
|
27434
7d8b32345d10
disapproval of revision '0c1545afc98299c6d7004554eb7443091d42e8ca'
Paul Aurich <darkrain42@pidgin.im>
parents:
27431
diff
changeset
|
829 | jm->delayed = TRUE; |
|
7d8b32345d10
disapproval of revision '0c1545afc98299c6d7004554eb7443091d42e8ca'
Paul Aurich <darkrain42@pidgin.im>
parents:
27431
diff
changeset
|
830 | if(timestamp) |
|
7d8b32345d10
disapproval of revision '0c1545afc98299c6d7004554eb7443091d42e8ca'
Paul Aurich <darkrain42@pidgin.im>
parents:
27431
diff
changeset
|
831 | jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL); |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
832 | } else if(purple_strequal(xmlns, "jabber:x:conference") && |
| 11230 | 833 | jm->type != JABBER_MESSAGE_GROUPCHAT_INVITE && |
| 834 | jm->type != JABBER_MESSAGE_ERROR) { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
835 | const char *jid = purple_xmlnode_get_attrib(child, "jid"); |
| 7014 | 836 | if(jid) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
837 | const char *reason = purple_xmlnode_get_attrib(child, "reason"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
838 | const char *password = purple_xmlnode_get_attrib(child, "password"); |
|
28703
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
839 | |
| 7014 | 840 | jm->type = JABBER_MESSAGE_GROUPCHAT_INVITE; |
| 841 | g_free(jm->to); | |
| 842 | jm->to = g_strdup(jid); | |
|
28703
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
843 | |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
844 | if (reason) { |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
845 | g_free(jm->body); |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
846 | jm->body = g_strdup(reason); |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
847 | } |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
848 | |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
849 | if (password) { |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
850 | g_free(jm->password); |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
851 | jm->password = g_strdup(password); |
|
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
852 | } |
| 7014 | 853 | } |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38256
diff
changeset
|
854 | } else if(purple_strequal(xmlns, "http://jabber.org/protocol/muc#user") && |
| 11230 | 855 | jm->type != JABBER_MESSAGE_ERROR) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
856 | PurpleXmlNode *invite = purple_xmlnode_get_child(child, "invite"); |
| 7014 | 857 | if(invite) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
858 | PurpleXmlNode *reason, *password; |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
859 | const char *jid = purple_xmlnode_get_attrib(invite, "from"); |
| 7014 | 860 | g_free(jm->to); |
| 861 | jm->to = jm->from; | |
| 862 | jm->from = g_strdup(jid); | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
863 | if((reason = purple_xmlnode_get_child(invite, "reason"))) { |
| 7014 | 864 | g_free(jm->body); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
865 | jm->body = purple_xmlnode_get_data(reason); |
| 7014 | 866 | } |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
867 | if((password = purple_xmlnode_get_child(child, "password"))) { |
|
28703
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
868 | g_free(jm->password); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
869 | jm->password = purple_xmlnode_get_data(password); |
|
28703
521344e75710
jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents:
28534
diff
changeset
|
870 | } |
| 7014 | 871 | |
| 872 | jm->type = JABBER_MESSAGE_GROUPCHAT_INVITE; | |
| 873 | } | |
| 7145 | 874 | } else { |
| 875 | jm->etc = g_list_append(jm->etc, child); | |
| 7014 | 876 | } |
|
38256
035f00c4fd87
Replace misused g_str_equal() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
31512
diff
changeset
|
877 | } else if (purple_strequal(child->name, "query")) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
878 | const char *node = purple_xmlnode_get_attrib(child, "node"); |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
879 | if (purple_strequal(xmlns, NS_DISCO_ITEMS) |
|
26871
d62964222795
Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents:
26867
diff
changeset
|
880 | && purple_strequal(node, "http://jabber.org/protocol/commands")) { |
|
d62964222795
Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents:
26867
diff
changeset
|
881 | jabber_adhoc_got_list(js, jm->from, child); |
|
d62964222795
Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents:
26867
diff
changeset
|
882 | } |
| 7014 | 883 | } |
| 884 | } | |
| 885 | ||
|
17822
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
886 | if(jm->hasBuzz) |
|
1a183f3fa9d7
disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents:
17821
diff
changeset
|
887 | handle_buzz(jm); |
| 7014 | 888 | |
| 889 | switch(jm->type) { | |
|
27900
23b6b4dfeb82
Allow fallback for broken XMPP <message/> types. Closes #7837.
Paul Aurich <darkrain42@pidgin.im>
parents:
27844
diff
changeset
|
890 | case JABBER_MESSAGE_OTHER: |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28726
diff
changeset
|
891 | purple_debug_info("jabber", |
|
27900
23b6b4dfeb82
Allow fallback for broken XMPP <message/> types. Closes #7837.
Paul Aurich <darkrain42@pidgin.im>
parents:
27844
diff
changeset
|
892 | "Received message of unknown type: %s\n", type); |
|
23b6b4dfeb82
Allow fallback for broken XMPP <message/> types. Closes #7837.
Paul Aurich <darkrain42@pidgin.im>
parents:
27844
diff
changeset
|
893 | /* Fall-through is intentional */ |
| 7014 | 894 | case JABBER_MESSAGE_NORMAL: |
| 895 | case JABBER_MESSAGE_CHAT: | |
| 7145 | 896 | handle_chat(jm); |
| 897 | break; | |
| 7014 | 898 | case JABBER_MESSAGE_HEADLINE: |
| 7145 | 899 | handle_headline(jm); |
| 7014 | 900 | break; |
| 901 | case JABBER_MESSAGE_GROUPCHAT: | |
| 902 | handle_groupchat(jm); | |
| 903 | break; | |
| 904 | case JABBER_MESSAGE_GROUPCHAT_INVITE: | |
| 905 | handle_groupchat_invite(jm); | |
| 906 | break; | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17776
diff
changeset
|
907 | case JABBER_MESSAGE_EVENT: |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17776
diff
changeset
|
908 | jabber_handle_event(jm); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17776
diff
changeset
|
909 | break; |
| 7014 | 910 | case JABBER_MESSAGE_ERROR: |
| 911 | handle_error(jm); | |
| 912 | break; | |
| 913 | } | |
| 914 | jabber_message_free(jm); | |
| 915 | } | |
| 916 | ||
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
917 | static gboolean |
| 29366 | 918 | jabber_conv_support_custom_smileys(JabberStream *js, |
|
40293
c60c4f96749d
Fix some line wrapping
Richard Laager <rlaager@pidgin.im>
parents:
40290
diff
changeset
|
919 | PurpleConversation *conv, const gchar *who) |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
920 | { |
|
24254
2d990726bf92
Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents:
23628
diff
changeset
|
921 | JabberBuddy *jb; |
|
27110
05ca719b901b
Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents:
27103
diff
changeset
|
922 | JabberChat *chat; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
923 | |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
924 | if (PURPLE_IS_IM_CONVERSATION(conv)) { |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
925 | jb = jabber_buddy_find(js, who, FALSE); |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
926 | if (jb) { |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
927 | return jabber_buddy_has_capability(jb, NS_BOB); |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
928 | } else { |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
929 | return FALSE; |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
930 | } |
|
35070
d7350d876fda
libpurple: Don't assume a conversation is always an IM or a chat
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
931 | } else if (PURPLE_IS_CHAT_CONVERSATION(conv)) { |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
932 | chat = jabber_chat_find_by_conv(PURPLE_CHAT_CONVERSATION(conv)); |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
933 | if (chat) { |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
934 | /* do not attempt to send custom smileys in a MUC with more than |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
935 | 10 people, to avoid getting too many BoB requests */ |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
936 | return jabber_chat_get_num_participants(chat) <= 10 && |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
937 | jabber_chat_all_participants_have_capability(chat, |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
938 | NS_BOB); |
|
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
939 | } else { |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
940 | return FALSE; |
|
34634
90fa70aa7e28
Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents:
34625
diff
changeset
|
941 | } |
|
35070
d7350d876fda
libpurple: Don't assume a conversation is always an IM or a chat
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
942 | } else { |
|
d7350d876fda
libpurple: Don't assume a conversation is always an IM or a chat
Ankit Vani <a@nevitus.org>
parents:
34935
diff
changeset
|
943 | return FALSE; |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
944 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
945 | } |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
946 | |
|
35788
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
947 | static gboolean |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
948 | jabber_message_smileyify_cb(GString *out, PurpleSmiley *smiley, |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
949 | PurpleConversation *_empty, gpointer _unused) |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
950 | { |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
951 | const gchar *shortcut; |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
952 | const JabberData *data; |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
953 | PurpleXmlNode *smiley_node; |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
954 | gchar *node_xml; |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
955 | |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
956 | shortcut = purple_smiley_get_shortcut(smiley); |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
957 | data = jabber_data_find_local_by_alt(shortcut); |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
958 | |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
959 | if (!data) |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
960 | return FALSE; |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
961 | |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
962 | smiley_node = jabber_data_get_xhtml_im(data, shortcut); |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
963 | node_xml = purple_xmlnode_to_str(smiley_node, NULL); |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
964 | |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
965 | g_string_append(out, node_xml); |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
966 | |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
967 | purple_xmlnode_free(smiley_node); |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
968 | g_free(node_xml); |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
969 | |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
970 | return TRUE; |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
971 | } |
|
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
972 | |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
973 | static char * |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
974 | jabber_message_smileyfy_xhtml(JabberMessage *jm, const char *xhtml) |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
975 | { |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
976 | PurpleAccount *account = purple_connection_get_account(jm->js->gc); |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
977 | GList *found_smileys, *it, *it_next; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
978 | PurpleConversation *conv; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
979 | gboolean has_too_large_smiley = FALSE; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
980 | gchar *smileyfied_xhtml = NULL; |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
981 | |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
982 | conv = purple_conversations_find_with_account(jm->to, account); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30744
diff
changeset
|
983 | |
|
35758
87c51487e197
Fix g_slist_remove_link misuse, remove debug printfs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35757
diff
changeset
|
984 | if (!jabber_conv_support_custom_smileys(jm->js, conv, jm->to)) |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
985 | return NULL; |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
986 | |
|
35792
d18a48a68edf
Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35788
diff
changeset
|
987 | found_smileys = purple_smiley_parser_find( |
|
d18a48a68edf
Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35788
diff
changeset
|
988 | purple_smiley_custom_get_list(), xhtml, TRUE); |
|
35758
87c51487e197
Fix g_slist_remove_link misuse, remove debug printfs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35757
diff
changeset
|
989 | if (!found_smileys) |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
990 | return NULL; |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
991 | |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
992 | for (it = found_smileys; it; it = it_next) { |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
993 | PurpleSmiley *smiley = it->data; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
994 | gboolean valid = TRUE; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
995 | |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
996 | it_next = g_list_next(it); |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
997 | |
|
38298
f0a8f63f9312
rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents:
38287
diff
changeset
|
998 | if (purple_image_get_data_size(PURPLE_IMAGE(smiley)) > JABBER_DATA_MAX_SIZE) { |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
999 | has_too_large_smiley = TRUE; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1000 | valid = FALSE; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1001 | purple_debug_warning("jabber", "Refusing to send " |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1002 | "smiley %s (too large, max is %d)", |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1003 | purple_smiley_get_shortcut(smiley), |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1004 | JABBER_DATA_MAX_SIZE); |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1005 | } |
|
29270
642d7a9e5f0a
jabber: Don't print the smiley shortcut in the error message when trying to
Marcus Lundblad <malu@pidgin.im>
parents:
29269
diff
changeset
|
1006 | |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1007 | if (!valid) |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1008 | found_smileys = g_list_delete_link(found_smileys, it); |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1009 | } |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1010 | |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1011 | if (has_too_large_smiley) { |
|
36089
c035b9a63457
Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36084
diff
changeset
|
1012 | purple_conversation_write_system_message(conv, |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1013 | _("A custom smiley in the message is too large to send."), |
|
36089
c035b9a63457
Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36084
diff
changeset
|
1014 | PURPLE_MESSAGE_ERROR); |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1015 | } |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1016 | |
|
35758
87c51487e197
Fix g_slist_remove_link misuse, remove debug printfs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35757
diff
changeset
|
1017 | if (!found_smileys) |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1018 | return NULL; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1019 | |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1020 | for (it = found_smileys; it; it = g_list_next(it)) { |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1021 | PurpleSmiley *smiley = it->data; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1022 | const gchar *shortcut = purple_smiley_get_shortcut(smiley); |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1023 | const gchar *mimetype; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1024 | JabberData *jdata; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1025 | |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1026 | /* the object has been sent before */ |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1027 | if (jabber_data_find_local_by_alt(shortcut)) |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1028 | continue; |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1029 | |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
1030 | mimetype = purple_image_get_mimetype(PURPLE_IMAGE(smiley)); |
|
35823
268a9d3b3fd7
imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35792
diff
changeset
|
1031 | if (!mimetype) { |
|
268a9d3b3fd7
imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35792
diff
changeset
|
1032 | purple_debug_error("jabber", |
|
268a9d3b3fd7
imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35792
diff
changeset
|
1033 | "unknown mime type for image"); |
|
268a9d3b3fd7
imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35792
diff
changeset
|
1034 | continue; |
|
268a9d3b3fd7
imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35792
diff
changeset
|
1035 | } |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1036 | |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1037 | jdata = jabber_data_create_from_data( |
|
38282
be08ec8b8628
This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents:
38281
diff
changeset
|
1038 | purple_image_get_data(PURPLE_IMAGE(smiley)), |
|
38298
f0a8f63f9312
rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents:
38287
diff
changeset
|
1039 | purple_image_get_data_size(PURPLE_IMAGE(smiley)), |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1040 | mimetype, FALSE, jm->js); |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1041 | |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1042 | purple_debug_info("jabber", "cache local smiley alt=%s, cid=%s", |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1043 | shortcut, jabber_data_get_cid(jdata)); |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1044 | jabber_data_associate_local(jdata, shortcut); |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1045 | } |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1046 | |
|
35788
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
1047 | g_list_free(found_smileys); |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1048 | |
|
35792
d18a48a68edf
Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35788
diff
changeset
|
1049 | smileyfied_xhtml = purple_smiley_parser_replace( |
|
d18a48a68edf
Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35788
diff
changeset
|
1050 | purple_smiley_custom_get_list(), xhtml, |
|
35788
afa6d777bc7c
Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35787
diff
changeset
|
1051 | jabber_message_smileyify_cb, NULL); |
|
35757
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1052 | |
|
05981ff3fb7b
Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35746
diff
changeset
|
1053 | return smileyfied_xhtml; |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1054 | } |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1055 | |
| 7014 | 1056 | void jabber_message_send(JabberMessage *jm) |
| 1057 | { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1058 | PurpleXmlNode *message, *child; |
| 7014 | 1059 | const char *type = NULL; |
| 1060 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1061 | message = purple_xmlnode_new("message"); |
| 7014 | 1062 | |
| 1063 | switch(jm->type) { | |
| 1064 | case JABBER_MESSAGE_NORMAL: | |
| 1065 | type = "normal"; | |
| 1066 | break; | |
| 1067 | case JABBER_MESSAGE_CHAT: | |
| 1068 | case JABBER_MESSAGE_GROUPCHAT_INVITE: | |
| 1069 | type = "chat"; | |
| 1070 | break; | |
| 1071 | case JABBER_MESSAGE_HEADLINE: | |
| 1072 | type = "headline"; | |
| 1073 | break; | |
| 1074 | case JABBER_MESSAGE_GROUPCHAT: | |
| 1075 | type = "groupchat"; | |
| 1076 | break; | |
| 1077 | case JABBER_MESSAGE_ERROR: | |
| 1078 | type = "error"; | |
| 1079 | break; | |
| 1080 | case JABBER_MESSAGE_OTHER: | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17776
diff
changeset
|
1081 | default: |
| 7014 | 1082 | type = NULL; |
| 1083 | break; | |
| 1084 | } | |
| 1085 | ||
| 1086 | if(type) | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1087 | purple_xmlnode_set_attrib(message, "type", type); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
25983
diff
changeset
|
1088 | |
| 13484 | 1089 | if (jm->id) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1090 | purple_xmlnode_set_attrib(message, "id", jm->id); |
| 7014 | 1091 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1092 | purple_xmlnode_set_attrib(message, "to", jm->to); |
| 7014 | 1093 | |
| 8400 | 1094 | if(jm->thread_id) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1095 | child = purple_xmlnode_new_child(message, "thread"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1096 | purple_xmlnode_insert_data(child, jm->thread_id, -1); |
| 8400 | 1097 | } |
| 1098 | ||
| 27432 | 1099 | child = NULL; |
| 1100 | switch(jm->chat_state) | |
| 1101 | { | |
| 1102 | case JM_STATE_ACTIVE: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1103 | child = purple_xmlnode_new_child(message, "active"); |
| 27432 | 1104 | break; |
| 1105 | case JM_STATE_COMPOSING: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1106 | child = purple_xmlnode_new_child(message, "composing"); |
| 27432 | 1107 | break; |
| 1108 | case JM_STATE_PAUSED: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1109 | child = purple_xmlnode_new_child(message, "paused"); |
| 27432 | 1110 | break; |
| 1111 | case JM_STATE_INACTIVE: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1112 | child = purple_xmlnode_new_child(message, "inactive"); |
| 27432 | 1113 | break; |
| 1114 | case JM_STATE_GONE: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1115 | child = purple_xmlnode_new_child(message, "gone"); |
| 27432 | 1116 | break; |
| 1117 | case JM_STATE_NONE: | |
| 1118 | /* yep, nothing */ | |
| 1119 | break; | |
| 7014 | 1120 | } |
| 27432 | 1121 | if(child) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1122 | purple_xmlnode_set_namespace(child, "http://jabber.org/protocol/chatstates"); |
| 13708 | 1123 | |
| 7014 | 1124 | if(jm->subject) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1125 | child = purple_xmlnode_new_child(message, "subject"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1126 | purple_xmlnode_insert_data(child, jm->subject, -1); |
| 7014 | 1127 | } |
| 1128 | ||
| 1129 | if(jm->body) { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1130 | child = purple_xmlnode_new_child(message, "body"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1131 | purple_xmlnode_insert_data(child, jm->body, -1); |
| 7014 | 1132 | } |
| 1133 | ||
| 1134 | if(jm->xhtml) { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1135 | if ((child = purple_xmlnode_from_str(jm->xhtml, -1))) { |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1136 | purple_xmlnode_insert_child(message, child); |
| 7014 | 1137 | } else { |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28726
diff
changeset
|
1138 | purple_debug_error("jabber", |
| 7014 | 1139 | "XHTML translation/validation failed, returning: %s\n", |
| 1140 | jm->xhtml); | |
| 1141 | } | |
| 1142 | } | |
| 1143 | ||
| 1144 | jabber_send(jm->js, message); | |
| 1145 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34728
diff
changeset
|
1146 | purple_xmlnode_free(message); |
| 7014 | 1147 | } |
| 1148 | ||
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1149 | /* |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1150 | * Compare the XHTML and plain strings passed in for "equality". Any HTML markup |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1151 | * other than <br/> (matches a newline) in the XHTML will cause this to return |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1152 | * FALSE. |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1153 | */ |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1154 | static gboolean |
|
40293
c60c4f96749d
Fix some line wrapping
Richard Laager <rlaager@pidgin.im>
parents:
40290
diff
changeset
|
1155 | jabber_xhtml_plain_equal(const char *xhtml_escaped, const char *plain) |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1156 | { |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1157 | int i = 0; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1158 | int j = 0; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1159 | gboolean ret; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1160 | char *xhtml = purple_unescape_html(xhtml_escaped); |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1161 | |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1162 | while (xhtml[i] && plain[j]) { |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1163 | if (xhtml[i] == plain[j]) { |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1164 | i += 1; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1165 | j += 1; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1166 | continue; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1167 | } |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1168 | |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1169 | if (plain[j] == '\n' && !strncmp(xhtml+i, "<br/>", 5)) { |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1170 | i += 5; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1171 | j += 1; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1172 | continue; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1173 | } |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1174 | |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1175 | g_free(xhtml); |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1176 | return FALSE; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1177 | } |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1178 | |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1179 | /* Are we at the end of both strings? */ |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1180 | ret = (xhtml[i] == plain[j]) && (xhtml[i] == '\0'); |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1181 | g_free(xhtml); |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1182 | return ret; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1183 | } |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1184 | |
|
40507
77d7bc9e5151
Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
1185 | int jabber_message_send_im(PurpleProtocolIM *pim, PurpleConnection *gc, |
|
77d7bc9e5151
Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
1186 | PurpleMessage *msg) |
| 7014 | 1187 | { |
| 1188 | JabberMessage *jm; | |
| 1189 | JabberBuddy *jb; | |
| 1190 | JabberBuddyResource *jbr; | |
| 7135 | 1191 | char *xhtml; |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1192 | char *tmp; |
| 7306 | 1193 | char *resource; |
|
36098
4951752ad038
Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36092
diff
changeset
|
1194 | const gchar *rcpt = purple_message_get_recipient(msg); |
| 7014 | 1195 | |
|
36098
4951752ad038
Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36092
diff
changeset
|
1196 | if (!rcpt || purple_message_is_empty(msg)) |
| 7014 | 1197 | return 0; |
| 1198 | ||
|
36098
4951752ad038
Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36092
diff
changeset
|
1199 | resource = jabber_get_resource(rcpt); |
|
31512
b1c0ce2787e6
jabber: Verbose printing of the exact message passed in to jabber_message_send_im.
Paul Aurich <darkrain42@pidgin.im>
parents:
31294
diff
changeset
|
1200 | |
|
36098
4951752ad038
Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36092
diff
changeset
|
1201 | jb = jabber_buddy_find(purple_connection_get_protocol_data(gc), rcpt, TRUE); |
| 7306 | 1202 | jbr = jabber_buddy_find_resource(jb, resource); |
| 1203 | ||
| 1204 | g_free(resource); | |
| 7014 | 1205 | |
| 1206 | jm = g_new0(JabberMessage, 1); | |
|
32277
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31512
diff
changeset
|
1207 | jm->js = purple_connection_get_protocol_data(gc); |
| 7014 | 1208 | jm->type = JABBER_MESSAGE_CHAT; |
| 13708 | 1209 | jm->chat_state = JM_STATE_ACTIVE; |
|
36098
4951752ad038
Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36092
diff
changeset
|
1210 | jm->to = g_strdup(rcpt); |
| 13484 | 1211 | jm->id = jabber_get_next_id(jm->js); |
| 13708 | 1212 | |
| 1213 | if(jbr) { | |
| 1214 | if(jbr->thread_id) | |
| 1215 | jm->thread_id = jbr->thread_id; | |
| 1216 | ||
|
27429
3313d7d74962
Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1217 | if (jbr->chat_states == JABBER_CHAT_STATES_UNSUPPORTED) |
|
3313d7d74962
Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1218 | jm->chat_state = JM_STATE_NONE; |
|
3313d7d74962
Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1219 | else { |
| 13708 | 1220 | /* if(JABBER_CHAT_STATES_UNKNOWN == jbr->chat_states) |
| 1221 | jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED; */ | |
| 1222 | } | |
| 1223 | } | |
| 7014 | 1224 | |
|
36076
a0e5b68ff4ef
Switch purple_serv_send_im to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35838
diff
changeset
|
1225 | tmp = purple_utf8_strip_unprintables(purple_message_get_contents(msg)); |
|
27237
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27155
diff
changeset
|
1226 | purple_markup_html_to_xhtml(tmp, &xhtml, &jm->body); |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27155
diff
changeset
|
1227 | g_free(tmp); |
|
29229
1fd36e207795
jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents:
28996
diff
changeset
|
1228 | |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1229 | tmp = jabber_message_smileyfy_xhtml(jm, xhtml); |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1230 | if (tmp) { |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1231 | g_free(xhtml); |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1232 | xhtml = tmp; |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1233 | } |
| 7014 | 1234 | |
|
27746
4b3f015977d9
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1235 | /* |
|
4b3f015977d9
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1236 | * For backward compatibility with user expectations or for those not on |
|
4b3f015977d9
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1237 | * the user's roster, allow sending XHTML-IM markup. |
|
4b3f015977d9
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1238 | */ |
|
4b3f015977d9
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1239 | if (!jbr || !jbr->caps.info || |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
1240 | jabber_resource_has_capability(jbr, NS_XHTML_IM)) { |
|
27746
4b3f015977d9
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1241 | if (!jabber_xhtml_plain_equal(xhtml, jm->body)) |
|
29229
1fd36e207795
jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents:
28996
diff
changeset
|
1242 | /* Wrap the message in <p/> for great interoperability justice. */ |
|
1fd36e207795
jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents:
28996
diff
changeset
|
1243 | jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'><p>%s</p></body></html>", xhtml); |
|
27746
4b3f015977d9
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1244 | } |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1245 | |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1246 | g_free(xhtml); |
| 7014 | 1247 | |
| 1248 | jabber_message_send(jm); | |
| 1249 | jabber_message_free(jm); | |
| 1250 | return 1; | |
| 1251 | } | |
| 1252 | ||
|
40697
81f81f5d2f39
Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents:
40594
diff
changeset
|
1253 | gint |
|
81f81f5d2f39
Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents:
40594
diff
changeset
|
1254 | jabber_message_send_chat(PurpleProtocolChat *protocol_chat, |
|
81f81f5d2f39
Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents:
40594
diff
changeset
|
1255 | PurpleConnection *gc, gint id, PurpleMessage *msg) |
| 7014 | 1256 | { |
| 1257 | JabberChat *chat; | |
| 1258 | JabberMessage *jm; | |
| 8042 | 1259 | JabberStream *js; |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1260 | char *xhtml; |
|
27110
05ca719b901b
Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents:
27103
diff
changeset
|
1261 | char *tmp; |
| 7014 | 1262 | |
|
36077
b7328f4317c7
Switch purple_serv_chat_send to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36076
diff
changeset
|
1263 | if (!gc || purple_message_is_empty(msg)) |
| 7014 | 1264 | return 0; |
| 1265 | ||
|
32277
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31512
diff
changeset
|
1266 | js = purple_connection_get_protocol_data(gc); |
| 7014 | 1267 | chat = jabber_chat_find_by_id(js, id); |
| 1268 | ||
| 8043 | 1269 | if(!chat) |
| 1270 | return 0; | |
| 1271 | ||
| 9130 | 1272 | jm = g_new0(JabberMessage, 1); |
|
32277
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
31512
diff
changeset
|
1273 | jm->js = purple_connection_get_protocol_data(gc); |
| 9130 | 1274 | jm->type = JABBER_MESSAGE_GROUPCHAT; |
| 1275 | jm->to = g_strdup_printf("%s@%s", chat->room, chat->server); | |
| 13484 | 1276 | jm->id = jabber_get_next_id(jm->js); |
| 9130 | 1277 | |
|
36077
b7328f4317c7
Switch purple_serv_chat_send to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36076
diff
changeset
|
1278 | tmp = purple_utf8_strip_unprintables(purple_message_get_contents(msg)); |
|
28534
df58e9ce5eca
Oops, it helps to actually use the stripped message.
Paul Aurich <darkrain42@pidgin.im>
parents:
28442
diff
changeset
|
1279 | purple_markup_html_to_xhtml(tmp, &xhtml, &jm->body); |
|
27237
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27155
diff
changeset
|
1280 | g_free(tmp); |
|
27110
05ca719b901b
Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents:
27103
diff
changeset
|
1281 | tmp = jabber_message_smileyfy_xhtml(jm, xhtml); |
|
05ca719b901b
Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents:
27103
diff
changeset
|
1282 | if (tmp) { |
|
05ca719b901b
Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents:
27103
diff
changeset
|
1283 | g_free(xhtml); |
|
05ca719b901b
Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents:
27103
diff
changeset
|
1284 | xhtml = tmp; |
|
05ca719b901b
Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents:
27103
diff
changeset
|
1285 | } |
| 8858 | 1286 | |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1287 | if (chat->xhtml && !jabber_xhtml_plain_equal(xhtml, jm->body)) |
|
29229
1fd36e207795
jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents:
28996
diff
changeset
|
1288 | /* Wrap the message in <p/> for greater interoperability justice. */ |
|
1fd36e207795
jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents:
28996
diff
changeset
|
1289 | jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'><p>%s</p></body></html>", xhtml); |
|
27061
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1290 | |
|
b1bfbf77cf90
Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents:
26984
diff
changeset
|
1291 | g_free(xhtml); |
| 7923 | 1292 | |
| 9130 | 1293 | jabber_message_send(jm); |
| 1294 | jabber_message_free(jm); | |
| 1295 | ||
| 7014 | 1296 | return 1; |
| 1297 | } | |
| 1298 | ||
|
40507
77d7bc9e5151
Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
1299 | unsigned int jabber_send_typing(PurpleProtocolIM *pim, PurpleConnection *gc, |
|
77d7bc9e5151
Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
1300 | const char *who, PurpleIMTypingState state) |
| 7014 | 1301 | { |
|
30454
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1302 | JabberStream *js; |
| 7014 | 1303 | JabberMessage *jm; |
| 1304 | JabberBuddy *jb; | |
| 1305 | JabberBuddyResource *jbr; | |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30744
diff
changeset
|
1306 | char *resource; |
| 7014 | 1307 | |
|
30454
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1308 | js = purple_connection_get_protocol_data(gc); |
|
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1309 | jb = jabber_buddy_find(js, who, TRUE); |
|
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1310 | if (!jb) |
|
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1311 | return 0; |
|
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1312 | |
|
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1313 | resource = jabber_get_resource(who); |
| 7306 | 1314 | jbr = jabber_buddy_find_resource(jb, resource); |
| 1315 | g_free(resource); | |
| 7014 | 1316 | |
|
30235
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1317 | /* We know this entity doesn't support chat states */ |
|
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1318 | if (jbr && jbr->chat_states == JABBER_CHAT_STATES_UNSUPPORTED) |
|
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1319 | return 0; |
|
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1320 | |
|
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1321 | /* *If* we don't have presence /and/ the buddy can't see our |
|
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1322 | * presence, don't send typing notifications. |
|
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1323 | */ |
|
d37c441d6a48
jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents:
30121
diff
changeset
|
1324 | if (!jbr && !(jb->subscription & JABBER_SUB_FROM)) |
| 7014 | 1325 | return 0; |
| 1326 | ||
| 13708 | 1327 | /* TODO: figure out threading */ |
| 7014 | 1328 | jm = g_new0(JabberMessage, 1); |
|
30454
4e9bf65cfe9a
jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents:
30239
diff
changeset
|
1329 | jm->js = js; |
| 7014 | 1330 | jm->type = JABBER_MESSAGE_CHAT; |
| 1331 | jm->to = g_strdup(who); | |
| 13484 | 1332 | jm->id = jabber_get_next_id(jm->js); |
| 7014 | 1333 | |
|
34670
9bd5bd903dc7
Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents:
34634
diff
changeset
|
1334 | if(PURPLE_IM_TYPING == state) |
| 13708 | 1335 | jm->chat_state = JM_STATE_COMPOSING; |
|
34670
9bd5bd903dc7
Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents:
34634
diff
changeset
|
1336 | else if(PURPLE_IM_TYPED == state) |
| 13708 | 1337 | jm->chat_state = JM_STATE_PAUSED; |
| 1338 | else | |
| 1339 | jm->chat_state = JM_STATE_ACTIVE; | |
| 1340 | ||
|
27429
3313d7d74962
Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1341 | /* if(JABBER_CHAT_STATES_UNKNOWN == jbr->chat_states) |
|
3313d7d74962
Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
1342 | jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED; */ |
| 7014 | 1343 | |
| 1344 | jabber_message_send(jm); | |
| 1345 | jabber_message_free(jm); | |
| 1346 | ||
| 13708 | 1347 | return 0; |
| 7014 | 1348 | } |
| 1349 | ||
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23249
diff
changeset
|
1350 | gboolean jabber_buzz_isenabled(JabberStream *js, const gchar *namespace) { |
|
17824
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17823
diff
changeset
|
1351 | return js->allowBuzz; |
|
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17823
diff
changeset
|
1352 | } |
|
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17823
diff
changeset
|
1353 | |
|
24715
69aaae59e205
Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents:
24714
diff
changeset
|
1354 | gboolean jabber_custom_smileys_isenabled(JabberStream *js, const gchar *namespace) |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
1355 | { |
|
39433
f033955d125a
Use G_DEFINE_TYPE_WITH_PRIVATE for PurpleConnection.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39065
diff
changeset
|
1356 | PurpleAccount *account = purple_connection_get_account(js->gc); |
|
23627
dbdc407798af
A couple of leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23626
diff
changeset
|
1357 | |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
1358 | return purple_account_get_bool(account, "custom_smileys", TRUE); |
|
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23249
diff
changeset
|
1359 | } |