annotate libpurple/protocols/jabber/usertune.c @ 17587:84638e3af1bc

Minor compilation fixes and corrected some typos on user tune. Added convenience function for setting the user tune.
author Andreas Monitzer <pidgin@monitzer.com>
date Mon, 18 Jun 2007 01:55:54 +0000
parents 3e437e86bd6e
children 60c8535afc33
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17584
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
1 /*
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
2 * purple - Jabber Protocol Plugin
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
3 *
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
4 * Copyright (C) 2007, Andreas Monitzer <andy@monitzer.com>
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
5 *
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
9 * (at your option) any later version.
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
10 *
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
14 * GNU General Public License for more details.
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
15 *
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
19 *
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
20 */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
21
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
22 #include "usertune.h"
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
23 #include "pep.h"
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
24 #include <assert.h>
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
25 #include <string.h>
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
26 #include "internal.h"
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
27 #include "request.h"
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
28
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
29 static void jabber_tune_cb(JabberStream *js, const char *from, xmlnode *items) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
30 /* it doesn't make sense to have more than one item here, so let's just pick the first one */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
31 xmlnode *item = xmlnode_get_child(items, "item");
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
32 JabberBuddy *buddy = jabber_buddy_find(js, from, FALSE);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
33 xmlnode *tuneinfo, *tune;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
34 PurpleTuneInfo tuneinfodata;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
35
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
36 /* ignore the tune of people not on our buddy list */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
37 if (!buddy || !item)
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
38 return;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
39
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
40 tuneinfodata.artist = "";
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
41 tuneinfodata.title = "";
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
42 tuneinfodata.album = "";
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
43 tuneinfodata.genre = "";
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
44 tuneinfodata.comment = "";
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
45 tuneinfodata.track = "";
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
46 tuneinfodata.time = -1;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
47 tuneinfodata.year = -1;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
48 tuneinfodata.url = "";
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
49
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
50 tune = xmlnode_get_child_with_namespace(item, "tune", "http://jabber.org/protocol/tune");
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
51 if (!tune)
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
52 return;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
53 for (tuneinfo = tune->child; tuneinfo; tuneinfo = tuneinfo->next) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
54 if (tuneinfo->type == XMLNODE_TYPE_TAG) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
55 if (!strcmp(tuneinfo->name, "artist")) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
56 if (tuneinfodata.artist[0] != '\0') /* only pick the first one */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
57 tuneinfodata.artist = xmlnode_get_data(tuneinfo);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
58 } else if (!strcmp(tuneinfo->name, "length")) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
59 if (tuneinfodata.time == -1) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
60 char *length = xmlnode_get_data(tuneinfo);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
61 if (length)
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
62 tuneinfodata.time = strtol(length, NULL, 10);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
63 }
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
64 } else if (!strcmp(tuneinfo->name, "source")) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
65 if (tuneinfodata.album[0] != '\0') /* only pick the first one */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
66 tuneinfodata.album = xmlnode_get_data(tuneinfo);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
67 } else if (!strcmp(tuneinfo->name, "title")) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
68 if (tuneinfodata.title[0] != '\0') /* only pick the first one */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
69 tuneinfodata.title = xmlnode_get_data(tuneinfo);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
70 } else if (!strcmp(tuneinfo->name, "track")) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
71 if (tuneinfodata.track[0] != '\0') /* only pick the first one */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
72 tuneinfodata.track = xmlnode_get_data(tuneinfo);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
73 } else if (!strcmp(tuneinfo->name, "uri")) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
74 if (tuneinfodata.url[0] != '\0') /* only pick the first one */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
75 tuneinfodata.url = xmlnode_get_data(tuneinfo);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
76 }
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
77 }
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
78 }
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
79 JabberBuddyResource *resource = jabber_buddy_find_resource(buddy, NULL);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
80 const char *status_id = jabber_buddy_state_get_status_id(resource->state);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
81
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
82 purple_prpl_got_user_status(js->gc->account, from, status_id, "tune_artist", tuneinfodata.artist, "tune_title", tuneinfodata.title, "tune_album", tuneinfodata.album, "tune_genre", tuneinfodata.genre, "tune_comment", tuneinfodata.comment, "tune_track", tuneinfodata.track, "tune_time", tuneinfodata.time, "tune_year", tuneinfodata.year, "tune_url", tuneinfodata.url, NULL);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
83 }
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
84
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
85 void jabber_tune_init(void) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
86 jabber_add_feature("tune", "http://jabber.org/protocol/tune", jabber_pep_namespace_only_when_pep_enabled_cb);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
87 jabber_pep_register_handler("tunen", "http://jabber.org/protocol/tune", jabber_tune_cb);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
88 }
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
89
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
90 void jabber_tune_set(PurpleConnection *gc, const PurpleTuneInfo *tuneinfo) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
91 xmlnode *publish, *tunenode;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
92 JabberStream *js = gc->proto_data;
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
93
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
94 publish = xmlnode_new("publish");
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
95 xmlnode_set_attrib(publish,"node","http://jabber.org/protocol/tune");
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
96 tunenode = xmlnode_new_child(xmlnode_new_child(publish, "item"), "tune");
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
97 xmlnode_set_namespace(tunenode, "http://jabber.org/protocol/tune");
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
98
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
99 if(tuneinfo) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
100 if(tuneinfo->artist)
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
101 xmlnode_insert_data(xmlnode_new_child(tunenode, "artist"),tuneinfo->artist,-1);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
102 if(tuneinfo->title)
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
103 xmlnode_insert_data(xmlnode_new_child(tunenode, "title"),tuneinfo->title,-1);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
104 if(tuneinfo->album)
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
105 xmlnode_insert_data(xmlnode_new_child(tunenode, "source"),tuneinfo->album,-1);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
106 if(tuneinfo->url)
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
107 xmlnode_insert_data(xmlnode_new_child(tunenode, "uri"),tuneinfo->url,-1);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
108 if(tuneinfo->time >= 0) {
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
109 char *length = g_strdup_printf("%d", tuneinfo->time);
17587
84638e3af1bc Minor compilation fixes and corrected some typos on user tune. Added convenience function for setting the user tune.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17584
diff changeset
110 xmlnode_insert_data(xmlnode_new_child(tunenode, "length"),length,-1);
17584
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
111 g_free(length);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
112 }
17587
84638e3af1bc Minor compilation fixes and corrected some typos on user tune. Added convenience function for setting the user tune.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17584
diff changeset
113 if(tuneinfo->track)
17584
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
114 xmlnode_insert_data(xmlnode_new_child(tunenode, "track"),tuneinfo->track,-1);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
115 }
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
116
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
117 jabber_pep_publish(js, publish);
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
118 /* publish is freed by jabber_pep_publish -> jabber_iq_send -> jabber_iq_free
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
119 (yay for well-defined memory management rules) */
3e437e86bd6e Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
120 }