4 * Created on: 2009-10-05
9 #include <glib-object.h>
11 #include "data_structs.h"
16 void data_structs_type_register() {
18 G_TYPE_ALBUM = g_boxed_type_register_static("Album", (GBoxedCopyFunc)album_copy, (GBoxedFreeFunc)album_free);
21 G_TYPE_RADIO = g_boxed_type_register_static("Radio", (GBoxedCopyFunc)radio_copy, (GBoxedFreeFunc)radio_free);
26 return g_new0(Album, 1);
29 Album* album_copy(Album* album) {
30 Album* newAlbum = g_new0(Album, 1);
31 album_set_id(newAlbum,album->id);
32 album_set_image(newAlbum,album->image);
33 album_set_name(newAlbum,album->name);
34 album_set_rating(newAlbum,album->rating);
35 album_set_artist_name(newAlbum,album->artist_name);
39 void album_set_id(Album* album, const gint id) {
43 void album_set_image(Album* album, const gchar* image) {
44 album->image = g_strdup(image);
47 gchar* album_get_image(Album* album, gint size) {
48 return g_strdup_printf("http://api.jamendo.com/get2/image/album/redirect/?id=%d&imagesize=%d",album->id,size);
51 void album_set_name(Album* album, const gchar* name) {
52 album->name = g_strdup(name);
55 void album_set_rating(Album* album, const gdouble rating) {
56 album->rating = rating;
59 void album_set_artist_name(Album* album, const gchar* artist_name) {
60 album->artist_name = g_strdup(artist_name);
64 void album_free(Album* album) {
67 g_free(album->artist_name);
71 void album_dump(Album* album) {
72 g_debug("id: %d", album->id);
73 g_debug("image: %s", album->image);
74 g_debug("name: %s", album->name);
75 g_debug("rating: %g", album->rating);
76 g_debug("artist name: %s", album->artist_name);
79 Album* album_new_from_xml(xmlNode* album_node) {
81 if (album_node->type == XML_ELEMENT_NODE && g_strcmp0((gchar*) album_node->name, "album") == 0) {
84 for (cur_node = album_node->children; cur_node; cur_node = cur_node->next) {
85 if (!(cur_node->type == XML_ELEMENT_NODE && cur_node->children))
87 if (g_strcmp0((gchar*) cur_node->name, "id") == 0) {
88 album_set_id(album, g_ascii_strtoll((gchar*) cur_node->children->content, NULL, 10));
89 } else if (g_strcmp0((gchar*) cur_node->name, "name") == 0) {
90 album_set_name(album, (gchar*) cur_node->children->content);
91 /*album_set_name(album, (gchar*)xmlNodeGetContent(cur_node));*/
92 } else if (g_strcmp0((gchar*) cur_node->name, "image") == 0) {
93 album_set_image(album, (gchar*) cur_node->children->content);
94 } else if (g_strcmp0((gchar*) cur_node->name, "rating") == 0) {
95 album_set_rating(album, g_ascii_strtod((gchar*) cur_node->children->content, NULL));
96 } else if (g_strcmp0((gchar*) cur_node->name, "artist_name") == 0) {
97 album_set_artist_name(album, (gchar*) cur_node->children->content);
103 g_free(album->image);
104 album->image=g_strdup_printf("http://api.jamendo.com/get2/image/album/redirect/?id=%d&imagesize=100",album->id);
109 static void album_list_free_item(Album* album, gpointer data) {
113 void album_list_free(GList* album_list) {
115 g_debug("album_list_free length: %d", g_list_length(album_list));
116 g_list_foreach(album_list, (GFunc) album_list_free_item, NULL);
117 g_list_free(album_list);
126 return g_new0(Track, 1);
129 Track* track_new_from_xml(xmlNode* track_node) {
132 if (track_node->type == XML_ELEMENT_NODE && g_strcmp0((gchar*) track_node->name, "track") == 0) {
135 for (cur_node = track_node->children; cur_node; cur_node = cur_node->next) {
136 if (!(cur_node->type == XML_ELEMENT_NODE && cur_node->children))
138 if (g_strcmp0((gchar*) cur_node->name, "id") == 0) {
139 track_set_id(track, g_ascii_strtoll((gchar*) cur_node->children->content, NULL, 10));
140 } else if (g_strcmp0((gchar*) cur_node->name, "name") == 0) {
141 track_set_name(track, (gchar*) cur_node->children->content);
142 /*track_set_name(track, (gchar*)xmlNodeGetContent(cur_node));*/
143 } else if (g_strcmp0((gchar*) cur_node->name, "duration") == 0) {
144 track_set_duration(track, g_ascii_strtoll((gchar*) cur_node->children->content, NULL, 10));
145 } else if (g_strcmp0((gchar*) cur_node->name, "stream") == 0) {
146 track_set_stream(track, (gchar*) cur_node->children->content);
147 } else if (g_strcmp0((gchar*) cur_node->name, "rating") == 0) {
148 track_set_rating(track, g_ascii_strtod((gchar*) cur_node->children->content, NULL));
149 } else if (g_strcmp0((gchar*) cur_node->name, "artist_id") == 0) {
150 track_set_artist_id(track, g_ascii_strtoll((gchar*) cur_node->children->content, NULL, 10));
151 } else if (g_strcmp0((gchar*) cur_node->name, "artist_name") == 0) {
152 track_set_artist_name(track, (gchar*) cur_node->children->content);
153 } else if (g_strcmp0((gchar*) cur_node->name, "album_id") == 0) {
154 track_set_album_id(track, g_ascii_strtoll((gchar*) cur_node->children->content, NULL, 10));
155 } else if (g_strcmp0((gchar*) cur_node->name, "album_name") == 0) {
156 track_set_album_name(track, (gchar*) cur_node->children->content);
164 void track_free(Track* track) {
166 g_free(track->stream);
167 g_free(track->album_name);
168 g_free(track->artist_name);
173 void track_set_id(Track* track, const gint id) {
177 void track_set_name(Track* track, const gchar* name) {
178 track->name = g_strdup(name);
181 void track_set_duration(Track* track, const gint duration) {
182 track->duration = duration;
185 void track_set_stream(Track* track, const gchar* stream) {
186 track->stream = g_strdup(stream);
189 void track_set_rating(Track* track, const gdouble rating) {
190 track->rating = rating;
193 void track_set_artist_id(Track* track, const gint artist_id) {
194 track->artist_id = artist_id;
197 void track_set_artist_name(Track* track, const gchar* artist_name) {
198 track->artist_name = g_strdup(artist_name);
201 void track_set_album_id(Track* track, const gint album_id) {
202 track->album_id = album_id;
205 void track_set_album_name(Track* track, const gchar* album_name) {
206 track->album_name = g_strdup(album_name);
209 static void track_list_free_item(Track* track, gpointer data) {
213 void track_list_free(GList* track_list)
216 g_debug("track_list_free length: %d", g_list_length(track_list));
217 g_list_foreach(track_list, (GFunc) track_list_free_item, NULL);
218 g_list_free(track_list);
227 return g_new0(Radio, 1);
230 Radio* radio_copy(Radio* radio) {
231 Radio* newRadio = g_new0(Radio, 1);
232 radio_set_id(newRadio,radio->id);
233 radio_set_image(newRadio,radio->image);
234 radio_set_name(newRadio,radio->name);
238 Radio* radio_new_from_xml(xmlNode* radio_node) {
240 if (radio_node->type == XML_ELEMENT_NODE && g_strcmp0((gchar*) radio_node->name, "radio") == 0) {
243 for (cur_node = radio_node->children; cur_node; cur_node = cur_node->next) {
244 if (!(cur_node->type == XML_ELEMENT_NODE && cur_node->children))
246 if (g_strcmp0((gchar*) cur_node->name, "id") == 0) {
247 radio_set_id(radio, g_ascii_strtoll((gchar*) cur_node->children->content, NULL, 10));
248 } else if (g_strcmp0((gchar*) cur_node->name, "idstr") == 0) {
249 radio_set_name(radio, (gchar*) cur_node->children->content);
250 /*radio_set_name(radio, (gchar*)xmlNodeGetContent(cur_node));*/
251 } else if (g_strcmp0((gchar*) cur_node->name, "image") == 0) {
252 radio_set_image(radio, (gchar*) cur_node->children->content);
260 void radio_free(Radio* radio) {
261 g_free(radio->image);
266 void radio_set_id(Radio* radio, const gint id) {
270 void radio_set_name(Radio* radio, const gchar* name) {
271 radio->name = g_strdup(name);
274 void radio_set_image(Radio* radio, const gchar* image) {
275 radio->image = g_strdup(image);
278 static void radio_list_free_item(Radio* radio, gpointer data) {
281 void radio_list_free(GList* radio_list) {
283 g_debug("radio_list_free length: %d", g_list_length(radio_list));
284 g_list_foreach(radio_list, (GFunc) radio_list_free_item, NULL);
285 g_list_free(radio_list);