Mercurial > audlegacy-plugins
annotate src/streambrowser/streambrowser.c @ 2850:587b3657990d
xiph now updates the streams as well; i am aware of gui crashing when adding xiph streams, but tomorrow is another lovely day
author | Calin Crisan ccrisan@gmail.com |
---|---|
date | Tue, 29 Jul 2008 00:20:31 +0300 |
parents | fbb32674bfd2 |
children |
rev | line source |
---|---|
2811 | 1 /* |
2 * Audacious Streambrowser Plugin | |
3 * | |
4 * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com> | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; under version 3 of the License. | |
9 * | |
10 * This program is distributed in the hope that it will be useful, | |
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 * GNU General Public License for more details. | |
14 * | |
15 * You should have received a copy of the GNU General Public License | |
16 * along with this program. If not, see <http://www.gnu.org/licenses>. | |
17 */ | |
18 | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
19 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
20 #include <stdlib.h> |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
21 #include <gtk/gtk.h> |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
22 #include <audacious/plugin.h> |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
23 #include <audacious/ui_plugin_menu.h> |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
24 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
25 #include "streambrowser.h" |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
26 #include "streamdir.h" |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
27 #include "shoutcast.h" |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
28 #include "xiph.h" |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
29 #include "gui/streambrowser_win.h" |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
30 #include "gui/about_win.h" |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
31 |
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 typedef struct { |
2788 | 34 streamdir_t *streamdir; |
35 category_t *category; | |
36 streaminfo_t *streaminfo; | |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
37 gboolean add_to_playlist; |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
38 } update_thread_data_t; |
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 |
2788 | 41 static void sb_init(); |
42 static void sb_about(); | |
43 static void sb_configure(); | |
44 static void sb_cleanup(); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
45 |
2788 | 46 static void gui_init(); |
47 static void gui_done(); | |
48 static void config_load(); | |
49 static void config_save(); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
50 |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
51 static void streamdir_update(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean add_to_playlist); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
52 static gpointer update_thread_core(gpointer user_data); |
2788 | 53 static void streaminfo_add_to_playlist(streaminfo_t *streaminfo); |
54 static void on_plugin_services_menu_item_click(); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
55 |
2788 | 56 static GtkWidget *playlist_menu_item; |
57 static GtkWidget *main_menu_item; | |
58 static GQueue *update_thread_data_queue = NULL; | |
59 static GMutex *update_thread_mutex = NULL; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
60 |
2788 | 61 streambrowser_cfg_t streambrowser_cfg; |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
62 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
63 static GeneralPlugin sb_plugin = |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
64 { |
2788 | 65 .description = "Stream Browser", |
66 .init = sb_init, | |
67 .about = sb_about, | |
68 .configure = sb_configure, | |
69 .cleanup = sb_cleanup | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
70 }; |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
71 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
72 GeneralPlugin *sb_gplist[] = |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
73 { |
2788 | 74 &sb_plugin, |
75 NULL | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
76 }; |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
77 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
78 SIMPLE_GENERAL_PLUGIN(streambrowser, sb_gplist); |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
79 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
80 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
81 void debug(const char *fmt, ...) |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
82 { |
2788 | 83 if (streambrowser_cfg.debug) { |
84 va_list ap; | |
85 fprintf(stderr, "* streambrowser: "); | |
86 va_start(ap, fmt); | |
87 vfprintf(stderr, fmt, ap); | |
88 va_end(ap); | |
89 } | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
90 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
91 |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
92 void failure(const char *fmt, ...) |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
93 { |
2788 | 94 va_list ap; |
95 fprintf(stderr, "! streambrowser: "); | |
96 va_start(ap, fmt); | |
97 vfprintf(stderr, fmt, ap); | |
98 va_end(ap); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
99 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
100 |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
101 gboolean fetch_remote_to_local_file(gchar *remote_url, gchar *local_url) |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
102 { |
2788 | 103 VFSFile *remote_file = aud_vfs_fopen(remote_url, "r"); |
104 if (remote_file == NULL) { | |
105 failure("failed to fetch file '%s'\n", remote_url); | |
106 return FALSE; | |
107 } | |
108 | |
109 VFSFile *local_file = aud_vfs_fopen(local_url, "w"); | |
110 if (local_file == NULL) { | |
111 aud_vfs_fclose(remote_file); | |
112 | |
113 failure("failed to create local file '%s'\n", local_file); | |
114 return FALSE; | |
115 } | |
116 | |
117 unsigned char buff[DEF_BUFFER_SIZE]; | |
118 int size; | |
119 while (!aud_vfs_feof(remote_file)) { | |
120 size = aud_vfs_fread(buff, 1, DEF_BUFFER_SIZE, remote_file); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
121 |
2788 | 122 // i don't know why aud_vfs_feof() doesn't ever return TRUE |
123 // so this is a workaround to properly end the loop | |
124 if (size == 0) | |
125 break; | |
126 | |
127 size = aud_vfs_fwrite(buff, 1, size, local_file); | |
128 if (size == 0) { | |
129 aud_vfs_fclose(local_file); | |
130 aud_vfs_fclose(remote_file); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
131 |
2788 | 132 failure("failed to write to local file '%s'\n", local_file); |
133 return FALSE; | |
134 } | |
135 } | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
136 |
2788 | 137 aud_vfs_fclose(local_file); |
138 aud_vfs_fclose(remote_file); | |
139 | |
140 return TRUE; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
141 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
142 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
143 gboolean mystrcasestr(const char *haystack, const char *needle) |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
144 { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
145 int len_h = strlen(haystack) + 1; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
146 int len_n = strlen(needle) + 1; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
147 int i; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
148 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
149 char *upper_h = malloc(len_h); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
150 char *upper_n = malloc(len_n); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
151 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
152 for (i = 0; i < len_h; i++) |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
153 upper_h[i] = toupper(haystack[i]); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
154 for (i = 0; i < len_n; i++) |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
155 upper_n[i] = toupper(needle[i]); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
156 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
157 char *p = strstr(upper_h, upper_n); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
158 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
159 free(upper_h); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
160 free(upper_n); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
161 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
162 return (gboolean) p; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
163 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
164 |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
165 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
166 static void sb_init() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
167 { |
2788 | 168 /* workaround to print sb_init() */ |
169 streambrowser_cfg.debug = TRUE; | |
170 debug("sb_init()\n"); | |
171 streambrowser_cfg.debug = FALSE; | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
172 |
2788 | 173 config_load(); |
174 gui_init(); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
175 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
176 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
177 static void sb_about() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
178 { |
2788 | 179 debug("sb_about()\n"); |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
180 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
181 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
182 static void sb_configure() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
183 { |
2788 | 184 debug("sb_configure()\n"); |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
185 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
186 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
187 static void sb_cleanup() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
188 { |
2788 | 189 debug("sb_cleanup()\n"); |
190 | |
191 gui_done(); | |
192 config_save(); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
193 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
194 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
195 static void gui_init() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
196 { |
2788 | 197 /* the plugin services menu */ |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2788
diff
changeset
|
198 playlist_menu_item = gtk_image_menu_item_new_with_label(_("Streambrowser")); |
2791
f9c6a9cb442e
streambrowser has now an icon
Calin Crisan ccrisan@gmail.com
parents:
2790
diff
changeset
|
199 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(playlist_menu_item), gtk_image_new_from_file(STREAMBROWSER_ICON_SMALL)); |
2788 | 200 gtk_widget_show(playlist_menu_item); |
201 g_signal_connect(G_OBJECT(playlist_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL); | |
202 audacious_menu_plugin_item_add(AUDACIOUS_MENU_PLAYLIST_RCLICK, playlist_menu_item); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
203 |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2788
diff
changeset
|
204 main_menu_item = gtk_image_menu_item_new_with_label(_("Streambrowser")); |
2791
f9c6a9cb442e
streambrowser has now an icon
Calin Crisan ccrisan@gmail.com
parents:
2790
diff
changeset
|
205 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(main_menu_item), gtk_image_new_from_file(STREAMBROWSER_ICON_SMALL)); |
2788 | 206 gtk_widget_show(main_menu_item); |
207 g_signal_connect(G_OBJECT(main_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL); | |
208 audacious_menu_plugin_item_add(AUDACIOUS_MENU_MAIN, main_menu_item); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
209 |
2788 | 210 /* main streambrowser window */ |
211 streambrowser_win_init(); | |
212 streambrowser_win_set_update_function(streamdir_update); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
213 |
2788 | 214 /* others */ |
215 update_thread_mutex = g_mutex_new(); | |
216 update_thread_data_queue = g_queue_new(); | |
217 | |
218 debug("gui initialized\n"); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
219 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
220 |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
221 static void gui_done() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
222 { |
2788 | 223 /* the plugin services menu */ |
224 audacious_menu_plugin_item_remove(AUDACIOUS_MENU_PLAYLIST_RCLICK, playlist_menu_item); | |
225 audacious_menu_plugin_item_remove(AUDACIOUS_MENU_MAIN, main_menu_item); | |
226 | |
227 /* main streambrowser window */ | |
228 streambrowser_win_hide(); | |
229 streambrowser_win_done(); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
230 |
2788 | 231 /* others */ |
232 if (update_thread_mutex) | |
233 g_mutex_free(update_thread_mutex); | |
234 update_thread_mutex = NULL; | |
235 if (update_thread_data_queue) | |
236 g_queue_free(update_thread_data_queue); | |
237 update_thread_data_queue = NULL; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
238 |
2788 | 239 debug("gui destroyed\n"); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
240 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
241 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
242 static void config_load() |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
243 { |
2788 | 244 streambrowser_cfg.debug = FALSE; |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
245 |
2788 | 246 mcs_handle_t *db; |
247 if ((db = aud_cfg_db_open()) == NULL) { | |
248 failure("failed to load configuration\n"); | |
249 return; | |
250 } | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
251 |
2788 | 252 aud_cfg_db_get_bool(db, "streambrowser", "debug", &streambrowser_cfg.debug); |
253 | |
254 aud_cfg_db_close(db); | |
255 | |
256 debug("configuration loaded\n"); | |
257 debug("debug = %d\n", streambrowser_cfg.debug); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
258 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
259 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
260 static void config_save() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
261 { |
2788 | 262 mcs_handle_t *db; |
263 if ((db = aud_cfg_db_open()) == NULL) { | |
264 failure("failed to save configuration\n"); | |
265 return; | |
266 } | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
267 |
2788 | 268 aud_cfg_db_set_bool(db, "streambrowser", "debug", streambrowser_cfg.debug); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
269 |
2788 | 270 aud_cfg_db_close(db); |
271 | |
272 debug("configuration saved\n"); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
273 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
274 |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
275 static void streamdir_update(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean add_to_playlist) |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
276 { |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
277 debug("requested streamdir update (streamdir = '%s', category = '%s', streaminfo = '%s', add_to_playlist = %d)\n", |
2788 | 278 streamdir == NULL ? "" : streamdir->name, |
279 category == NULL ? "" : category->name, | |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
280 streaminfo == NULL ? "" : streaminfo->name, |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
281 add_to_playlist); |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
282 |
2817
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
283 if (g_queue_get_length(update_thread_data_queue) >= MAX_UPDATE_THREADS) { |
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
284 debug("another %d streamdir updates are pending, this request will be dropped\n", g_queue_get_length(update_thread_data_queue)); |
2788 | 285 } |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
286 else { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
287 g_mutex_lock(update_thread_mutex); |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
288 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
289 /* do we have a running thread? */ |
2817
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
290 if (g_queue_get_length(update_thread_data_queue) > 0) { |
2788 | 291 int i; |
292 gboolean exists = FALSE; | |
293 update_thread_data_t *update_thread_data; | |
294 | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
295 /* search for another identic update request */ |
2788 | 296 for (i = 0; i < g_queue_get_length(update_thread_data_queue); i++) { |
297 update_thread_data = g_queue_peek_nth(update_thread_data_queue, i); | |
298 if (update_thread_data->streamdir == streamdir && | |
299 update_thread_data->category == category && | |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
300 update_thread_data->streaminfo == streaminfo && |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
301 update_thread_data->add_to_playlist == add_to_playlist) { |
2788 | 302 exists = TRUE; |
303 break; | |
304 } | |
305 } | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
306 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
307 /* if no other similar request exists, we enqueue it */ |
2788 | 308 if (!exists) { |
2817
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
309 debug("another %d streamdir updates are pending, this request will be queued\n", g_queue_get_length(update_thread_data_queue)); |
2788 | 310 |
311 update_thread_data = g_malloc(sizeof(update_thread_data_t)); | |
312 | |
313 update_thread_data->streamdir = streamdir; | |
314 update_thread_data->category = category; | |
315 update_thread_data->streaminfo = streaminfo; | |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
316 update_thread_data->add_to_playlist = add_to_playlist; |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
317 |
2788 | 318 g_queue_push_tail(update_thread_data_queue, update_thread_data); |
319 } | |
320 else { | |
321 debug("this request is already present in the queue, dropping\n"); | |
322 } | |
323 } | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
324 /* no thread is currently running, we start one */ |
2788 | 325 else { |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
326 debug("no other streamdir updates are pending, starting to process this request immediately\n"); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
327 |
2788 | 328 update_thread_data_t *data = g_malloc(sizeof(update_thread_data_t)); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
329 |
2788 | 330 data->streamdir = streamdir; |
331 data->category = category; | |
332 data->streaminfo = streaminfo; | |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
333 data->add_to_playlist = add_to_playlist; |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
334 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
335 g_queue_push_tail(update_thread_data_queue, data); |
2788 | 336 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
337 g_thread_create((GThreadFunc) update_thread_core, NULL, FALSE, NULL); |
2788 | 338 } |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
339 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
340 g_mutex_unlock(update_thread_mutex); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
341 } |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
342 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
343 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
344 static gpointer update_thread_core(gpointer user_data) |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
345 { |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
346 debug("entering update thread core\n"); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
347 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
348 /* try to get the last item in the queue, but don't remove it */ |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
349 g_mutex_lock(update_thread_mutex); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
350 update_thread_data_t *data = NULL; |
2817
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
351 if (g_queue_get_length(update_thread_data_queue) > 0) { |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
352 data = g_queue_peek_head(update_thread_data_queue); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
353 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
354 g_mutex_unlock(update_thread_mutex); |
2788 | 355 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
356 /* repetitively process the queue elements, until queue is empty */ |
2817
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
357 while (data != NULL && g_queue_get_length(update_thread_data_queue) > 0) { |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
358 /* update a streaminfo */ |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
359 if (data->streaminfo != NULL) { |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
360 gdk_threads_enter(); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
361 streambrowser_win_set_streaminfo_state(data->streamdir, data->category, data->streaminfo, TRUE); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
362 gdk_threads_leave(); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
363 |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
364 if (data->add_to_playlist) |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
365 streaminfo_add_to_playlist(data->streaminfo); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
366 else { |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
367 /* shoutcast */ |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
368 if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) { |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
369 shoutcast_streaminfo_fetch(data->category, data->streaminfo); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
370 } |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
371 /* xiph */ |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
372 else if (strncmp(data->streamdir->name, XIPH_NAME, strlen(XIPH_NAME)) == 0) { |
2850
587b3657990d
xiph now updates the streams as well; i am aware of gui crashing when adding xiph streams, but tomorrow is another lovely day
Calin Crisan ccrisan@gmail.com
parents:
2848
diff
changeset
|
373 xiph_streaminfo_fetch(data->category, data->streaminfo); |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
374 } |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
375 } |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
376 |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
377 gdk_threads_enter(); |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
378 if (!data->add_to_playlist) |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
379 streambrowser_win_set_streaminfo(data->streamdir, data->category, data->streaminfo); |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
380 streambrowser_win_set_streaminfo_state(data->streamdir, data->category, data->streaminfo, FALSE); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
381 gdk_threads_leave(); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
382 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
383 /* update a category */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
384 else if (data->category != NULL) { |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
385 gdk_threads_enter(); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
386 streambrowser_win_set_category_state(data->streamdir, data->category, TRUE); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
387 gdk_threads_leave(); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
388 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
389 /* shoutcast */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
390 if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
391 shoutcast_category_fetch(data->category); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
392 } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
393 /* xiph */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
394 else if (strncmp(data->streamdir->name, XIPH_NAME, strlen(XIPH_NAME)) == 0) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
395 xiph_category_fetch(data->category); |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
396 } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
397 |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
398 gdk_threads_enter(); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
399 streambrowser_win_set_category(data->streamdir, data->category); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
400 streambrowser_win_set_category_state(data->streamdir, data->category, FALSE); |
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
401 gdk_threads_leave(); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
402 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
403 /* update a streamdir */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
404 else if (data->streamdir != NULL) { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
405 /* shoutcast */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
406 if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
407 streamdir_t *streamdir = shoutcast_streamdir_fetch(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
408 if (streamdir != NULL) { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
409 gdk_threads_enter(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
410 streambrowser_win_set_streamdir(streamdir, SHOUTCAST_ICON); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
411 gdk_threads_leave(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
412 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
413 } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
414 /* xiph */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
415 else if (strncmp(data->streamdir->name, XIPH_NAME, strlen(XIPH_NAME)) == 0) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
416 streamdir_t *streamdir = xiph_streamdir_fetch(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
417 if (streamdir != NULL) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
418 gdk_threads_enter(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
419 streambrowser_win_set_streamdir(streamdir, XIPH_ICON); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
420 gdk_threads_leave(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
421 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
422 } |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
423 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
424 /* update all streamdirs */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
425 else { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
426 /* shoutcast */ |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
427 streamdir_t *streamdir = shoutcast_streamdir_fetch(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
428 if (streamdir != NULL) { |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
429 gdk_threads_enter(); |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
430 streambrowser_win_set_streamdir(streamdir, SHOUTCAST_ICON); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
431 gdk_threads_leave(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
432 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
433 /* xiph */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
434 streamdir = xiph_streamdir_fetch(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
435 if (streamdir != NULL) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
436 gdk_threads_enter(); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
437 streambrowser_win_set_streamdir(streamdir, XIPH_ICON); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
438 gdk_threads_leave(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
439 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
440 } |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
441 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
442 g_free(data); |
2788 | 443 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
444 g_mutex_lock(update_thread_mutex); |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
445 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
446 /* remove the just processed data from the queue */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
447 g_queue_pop_head(update_thread_data_queue); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
448 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
449 /* try to get the last item in the queue */ |
2817
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
450 if (g_queue_get_length(update_thread_data_queue) > 0) |
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
451 data = g_queue_peek_head(update_thread_data_queue); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
452 else |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
453 data = NULL; |
2817
779125caa3ac
added xiph icon; smaller icons for streamdirs; fetch queue fix; up/down keys in tree view no longer focus the search entry
Calin Crisan ccrisan@gmail.com
parents:
2815
diff
changeset
|
454 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
455 g_mutex_unlock(update_thread_mutex); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
456 } |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
457 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
458 debug("leaving update thread core\n"); |
2788 | 459 |
460 return NULL; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
461 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
462 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
463 static void streaminfo_add_to_playlist(streaminfo_t *streaminfo) |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
464 { |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
465 if (strlen(streaminfo->playlist_url) > 0) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
466 debug("fetching stream playlist for station '%s' from '%s'\n", streaminfo->name, streaminfo->playlist_url); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
467 if (!fetch_remote_to_local_file(streaminfo->playlist_url, PLAYLIST_TEMP_FILE)) { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
468 failure("shoutcast: stream playlist '%s' could not be downloaded to '%s'\n", streaminfo->playlist_url, PLAYLIST_TEMP_FILE); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
469 return; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
470 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
471 debug("stream playlist '%s' successfuly downloaded to '%s'\n", streaminfo->playlist_url, PLAYLIST_TEMP_FILE); |
2788 | 472 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
473 aud_playlist_add(aud_playlist_get_active(), PLAYLIST_TEMP_FILE); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
474 debug("stream playlist '%s' added\n", streaminfo->playlist_url); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
475 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
476 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
477 if (strlen(streaminfo->url) > 0) { |
2850
587b3657990d
xiph now updates the streams as well; i am aware of gui crashing when adding xiph streams, but tomorrow is another lovely day
Calin Crisan ccrisan@gmail.com
parents:
2848
diff
changeset
|
478 aud_playlist_add(aud_playlist_get_active(), streaminfo->url); |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
479 debug("stream '%s' added\n", streaminfo->url); |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
480 } |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
481 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
482 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
483 static void on_plugin_services_menu_item_click() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
484 { |
2788 | 485 debug("on_plugin_services_menu_item_click()\n"); |
486 | |
487 streambrowser_win_show(); | |
2848
fbb32674bfd2
click on a stream updates; more comments; more proper stream icons
Calin Crisan ccrisan@gmail.com
parents:
2817
diff
changeset
|
488 streamdir_update(NULL, NULL, NULL, FALSE); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
489 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
490 |