libpurple/protocols/jabber/usermood.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 26072
e8fce2b2b9fe
child 28321
c8d617c408ab
permissions
-rw-r--r--

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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
1 /*
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
2 * purple - Jabber Protocol Plugin
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
3 *
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
4 * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
5 *
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
9 * (at your option) any later version.
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
10 *
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
14 * GNU General Public License for more details.
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
15 *
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
19 *
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
20 */
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
24 #include "usermood.h"
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
25 #include "pep.h"
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
94 };
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
95
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
141 }
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
142
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
146 }
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
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
e5d36bb0093b forgot to add usermood.[hc]
Andreas Monitzer <am@adiumx.com>
parents:
diff changeset
229 }

mercurial