libpurple/protocols/myspace/user.c

changeset 22358
13b8409aea48
parent 21098
05dca51886e7
child 22433
41a60cb99e28
equal deleted inserted replaced
22356:fecd7e5e1ab1 22358:13b8409aea48
18 */ 18 */
19 19
20 #include "myspace.h" 20 #include "myspace.h"
21 21
22 static void msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user); 22 static void msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user);
23 static gchar *msim_format_now_playing(gchar *band, gchar *song); 23 static gchar *msim_format_now_playing(const gchar *band, const gchar *song);
24 static void msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, 24 static void msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text,
25 gsize len, const gchar *error_message); 25 gsize len, const gchar *error_message);
26 26
27 /** Format the "now playing" indicator, showing the artist and song. 27 /** Format the "now playing" indicator, showing the artist and song.
28 * @return Return a new string (must be g_free()'d), or NULL. 28 * @return Return a new string (must be g_free()'d), or NULL.
29 */ 29 */
30 static gchar * 30 static gchar *
31 msim_format_now_playing(gchar *band, gchar *song) 31 msim_format_now_playing(const gchar *band, const gchar *song)
32 { 32 {
33 if ((band && *band) || (song && *song)) { 33 if ((band && *band) || (song && *song)) {
34 return g_strdup_printf("%s - %s", 34 return g_strdup_printf("%s - %s",
35 (band && *band) ? band : "Unknown Artist", 35 (band && *band) ? band : "Unknown Artist",
36 (song && *song) ? song : "Unknown Song"); 36 (song && *song) ? song : "Unknown Song");
83 * Used by msim_tooltip_text() and msim_get_info_cb() to show a user's profile. 83 * Used by msim_tooltip_text() and msim_get_info_cb() to show a user's profile.
84 */ 84 */
85 void 85 void
86 msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full) 86 msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full)
87 { 87 {
88 PurplePresence *presence;
88 gchar *str; 89 gchar *str;
89 guint uid; 90 guint uid;
90 guint cv; 91 guint cv;
91 92
92 /* Useful to identify the account the tooltip refers to. 93 /* Useful to identify the account the tooltip refers to.
126 /* Other information */ 127 /* Other information */
127 if (user->headline && *user->headline) { 128 if (user->headline && *user->headline) {
128 purple_notify_user_info_add_pair(user_info, _("Headline"), user->headline); 129 purple_notify_user_info_add_pair(user_info, _("Headline"), user->headline);
129 } 130 }
130 131
131 str = msim_format_now_playing(user->band_name, user->song_name); 132 presence = purple_buddy_get_presence(user->buddy);
132 if (str && *str) { 133
133 purple_notify_user_info_add_pair(user_info, _("Song"), str); 134 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_TUNE)) {
134 } 135 PurpleStatus *status;
135 g_free(str); 136 const char *artist, *title;
137
138 status = purple_presence_get_status(presence, "tune");
139 title = purple_status_get_attr_string(status, PURPLE_TUNE_TITLE);
140 artist = purple_status_get_attr_string(status, PURPLE_TUNE_ARTIST);
141
142 str = msim_format_now_playing(artist, title);
143 if (str && *str) {
144 purple_notify_user_info_add_pair(user_info, _("Song"), str);
145 }
146 g_free(str);
147 }
136 148
137 /* Note: total friends only available if looked up by uid, not username. */ 149 /* Note: total friends only available if looked up by uid, not username. */
138 if (user->total_friends) { 150 if (user->total_friends) {
139 char friends[16]; 151 char friends[16];
140 g_snprintf(friends, sizeof(friends), "%d", user->total_friends); 152 g_snprintf(friends, sizeof(friends), "%d", user->total_friends);
157 } 169 }
158 if (client && *client) 170 if (client && *client)
159 purple_notify_user_info_add_pair(user_info, _("Client Version"), client); 171 purple_notify_user_info_add_pair(user_info, _("Client Version"), client);
160 g_free(client); 172 g_free(client);
161 } 173 }
174 }
175
176 /** Set the currently playing song artist and or title.
177 *
178 * @param user User associated with the now playing information.
179 *
180 * @param new_artist New artist to set, or NULL/empty to not change artist.
181 *
182 * @param new_title New title to set, or NULL/empty to not change title.
183 *
184 * If new_artist and new_title are NULL/empty, deactivate PURPLE_STATUS_TUNE.
185 *
186 * This function is useful because it lets you set the artist or title
187 * individually, which purple_prpl_got_user_status() doesn't do.
188 */
189 static void msim_set_artist_or_title(MsimUser *user, const char *new_artist, const char *new_title)
190 {
191 PurplePresence *presence;
192 const char *prev_artist, *prev_title;
193
194 prev_artist = NULL;
195 prev_title = NULL;
196
197 if (new_artist && !strlen(new_artist))
198 new_artist = NULL;
199 if (new_title && !strlen(new_title))
200 new_title = NULL;
201
202 if (!new_artist && !new_title) {
203 purple_prpl_got_user_status_deactive(user->buddy->account, user->buddy->name, "tune");
204 return;
205 }
206
207 presence = purple_buddy_get_presence(user->buddy);
208
209 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_TUNE)) {
210 PurpleStatus *status;
211
212 status = purple_presence_get_status(presence, "tune");
213 prev_title = purple_status_get_attr_string(status, PURPLE_TUNE_TITLE);
214 prev_artist = purple_status_get_attr_string(status, PURPLE_TUNE_ARTIST);
215 }
216
217 if (!new_artist)
218 new_artist = prev_artist;
219
220 if (!new_title)
221 new_title = prev_title;
222
223 purple_prpl_got_user_status(user->buddy->account, user->buddy->name, "tune",
224 PURPLE_TUNE_TITLE, new_title,
225 PURPLE_TUNE_ARTIST, new_artist,
226 NULL);
162 } 227 }
163 228
164 /** Store a field of information about a buddy. 229 /** Store a field of information about a buddy.
165 * 230 *
166 * @param key_str Key to store. 231 * @param key_str Key to store.
192 user->total_friends = atol(value_str); 257 user->total_friends = atol(value_str);
193 } else if (g_str_equal(key_str, "DisplayName")) { 258 } else if (g_str_equal(key_str, "DisplayName")) {
194 g_free(user->display_name); 259 g_free(user->display_name);
195 user->display_name = value_str; 260 user->display_name = value_str;
196 } else if (g_str_equal(key_str, "BandName")) { 261 } else if (g_str_equal(key_str, "BandName")) {
197 g_free(user->band_name); 262 msim_set_artist_or_title(user, value_str, NULL);
198 user->band_name = value_str;
199 } else if (g_str_equal(key_str, "SongName")) { 263 } else if (g_str_equal(key_str, "SongName")) {
200 g_free(user->song_name); 264 msim_set_artist_or_title(user, NULL, value_str);
201 user->song_name = value_str;
202 } else if (g_str_equal(key_str, "UserName") || g_str_equal(key_str, "IMName") || g_str_equal(key_str, "NickName")) { 265 } else if (g_str_equal(key_str, "UserName") || g_str_equal(key_str, "IMName") || g_str_equal(key_str, "NickName")) {
203 /* Ignore because PurpleBuddy knows this already */ 266 /* Ignore because PurpleBuddy knows this already */
204 g_free(value_str); 267 g_free(value_str);
205 } else if (g_str_equal(key_str, "ImageURL") || g_str_equal(key_str, "AvatarURL")) { 268 } else if (g_str_equal(key_str, "ImageURL") || g_str_equal(key_str, "AvatarURL")) {
206 const gchar *previous_url; 269 const gchar *previous_url;

mercurial