Mon, 16 Jun 2008 13:52:45 +0000
Removing short-names for features and calculating own caps hash.
| 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; |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
106 | |
|
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); |
|
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
|
182 | |
|
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])); |
|
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
|
185 | |
|
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); |
|
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
|
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); |
|
17782
83af68644d0a
Implemented a mood menu action (non-functional right now for some reason)
Andreas Monitzer <am@adiumx.com>
parents:
17781
diff
changeset
|
202 | |
|
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 | } |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17778
diff
changeset
|
225 | |
|
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 | } |