Wed, 13 May 2009 20:29:03 +0000
Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.
| 17776 | 1 | /* |
| 2 | * purple - Jabber Protocol Plugin | |
| 3 | * | |
| 4 | * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com> | |
| 5 | * | |
| 6 | * This program is free software; you can redistribute it and/or modify | |
| 7 | * it under the terms of the GNU General Public License as published by | |
| 8 | * the Free Software Foundation; either version 2 of the License, or | |
| 9 | * (at your option) any later version. | |
| 10 | * | |
| 11 | * This program is distributed in the hope that it will be useful, | |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 17776 | 14 | * GNU General Public License for more details. |
| 15 | * | |
| 16 | * You should have received a copy of the GNU General Public License | |
| 17 | * along with this program; if not, write to the Free Software | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 17776 | 19 | * |
| 20 | */ | |
| 21 | ||
|
19898
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
19391
diff
changeset
|
22 | #include "internal.h" |
|
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
19391
diff
changeset
|
23 | |
| 17776 | 24 | #include "usermood.h" |
| 25 | #include "pep.h" | |
| 26 | #include <string.h> | |
|
17780
749862fd4a87
Fixed a few small mistakes I discovered while testing user mood in Adium.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
27 | #include "internal.h" |
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
28 | #include "request.h" |
|
20226
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
29 | #include "debug.h" |
| 17776 | 30 | |
|
21091
07fe1a99c47b
Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents:
20226
diff
changeset
|
31 | static const char * const moodstrings[] = { |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
32 | "afraid", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
33 | "amazed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
34 | "angry", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
35 | "annoyed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
36 | "anxious", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
37 | "aroused", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
38 | "ashamed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
39 | "bored", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
40 | "brave", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
41 | "calm", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
42 | "cold", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
43 | "confused", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
44 | "contented", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
45 | "cranky", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
46 | "curious", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
47 | "depressed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
48 | "disappointed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
49 | "disgusted", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
50 | "distracted", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
51 | "embarrassed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
52 | "excited", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
53 | "flirtatious", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
54 | "frustrated", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
55 | "grumpy", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
56 | "guilty", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
57 | "happy", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
58 | "hot", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
59 | "humbled", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
60 | "humiliated", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
61 | "hungry", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
62 | "hurt", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
63 | "impressed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
64 | "in_awe", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
65 | "in_love", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
66 | "indignant", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
67 | "interested", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
68 | "intoxicated", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
69 | "invincible", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
70 | "jealous", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
71 | "lonely", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
72 | "mean", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
73 | "moody", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
74 | "nervous", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
75 | "neutral", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
76 | "offended", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
77 | "playful", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
78 | "proud", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
79 | "relieved", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
80 | "remorseful", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
81 | "restless", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
82 | "sad", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
83 | "sarcastic", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
84 | "serious", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
85 | "shocked", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
86 | "shy", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
87 | "sick", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
88 | "sleepy", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
89 | "stressed", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
90 | "surprised", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
91 | "thirsty", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
92 | "worried", |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
93 | NULL |
| 17776 | 94 | }; |
| 95 | ||
| 96 | static void jabber_mood_cb(JabberStream *js, const char *from, xmlnode *items) { | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
97 | /* it doesn't make sense to have more than one item here, so let's just pick the first one */ |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
98 | xmlnode *item = xmlnode_get_child(items, "item"); |
|
19391
e9a2be88e565
Initialize newmood to NULL, as there are codepaths by which we can check against whether it is NULL or not before setting it, and that's bad.
Evan Schoenberg <evands@pidgin.im>
parents:
17803
diff
changeset
|
99 | const char *newmood = NULL; |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
100 | char *moodtext = NULL; |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
101 | JabberBuddy *buddy = jabber_buddy_find(js, from, FALSE); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
102 | xmlnode *moodinfo, *mood; |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
103 | /* ignore the mood of people not on our buddy list */ |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
104 | if (!buddy || !item) |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
105 | return; |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22943
diff
changeset
|
106 | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
107 | mood = xmlnode_get_child_with_namespace(item, "mood", "http://jabber.org/protocol/mood"); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
108 | if (!mood) |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
109 | return; |
|
17790
02519364ff3f
Fixed a minor mistake which could leave the usermood to be parsed incompletely.
Andreas Monitzer <am@adiumx.com>
parents:
17787
diff
changeset
|
110 | for (moodinfo = mood->child; moodinfo; moodinfo = moodinfo->next) { |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
111 | if (moodinfo->type == XMLNODE_TYPE_TAG) { |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
112 | if (!strcmp(moodinfo->name, "text")) { |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
113 | if (!moodtext) /* only pick the first one */ |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
114 | moodtext = xmlnode_get_data(moodinfo); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
115 | } else { |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
116 | int i; |
|
17781
d11010274b7a
Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <am@adiumx.com>
parents:
17780
diff
changeset
|
117 | for (i = 0; moodstrings[i]; ++i) { |
|
d11010274b7a
Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <am@adiumx.com>
parents:
17780
diff
changeset
|
118 | /* verify that the mood is known (valid) */ |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
119 | if (!strcmp(moodinfo->name, moodstrings[i])) { |
|
17781
d11010274b7a
Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <am@adiumx.com>
parents:
17780
diff
changeset
|
120 | newmood = moodstrings[i]; |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
121 | break; |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
122 | } |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
123 | } |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
124 | } |
|
17781
d11010274b7a
Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <am@adiumx.com>
parents:
17780
diff
changeset
|
125 | if (newmood != NULL && moodtext != NULL) |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
126 | break; |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
127 | } |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
128 | } |
|
17781
d11010274b7a
Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <am@adiumx.com>
parents:
17780
diff
changeset
|
129 | if (newmood != NULL) { |
|
19899
483c4f495a6c
Various warning fixes for the xmpp prpl.
Daniel Atallah <datallah@pidgin.im>
parents:
19898
diff
changeset
|
130 | const char *status_id; |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
131 | JabberBuddyResource *resource = jabber_buddy_find_resource(buddy, NULL); |
|
17803
882abe4d932e
Implemented XEP-0172: User Nickname, fixed some potential crashers in the other PEP callbacks.
Andreas Monitzer <am@adiumx.com>
parents:
17790
diff
changeset
|
132 | if(!resource) { /* huh? */ |
|
19899
483c4f495a6c
Various warning fixes for the xmpp prpl.
Daniel Atallah <datallah@pidgin.im>
parents:
19898
diff
changeset
|
133 | g_free(moodtext); |
|
17803
882abe4d932e
Implemented XEP-0172: User Nickname, fixed some potential crashers in the other PEP callbacks.
Andreas Monitzer <am@adiumx.com>
parents:
17790
diff
changeset
|
134 | return; |
|
882abe4d932e
Implemented XEP-0172: User Nickname, fixed some potential crashers in the other PEP callbacks.
Andreas Monitzer <am@adiumx.com>
parents:
17790
diff
changeset
|
135 | } |
|
19899
483c4f495a6c
Various warning fixes for the xmpp prpl.
Daniel Atallah <datallah@pidgin.im>
parents:
19898
diff
changeset
|
136 | status_id = jabber_buddy_state_get_status_id(resource->state); |
|
483c4f495a6c
Various warning fixes for the xmpp prpl.
Daniel Atallah <datallah@pidgin.im>
parents:
19898
diff
changeset
|
137 | |
|
17781
d11010274b7a
Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <am@adiumx.com>
parents:
17780
diff
changeset
|
138 | purple_prpl_got_user_status(js->gc->account, from, status_id, "mood", _(newmood), "moodtext", moodtext?moodtext:"", NULL); |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
139 | } |
|
19899
483c4f495a6c
Various warning fixes for the xmpp prpl.
Daniel Atallah <datallah@pidgin.im>
parents:
19898
diff
changeset
|
140 | g_free(moodtext); |
| 17776 | 141 | } |
| 142 | ||
| 143 | void jabber_mood_init(void) { | |
|
23586
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
22943
diff
changeset
|
144 | jabber_add_feature("http://jabber.org/protocol/mood", jabber_pep_namespace_only_when_pep_enabled_cb); |
|
e495a4623f76
Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
22943
diff
changeset
|
145 | jabber_pep_register_handler("http://jabber.org/protocol/mood", jabber_mood_cb); |
| 17776 | 146 | } |
| 147 | ||
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
148 | static void do_mood_set_from_fields(PurpleConnection *gc, PurpleRequestFields *fields) { |
|
20226
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
149 | JabberStream *js; |
|
22943
489cf7a4ac62
Don't count the size of an array at runtime if it's known at compile time.
Ethan Blanton <elb@pidgin.im>
parents:
21630
diff
changeset
|
150 | const int max_mood_idx = sizeof(moodstrings) / sizeof(moodstrings[0]) - 1; |
|
20226
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
151 | int selected_mood = purple_request_fields_get_choice(fields, "mood"); |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
152 | |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
153 | if (!PURPLE_CONNECTION_IS_VALID(gc)) { |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
154 | purple_debug_error("jabber", "Unable to set mood; account offline.\n"); |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
155 | return; |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
156 | } |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
157 | |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
158 | js = gc->proto_data; |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
159 | |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
160 | if (selected_mood < 0 || selected_mood >= max_mood_idx) { |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
161 | purple_debug_error("jabber", "Invalid mood index (%d) selected.\n", selected_mood); |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
162 | return; |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
163 | } |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
164 | |
|
282d0c1feb58
applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents:
19994
diff
changeset
|
165 | jabber_mood_set(js, moodstrings[selected_mood], purple_request_fields_get_string(fields, "text")); |
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
166 | } |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
167 | |
|
17782
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
168 | static void do_mood_set_mood(PurplePluginAction *action) { |
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
169 | PurpleConnection *gc = (PurpleConnection *) action->context; |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
170 | |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
171 | PurpleRequestFields *fields; |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
172 | PurpleRequestFieldGroup *group; |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
173 | PurpleRequestField *field; |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
174 | int i; |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
175 | |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
176 | fields = purple_request_fields_new(); |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
177 | group = purple_request_field_group_new(NULL); |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
178 | purple_request_fields_add_group(fields, group); |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
179 | |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
180 | field = purple_request_field_choice_new("mood", |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
181 | _("Mood"), 0); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22943
diff
changeset
|
182 | |
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
183 | for(i = 0; moodstrings[i]; ++i) |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
184 | purple_request_field_choice_add(field, _(moodstrings[i])); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22943
diff
changeset
|
185 | |
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
186 | purple_request_field_set_required(field, TRUE); |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
187 | purple_request_field_group_add_field(group, field); |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
188 | |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
189 | field = purple_request_field_string_new("text", |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
190 | _("Description"), NULL, |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
191 | FALSE); |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
192 | purple_request_field_group_add_field(group, field); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22943
diff
changeset
|
193 | |
|
21175
c6d76b49c206
disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents:
21174
diff
changeset
|
194 | purple_request_fields(gc, _("Edit User Mood"), |
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
195 | _("Edit User Mood"), |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
196 | _("Please select your mood from the list."), |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
197 | fields, |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
198 | _("Set"), G_CALLBACK(do_mood_set_from_fields), |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
199 | _("Cancel"), NULL, |
|
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
200 | purple_connection_get_account(gc), NULL, NULL, |
|
21175
c6d76b49c206
disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents:
21174
diff
changeset
|
201 | gc); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22943
diff
changeset
|
202 | |
|
17782
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
203 | } |
|
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
204 | |
|
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
205 | void jabber_mood_init_action(GList **m) { |
|
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
206 | PurplePluginAction *act = purple_plugin_action_new(_("Set Mood..."), do_mood_set_mood); |
|
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
207 | *m = g_list_append(*m, act); |
|
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
208 | } |
|
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
209 | |
|
17784
6aab6554431e
Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
210 | void jabber_mood_set(JabberStream *js, const char *mood, const char *text) { |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
211 | xmlnode *publish, *moodnode; |
|
19994
854d2a4c99b6
There shouldn't be assert()s in pretty much any libpurple code.
Daniel Atallah <datallah@pidgin.im>
parents:
19899
diff
changeset
|
212 | |
|
854d2a4c99b6
There shouldn't be assert()s in pretty much any libpurple code.
Daniel Atallah <datallah@pidgin.im>
parents:
19899
diff
changeset
|
213 | g_return_if_fail(mood != NULL); |
|
854d2a4c99b6
There shouldn't be assert()s in pretty much any libpurple code.
Daniel Atallah <datallah@pidgin.im>
parents:
19899
diff
changeset
|
214 | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
215 | publish = xmlnode_new("publish"); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
216 | xmlnode_set_attrib(publish,"node","http://jabber.org/protocol/mood"); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
217 | moodnode = xmlnode_new_child(xmlnode_new_child(publish, "item"), "mood"); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
218 | xmlnode_set_namespace(moodnode, "http://jabber.org/protocol/mood"); |
|
17781
d11010274b7a
Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <am@adiumx.com>
parents:
17780
diff
changeset
|
219 | xmlnode_new_child(moodnode, mood); |
| 17776 | 220 | |
|
17786
23e2e1e131cc
Fixed usermood memory management and removed publishing empty <text/>s.
Andreas Monitzer <am@adiumx.com>
parents:
17785
diff
changeset
|
221 | if (text && text[0] != '\0') { |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
222 | xmlnode *textnode = xmlnode_new_child(moodnode, "text"); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
223 | xmlnode_insert_data(textnode, text, -1); |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
224 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
22943
diff
changeset
|
225 | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
226 | jabber_pep_publish(js, publish); |
|
17786
23e2e1e131cc
Fixed usermood memory management and removed publishing empty <text/>s.
Andreas Monitzer <am@adiumx.com>
parents:
17785
diff
changeset
|
227 | /* publish is freed by jabber_pep_publish -> jabber_iq_send -> jabber_iq_free |
|
23e2e1e131cc
Fixed usermood memory management and removed publishing empty <text/>s.
Andreas Monitzer <am@adiumx.com>
parents:
17785
diff
changeset
|
228 | (yay for well-defined memory management rules) */ |
| 17776 | 229 | } |