annotate src/streambrowser/shoutcast.c @ 2763:bbde87558ec7

integrated streambrowser into the main buildsystem
author Calin Crisan ccrisan@gmail.com
date Thu, 03 Jul 2008 02:02:19 +0300
parents 6d6a3eb67510
children d608b16a710b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
1
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
2 #include <string.h>
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
3 #include <glib.h>
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
4 #include <libxml/parser.h>
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
5 #include <libxml/tree.h>
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
6 #include <audacious/plugin.h>
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
7
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
8 #include "streambrowser.h"
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
9 #include "shoutcast.h"
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
10
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
11
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
12 gboolean shoutcast_category_fetch(category_t *category)
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
13 {
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
14 gchar url[DEF_STRING_LEN];
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
15 g_snprintf(url, DEF_STRING_LEN, SHOUTCAST_CATEGORY_URL, category->name);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
16
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
17 /* generate a valid, temporary filename */
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
18 char *temp_filename = tempnam(NULL, "aud_sb");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
19 if (temp_filename == NULL) {
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
20 failure("shoutcast: failed to create a temporary file\n");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
21 return FALSE;
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
22 }
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
23
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
24 char temp_pathname[DEF_STRING_LEN];
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
25 sprintf(temp_pathname, "file://%s", temp_filename);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
26 free(temp_filename);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
27
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
28 debug("shoutcast: fetching category file '%s'\n", url);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
29 if (!fetch_remote_to_local_file(url, temp_pathname)) {
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
30 failure("shoutcast: category file '%s' could not be downloaded to '%s'\n", url, temp_pathname);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
31 return FALSE;
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
32 }
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
33 debug("shoutcast: category file '%s' successfuly downloaded to '%s'\n", url, temp_pathname);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
34
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
35 xmlDoc *doc = xmlReadFile(temp_pathname, NULL, 0);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
36 if (doc == NULL) {
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
37 failure("shoutcast: failed to read '%s' category file\n", category->name);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
38 return FALSE;
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
39 }
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
40
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
41 xmlNode *root_node = xmlDocGetRootElement(doc);
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
42 xmlNode *node;
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
43
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
44 root_node = root_node->children;
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
45
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
46 for (node = root_node; node != NULL; node = node->next) {
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
47 if (node->type == XML_ELEMENT_NODE && !strcmp((char *) node->name, "station")) {
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
48 gchar *streaminfo_name = (gchar*) xmlGetProp(node, (xmlChar *) "name");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
49 gchar *streaminfo_id = (gchar*) xmlGetProp(node, (xmlChar *) "id");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
50 gchar streaminfo_playlist_url[DEF_STRING_LEN];
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
51 gchar *streaminfo_current_track = (gchar*) xmlGetProp(node, (xmlChar *) "ct");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
52
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
53 g_snprintf(streaminfo_playlist_url, DEF_STRING_LEN, SHOUTCAST_STREAMINFO_URL, streaminfo_id);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
54
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
55 debug("shoutcast: fetching stream info for '%s/%d' from '%s'\n", streaminfo_name, streaminfo_id, url);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
56
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
57 streaminfo_t *streaminfo = streaminfo_new(streaminfo_name, streaminfo_playlist_url, streaminfo_current_track);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
58 streaminfo_add(category, streaminfo);
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
59
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
60 xmlFree(streaminfo_name);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
61 xmlFree(streaminfo_id);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
62 xmlFree(streaminfo_current_track);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
63
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
64 debug("shoutcast: stream info added\n");
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
65 }
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
66 }
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
67
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
68 remove(temp_filename);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
69 // todo: free the mallocs()
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
70
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
71 return TRUE;
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
72 }
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
73
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
74
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
75 streamdir_t* shoutcast_streamdir_fetch()
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
76 {
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
77 streamdir_t *streamdir = streamdir_new(SHOUTCAST_NAME);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
78
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
79 /* generate a valid, temporary filename */
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
80 char *temp_filename = tempnam(NULL, "aud_sb");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
81 if (temp_filename == NULL) {
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
82 failure("shoutcast: failed to create a temporary file\n");
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
83 return NULL;
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
84 }
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
85
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
86 char temp_pathname[DEF_STRING_LEN];
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
87 sprintf(temp_pathname, "file://%s", temp_filename);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
88 free(temp_filename);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
89
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
90 debug("shoutcast: fetching streaming directory file '%s'\n", SHOUTCAST_STREAMDIR_URL);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
91 if (!fetch_remote_to_local_file(SHOUTCAST_STREAMDIR_URL, temp_pathname)) {
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
92 failure("shoutcast: stream directory file '%s' could not be downloaded to '%s'\n", SHOUTCAST_STREAMDIR_URL, temp_pathname);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
93 return NULL;
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
94 }
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
95 debug("shoutcast: stream directory file '%s' successfuly downloaded to '%s'\n", SHOUTCAST_STREAMDIR_URL, temp_pathname);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
96
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
97 xmlDoc *doc = xmlReadFile(temp_pathname, NULL, 0);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
98 if (doc == NULL) {
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
99 failure("shoutcast: failed to read stream directory file\n");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
100 return NULL;
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
101 }
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
102
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
103 xmlNode *root_node = xmlDocGetRootElement(doc);
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
104 xmlNode *node;
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
105
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
106 root_node = root_node->children;
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
107
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
108 for (node = root_node; node != NULL; node = node->next) {
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
109 if (node->type == XML_ELEMENT_NODE) {
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
110 gchar *category_name = (gchar*) xmlGetProp(node, (xmlChar *) "name");
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
111
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
112 debug("shoutcast: fetching category '%s'\n", category_name);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
113
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
114 category_t *category = category_new(category_name);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
115 category_add(streamdir, category);
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
116
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
117 xmlFree(category_name);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
118
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
119 debug("shoutcast: category added\n", category_name);
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
120 }
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
121 }
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
122
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
123 // todo: free the mallocs()
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
124
2735
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
125 remove(temp_filename);
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
126 debug("shoutcast: streaming directory successfuly loaded\n");
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
127
6d6a3eb67510 some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents: 2570
diff changeset
128 return streamdir;
2570
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
129 }
28498c0bde64 Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff changeset
130