Mercurial > audlegacy-plugins
annotate src/streambrowser/xiph.c @ 2822:e883536cefe0
implemented xiph categories/genres, xiph is now usable
author | Calin Crisan ccrisan@gmail.com |
---|---|
date | Sun, 13 Jul 2008 20:18:00 +0300 |
parents | cc6f02424609 |
children | 587b3657990d |
rev | line source |
---|---|
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
1 /* |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
2 * Audacious Streambrowser Plugin |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
3 * |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
4 * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com> |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
5 * |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
6 * This program is free software; you can redistribute it and/or modify |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
8 * the Free Software Foundation; under version 3 of the License. |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
9 * |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
10 * This program is distributed in the hope that it will be useful, |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
13 * GNU General Public License for more details. |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
14 * |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
16 * along with this program. If not, see <http://www.gnu.org/licenses>. |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
17 */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
18 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
19 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
20 #include <string.h> |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
21 #include <glib.h> |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
22 #include <libxml/parser.h> |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
23 #include <libxml/tree.h> |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
24 #include <audacious/plugin.h> |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
25 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
26 #include "streambrowser.h" |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
27 #include "xiph.h" |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
28 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
29 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
30 typedef struct { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
31 gchar name[DEF_STRING_LEN]; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
32 gchar url[DEF_STRING_LEN]; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
33 gchar current_song[DEF_STRING_LEN]; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
34 gchar genre[DEF_STRING_LEN]; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
35 } xiph_entry_t; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
36 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
37 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
38 static xiph_entry_t *xiph_entries = NULL; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
39 static int xiph_entry_count = 0; |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
40 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
41 typedef struct { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
42 gchar *name; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
43 gchar *match_string; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
44 } xiph_category_t; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
45 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
46 /* inspired from streamtuner's xiph plugin */ |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
47 static xiph_category_t xiph_categories[] = { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
48 { "Alternative", "alternative indie goth college industrial punk hardcore ska" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
49 { "Electronic", "electronic ambient drum trance techno house downtempo breakbeat jungle garage" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
50 { "Classical", "classical opera symphonic" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
51 { "Country", "country swing" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
52 { "Hip-Hop/Rap", "hip hop rap turntable" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
53 { "Jazz", "jazz swing" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
54 { "Oldies", "oldies disco 50s 60s 70s 80s 90s" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
55 { "Rop", "top pop" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
56 { "Rock", "rock metal" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
57 { "R&B/Soul", "r&b funk soul urban" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
58 { "Spiritual", "spiritual gospel christian muslim jewish religio" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
59 { "Spoken", "spoken talk comedy" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
60 { "World", "world reggae island african european east asia" }, |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
61 { "Other", "various mixed misc eclectic film show instrumental" } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
62 }; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
63 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
64 |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
65 // todo: call refresh_streamdir() more often to refresh the current track |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
66 static void refresh_streamdir(); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
67 /* returns true if any of the words in string1 is present in string2 */ |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
68 static gboolean genre_match(gchar *string1, gchar *string2); |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
69 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
70 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
71 gboolean xiph_category_fetch(category_t *category) |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
72 { |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
73 int entryno, categoryno; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
74 int xiph_category_count = sizeof(xiph_categories) / sizeof(xiph_category_t); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
75 xiph_category_t *xiph_category = NULL; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
76 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
77 for (categoryno = 0; categoryno < xiph_category_count; categoryno++) |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
78 if (strcmp(xiph_categories[categoryno].name, category->name) == 0) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
79 xiph_category = xiph_categories + categoryno; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
80 break; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
81 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
82 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
83 /* somehow we've got an invalid/unrecognized category */ |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
84 if (xiph_category == NULL) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
85 failure("xiph: got an unrecognized category: '%s'\n", category->name); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
86 return FALSE; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
87 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
88 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
89 /* free/remove any existing streaminfos in this category */ |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
90 while (streaminfo_get_count(category) > 0) |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
91 streaminfo_remove(category, streaminfo_get_by_index(category, 0)); |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
92 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
93 /* see what entries match this category */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
94 for (entryno = 0; entryno < xiph_entry_count; entryno++) { |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
95 if (genre_match(xiph_category->match_string, xiph_entries[entryno].genre)) { |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
96 streaminfo_t *streaminfo = streaminfo_new(xiph_entries[entryno].name, "", xiph_entries[entryno].url, xiph_entries[entryno].current_song); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
97 streaminfo_add(category, streaminfo); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
98 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
99 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
100 |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
101 /* if the requested category is the last one in the list ("other"), |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
102 we fill it with all the entries that don't match the rest of categories */ |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
103 if (xiph_category == &xiph_categories[xiph_category_count - 1]) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
104 for (entryno = 0; entryno < xiph_entry_count; entryno++) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
105 gboolean matched = FALSE; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
106 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
107 for (categoryno = 0; categoryno < xiph_category_count; categoryno++) |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
108 if (genre_match(xiph_entries[entryno].genre, xiph_categories[categoryno].match_string)) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
109 matched = TRUE; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
110 break; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
111 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
112 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
113 if (!matched) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
114 streaminfo_t *streaminfo = streaminfo_new(xiph_entries[entryno].name, "", xiph_entries[entryno].url, xiph_entries[entryno].current_song); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
115 streaminfo_add(category, streaminfo); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
116 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
117 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
118 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
119 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
120 return TRUE; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
121 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
122 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
123 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
124 streamdir_t* xiph_streamdir_fetch() |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
125 { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
126 streamdir_t *streamdir = streamdir_new(XIPH_NAME); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
127 int categno; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
128 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
129 refresh_streamdir(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
130 |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
131 for (categno = 0; categno < sizeof(xiph_categories) / sizeof(xiph_category_t); categno++) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
132 category_t *category = category_new(xiph_categories[categno].name); |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
133 category_add(streamdir, category); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
134 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
135 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
136 return streamdir; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
137 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
138 |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
139 static void refresh_streamdir() |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
140 { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
141 /* free any previously fetched streamdir data */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
142 if (xiph_entries != NULL) |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
143 free(xiph_entries); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
144 xiph_entry_count = 0; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
145 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
146 debug("xiph: fetching streaming directory file '%s'\n", XIPH_STREAMDIR_URL); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
147 if (!fetch_remote_to_local_file(XIPH_STREAMDIR_URL, XIPH_TEMP_FILENAME)) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
148 failure("xiph: stream directory file '%s' could not be downloaded to '%s'\n", XIPH_STREAMDIR_URL, XIPH_TEMP_FILENAME); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
149 return; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
150 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
151 debug("xiph: stream directory file '%s' successfuly downloaded to '%s'\n", XIPH_STREAMDIR_URL, XIPH_TEMP_FILENAME); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
152 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
153 xmlDoc *doc = xmlReadFile(XIPH_TEMP_FILENAME, NULL, 0); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
154 if (doc == NULL) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
155 failure("xiph: failed to read stream directory file\n"); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
156 return; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
157 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
158 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
159 xmlNode *root_node = xmlDocGetRootElement(doc); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
160 xmlNode *node, *child; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
161 gchar *content; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
162 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
163 root_node = root_node->children; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
164 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
165 for (node = root_node; node != NULL; node = node->next) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
166 if (node->type == XML_ELEMENT_NODE) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
167 xiph_entries = realloc(xiph_entries, sizeof(xiph_entry_t) * (xiph_entry_count + 1)); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
168 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
169 for (child = node->children; child != NULL; child = child->next) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
170 if (strcmp((gchar *)child->name, "server_name") == 0) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
171 content = (gchar *) xmlNodeGetContent(child); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
172 strcpy(xiph_entries[xiph_entry_count].name, content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
173 xmlFree(content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
174 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
175 else if (strcmp((gchar *)child->name, "listen_url") == 0) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
176 content = (gchar *) xmlNodeGetContent(child); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
177 strcpy(xiph_entries[xiph_entry_count].url, content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
178 xmlFree(content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
179 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
180 else if (strcmp((gchar *)child->name, "current_song") == 0) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
181 content = (gchar *) xmlNodeGetContent(child); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
182 strcpy(xiph_entries[xiph_entry_count].current_song, content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
183 xmlFree(content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
184 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
185 else if (strcmp((gchar *)child->name, "genre") == 0) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
186 content = (gchar *) xmlNodeGetContent(child); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
187 strcpy(xiph_entries[xiph_entry_count].genre, content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
188 xmlFree(content); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
189 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
190 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
191 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
192 xiph_entry_count++; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
193 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
194 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
195 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
196 xmlFreeDoc(doc); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
197 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
198 debug("xiph: streaming directory successfuly loaded\n"); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
199 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
200 |
2822
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
201 static gboolean genre_match(gchar *string1, gchar *string2) |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
202 { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
203 char *saveptr = NULL; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
204 char *token; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
205 gboolean matched = FALSE; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
206 char temp1[strlen(string1) + 1]; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
207 char temp2[strlen(string2) + 1]; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
208 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
209 /* these are required for strtok_r to work properly */ |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
210 strcpy(temp1, string1); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
211 strcpy(temp2, string2); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
212 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
213 token = strtok_r(temp1, " ", &saveptr); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
214 while (token != NULL) { |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
215 if (mystrcasestr(temp2, token)) |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
216 matched = TRUE; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
217 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
218 token = strtok_r(NULL, " ", &saveptr); |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
219 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
220 |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
221 return matched; |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
222 } |
e883536cefe0
implemented xiph categories/genres, xiph is now usable
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
223 |