Mercurial > audlegacy-plugins
annotate src/streambrowser/streambrowser.c @ 2891:c27da2c06805
initial code for bookmarks
author | Calin Crisan ccrisan@gmail.com |
---|---|
date | Tue, 12 Aug 2008 23:49:32 +0200 |
parents | 6c53f9fa9029 |
children | 113454baecf8 |
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> |
2891 | 22 #include <glib.h> |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
23 #include <audacious/plugin.h> |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
24 #include <audacious/ui_plugin_menu.h> |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
25 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
26 #include "streambrowser.h" |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
27 #include "streamdir.h" |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
28 #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
|
29 #include "xiph.h" |
2891 | 30 #include "bookmarks.h" |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
31 #include "gui/streambrowser_win.h" |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
32 #include "gui/about_win.h" |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
33 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
34 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
35 typedef struct { |
2891 | 36 |
37 gboolean debug; | |
38 bookmark_t *bookmarks; | |
39 int bookmarks_count; | |
40 | |
41 } streambrowser_cfg_t; | |
42 | |
43 typedef struct { | |
44 | |
2788 | 45 streamdir_t *streamdir; |
46 category_t *category; | |
47 streaminfo_t *streaminfo; | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
48 gboolean add_to_playlist; |
2891 | 49 |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
50 } update_thread_data_t; |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
51 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
52 |
2788 | 53 static void sb_init(); |
54 static void sb_about(); | |
55 static void sb_configure(); | |
56 static void sb_cleanup(); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
57 |
2788 | 58 static void gui_init(); |
59 static void gui_done(); | |
60 static void config_load(); | |
61 static void config_save(); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
62 |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
63 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
|
64 static gpointer update_thread_core(gpointer user_data); |
2788 | 65 static void streaminfo_add_to_playlist(streaminfo_t *streaminfo); |
66 static void on_plugin_services_menu_item_click(); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
67 |
2788 | 68 static GtkWidget *playlist_menu_item; |
69 static GtkWidget *main_menu_item; | |
70 static GQueue *update_thread_data_queue = NULL; | |
71 static GMutex *update_thread_mutex = NULL; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
72 |
2788 | 73 streambrowser_cfg_t streambrowser_cfg; |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
74 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
75 static GeneralPlugin sb_plugin = |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
76 { |
2788 | 77 .description = "Stream Browser", |
78 .init = sb_init, | |
79 .about = sb_about, | |
80 .configure = sb_configure, | |
81 .cleanup = sb_cleanup | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
82 }; |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
83 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
84 GeneralPlugin *sb_gplist[] = |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
85 { |
2788 | 86 &sb_plugin, |
87 NULL | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
88 }; |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
89 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
90 SIMPLE_GENERAL_PLUGIN(streambrowser, sb_gplist); |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
91 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
92 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
93 void debug(const char *fmt, ...) |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
94 { |
2788 | 95 if (streambrowser_cfg.debug) { |
96 va_list ap; | |
97 fprintf(stderr, "* streambrowser: "); | |
98 va_start(ap, fmt); | |
99 vfprintf(stderr, fmt, ap); | |
100 va_end(ap); | |
101 } | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
102 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
103 |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
104 void failure(const char *fmt, ...) |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
105 { |
2788 | 106 va_list ap; |
107 fprintf(stderr, "! streambrowser: "); | |
108 va_start(ap, fmt); | |
109 vfprintf(stderr, fmt, ap); | |
110 va_end(ap); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
111 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
112 |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
113 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
|
114 { |
2788 | 115 VFSFile *remote_file = aud_vfs_fopen(remote_url, "r"); |
116 if (remote_file == NULL) { | |
117 failure("failed to fetch file '%s'\n", remote_url); | |
118 return FALSE; | |
119 } | |
120 | |
121 VFSFile *local_file = aud_vfs_fopen(local_url, "w"); | |
122 if (local_file == NULL) { | |
123 aud_vfs_fclose(remote_file); | |
124 | |
125 failure("failed to create local file '%s'\n", local_file); | |
126 return FALSE; | |
127 } | |
128 | |
129 unsigned char buff[DEF_BUFFER_SIZE]; | |
130 int size; | |
131 while (!aud_vfs_feof(remote_file)) { | |
132 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
|
133 |
2788 | 134 // i don't know why aud_vfs_feof() doesn't ever return TRUE |
135 // so this is a workaround to properly end the loop | |
136 if (size == 0) | |
137 break; | |
138 | |
139 size = aud_vfs_fwrite(buff, 1, size, local_file); | |
140 if (size == 0) { | |
141 aud_vfs_fclose(local_file); | |
142 aud_vfs_fclose(remote_file); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
143 |
2788 | 144 failure("failed to write to local file '%s'\n", local_file); |
145 return FALSE; | |
146 } | |
147 } | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
148 |
2788 | 149 aud_vfs_fclose(local_file); |
150 aud_vfs_fclose(remote_file); | |
151 | |
152 return TRUE; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
153 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
154 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
155 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
|
156 { |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
157 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
|
158 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
|
159 int i; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
160 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
161 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
|
162 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
|
163 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
164 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
|
165 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
|
166 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
|
167 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
|
168 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
169 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
|
170 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
171 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
|
172 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
|
173 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
174 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
|
175 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
176 |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
177 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
178 static void sb_init() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
179 { |
2788 | 180 /* workaround to print sb_init() */ |
181 streambrowser_cfg.debug = TRUE; | |
182 debug("sb_init()\n"); | |
183 streambrowser_cfg.debug = FALSE; | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
184 |
2788 | 185 config_load(); |
186 gui_init(); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
187 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
188 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
189 static void sb_about() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
190 { |
2788 | 191 debug("sb_about()\n"); |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
192 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
193 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
194 static void sb_configure() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
195 { |
2788 | 196 debug("sb_configure()\n"); |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
197 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
198 |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
199 static void sb_cleanup() |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
200 { |
2788 | 201 debug("sb_cleanup()\n"); |
202 | |
203 gui_done(); | |
204 config_save(); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
205 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
206 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
207 static void gui_init() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
208 { |
2788 | 209 /* 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
|
210 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
|
211 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(playlist_menu_item), gtk_image_new_from_file(STREAMBROWSER_ICON_SMALL)); |
2788 | 212 gtk_widget_show(playlist_menu_item); |
213 g_signal_connect(G_OBJECT(playlist_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL); | |
214 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
|
215 |
2790
c156102069ae
background fetching of streaming info is now indicated in gui
Calin Crisan ccrisan@gmail.com
parents:
2788
diff
changeset
|
216 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
|
217 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(main_menu_item), gtk_image_new_from_file(STREAMBROWSER_ICON_SMALL)); |
2788 | 218 gtk_widget_show(main_menu_item); |
219 g_signal_connect(G_OBJECT(main_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL); | |
220 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
|
221 |
2788 | 222 /* main streambrowser window */ |
223 streambrowser_win_init(); | |
224 streambrowser_win_set_update_function(streamdir_update); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
225 |
2788 | 226 /* others */ |
227 update_thread_mutex = g_mutex_new(); | |
228 update_thread_data_queue = g_queue_new(); | |
229 | |
230 debug("gui initialized\n"); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
231 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
232 |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
233 static void gui_done() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
234 { |
2788 | 235 /* the plugin services menu */ |
236 audacious_menu_plugin_item_remove(AUDACIOUS_MENU_PLAYLIST_RCLICK, playlist_menu_item); | |
237 audacious_menu_plugin_item_remove(AUDACIOUS_MENU_MAIN, main_menu_item); | |
238 | |
239 /* main streambrowser window */ | |
240 streambrowser_win_hide(); | |
241 streambrowser_win_done(); | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
242 |
2788 | 243 /* others */ |
244 if (update_thread_mutex) | |
245 g_mutex_free(update_thread_mutex); | |
246 update_thread_mutex = NULL; | |
247 if (update_thread_data_queue) | |
248 g_queue_free(update_thread_data_queue); | |
249 update_thread_data_queue = NULL; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
250 |
2788 | 251 debug("gui destroyed\n"); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
252 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
253 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
254 static void config_load() |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
255 { |
2788 | 256 streambrowser_cfg.debug = FALSE; |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
257 |
2788 | 258 mcs_handle_t *db; |
259 if ((db = aud_cfg_db_open()) == NULL) { | |
260 failure("failed to load configuration\n"); | |
261 return; | |
262 } | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
263 |
2891 | 264 aud_cfg_db_get_bool(db, "streambrowser", "debug", &streambrowser_cfg.debug); |
265 aud_cfg_db_get_int(db, "streambrowser", "bookmarks_count", &streambrowser_cfg.bookmarks_count); | |
266 | |
267 streambrowser_cfg.bookmarks = g_malloc(sizeof(bookmark_t) * streambrowser_cfg.bookmarks_count); | |
268 | |
269 int i; | |
270 gchar item[DEF_STRING_LEN]; | |
271 gchar *value; | |
272 for (i = 0; i < streambrowser_cfg.bookmarks_count; i++) { | |
273 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i); | |
274 aud_cfg_db_get_string(db, "streambrowser", item, &value); | |
275 strncpy(streambrowser_cfg.bookmarks[i].streamdir_name, value, DEF_STRING_LEN); | |
276 g_free(value); | |
277 | |
278 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_category_name", i); | |
279 aud_cfg_db_get_string(db, "streambrowser", item, &value); | |
280 strncpy(streambrowser_cfg.bookmarks[i].category_name, value, DEF_STRING_LEN); | |
281 g_free(value); | |
282 | |
283 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_name", i); | |
284 aud_cfg_db_get_string(db, "streambrowser", item, &value); | |
285 strncpy(streambrowser_cfg.bookmarks[i].name, value, DEF_STRING_LEN); | |
286 g_free(value); | |
287 | |
288 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_playlist_url", i); | |
289 aud_cfg_db_get_string(db, "streambrowser", item, &value); | |
290 strncpy(streambrowser_cfg.bookmarks[i].playlist_url, value, DEF_STRING_LEN); | |
291 g_free(value); | |
292 | |
293 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_url", i); | |
294 aud_cfg_db_get_string(db, "streambrowser", item, &value); | |
295 strncpy(streambrowser_cfg.bookmarks[i].url, value, DEF_STRING_LEN); | |
296 g_free(value); | |
297 } | |
2788 | 298 |
299 aud_cfg_db_close(db); | |
300 | |
301 debug("configuration loaded\n"); | |
302 debug("debug = %d\n", streambrowser_cfg.debug); | |
2891 | 303 |
304 // todo: write all other config options to the console | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
305 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
306 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
307 static void config_save() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
308 { |
2788 | 309 mcs_handle_t *db; |
310 if ((db = aud_cfg_db_open()) == NULL) { | |
311 failure("failed to save configuration\n"); | |
312 return; | |
313 } | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
314 |
2788 | 315 aud_cfg_db_set_bool(db, "streambrowser", "debug", streambrowser_cfg.debug); |
2891 | 316 |
317 int old_bookmarks_count, i; | |
318 gchar item[DEF_STRING_LEN]; | |
319 aud_cfg_db_get_int(db, "streambrowser", "bookmarks_count", &old_bookmarks_count); | |
320 aud_cfg_db_set_int(db, "streambrowser", "bookmarks_count", streambrowser_cfg.bookmarks_count); | |
321 | |
322 for (i = 0; i < streambrowser_cfg.bookmarks_count; i++) { | |
323 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i); | |
324 aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].streamdir_name); | |
325 | |
326 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_category_name", i); | |
327 aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].category_name); | |
328 | |
329 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_name", i); | |
330 aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].name); | |
331 | |
332 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_playlist_url", i); | |
333 aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].playlist_url); | |
334 | |
335 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_url", i); | |
336 aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].url); | |
337 } | |
338 | |
339 for (i = streambrowser_cfg.bookmarks_count; i < old_bookmarks_count; i++) { | |
340 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i); | |
341 aud_cfg_db_unset_key(db, "streambrowser", item); | |
342 | |
343 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_category_name", i); | |
344 aud_cfg_db_unset_key(db, "streambrowser", item); | |
345 | |
346 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_name", i); | |
347 aud_cfg_db_unset_key(db, "streambrowser", item); | |
348 | |
349 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_playlist_url", i); | |
350 aud_cfg_db_unset_key(db, "streambrowser", item); | |
351 | |
352 g_snprintf(item, DEF_STRING_LEN, "bookmark%d_url", i); | |
353 aud_cfg_db_unset_key(db, "streambrowser", item); | |
354 } | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
355 |
2788 | 356 aud_cfg_db_close(db); |
357 | |
358 debug("configuration saved\n"); | |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
359 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
360 |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
361 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
|
362 { |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
363 debug("requested streamdir update (streamdir = '%s', category = '%s', streaminfo = '%s', add_to_playlist = %d)\n", |
2788 | 364 streamdir == NULL ? "" : streamdir->name, |
365 category == NULL ? "" : category->name, | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
366 streaminfo == NULL ? "" : streaminfo->name, |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
367 add_to_playlist); |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
368 |
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
|
369 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
|
370 debug("another %d streamdir updates are pending, this request will be dropped\n", g_queue_get_length(update_thread_data_queue)); |
2788 | 371 } |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
372 else { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
373 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
|
374 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
375 /* 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
|
376 if (g_queue_get_length(update_thread_data_queue) > 0) { |
2788 | 377 int i; |
378 gboolean exists = FALSE; | |
379 update_thread_data_t *update_thread_data; | |
380 | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
381 /* search for another identic update request */ |
2788 | 382 for (i = 0; i < g_queue_get_length(update_thread_data_queue); i++) { |
383 update_thread_data = g_queue_peek_nth(update_thread_data_queue, i); | |
384 if (update_thread_data->streamdir == streamdir && | |
385 update_thread_data->category == category && | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
386 update_thread_data->streaminfo == streaminfo && |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
387 update_thread_data->add_to_playlist == add_to_playlist) { |
2788 | 388 exists = TRUE; |
389 break; | |
390 } | |
391 } | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
392 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
393 /* if no other similar request exists, we enqueue it */ |
2788 | 394 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
|
395 debug("another %d streamdir updates are pending, this request will be queued\n", g_queue_get_length(update_thread_data_queue)); |
2788 | 396 |
397 update_thread_data = g_malloc(sizeof(update_thread_data_t)); | |
398 | |
399 update_thread_data->streamdir = streamdir; | |
400 update_thread_data->category = category; | |
401 update_thread_data->streaminfo = streaminfo; | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
402 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
|
403 |
2788 | 404 g_queue_push_tail(update_thread_data_queue, update_thread_data); |
405 } | |
406 else { | |
407 debug("this request is already present in the queue, dropping\n"); | |
408 } | |
409 } | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
410 /* no thread is currently running, we start one */ |
2788 | 411 else { |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
412 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
|
413 |
2788 | 414 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
|
415 |
2788 | 416 data->streamdir = streamdir; |
417 data->category = category; | |
418 data->streaminfo = streaminfo; | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
419 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
|
420 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
421 g_queue_push_tail(update_thread_data_queue, data); |
2788 | 422 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
423 g_thread_create((GThreadFunc) update_thread_core, NULL, FALSE, NULL); |
2788 | 424 } |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
425 |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
426 g_mutex_unlock(update_thread_mutex); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
427 } |
2570
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
428 } |
28498c0bde64
Initial commit for the streambrowser plugin
Calin Crisan ccrisan@gmail.com
parents:
diff
changeset
|
429 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
430 static gpointer update_thread_core(gpointer user_data) |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
431 { |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
432 debug("entering update thread core\n"); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
433 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
434 /* 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
|
435 g_mutex_lock(update_thread_mutex); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
436 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
|
437 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
|
438 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
|
439 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
440 g_mutex_unlock(update_thread_mutex); |
2788 | 441 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
442 /* 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
|
443 while (data != NULL && g_queue_get_length(update_thread_data_queue) > 0) { |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
444 /* update a streaminfo */ |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
445 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
|
446 gdk_threads_enter(); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
447 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
|
448 gdk_threads_leave(); |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
449 |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
450 if (data->add_to_playlist) |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
451 streaminfo_add_to_playlist(data->streaminfo); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
452 else { |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
453 /* shoutcast */ |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
454 if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) { |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
455 shoutcast_streaminfo_fetch(data->category, data->streaminfo); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
456 } |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
457 /* xiph */ |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
458 else if (strncmp(data->streamdir->name, XIPH_NAME, strlen(XIPH_NAME)) == 0) { |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
459 xiph_streaminfo_fetch(data->category, data->streaminfo); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
460 } |
2891 | 461 /* bookmarks */ |
462 else if (strncmp(data->streamdir->name, BOOKMARKS_NAME, strlen(BOOKMARKS_NAME)) == 0) { | |
463 bookmarks_streaminfo_fetch(data->category, data->streaminfo); | |
464 } | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
465 } |
2797
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
466 |
11fb1503ee4b
double click adds stream to playlist; visual feedback when adding streams
Calin Crisan ccrisan@gmail.com
parents:
2795
diff
changeset
|
467 gdk_threads_enter(); |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
468 if (!data->add_to_playlist) |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
469 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
|
470 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
|
471 gdk_threads_leave(); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
472 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
473 /* update a category */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
474 else if (data->category != NULL) { |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
475 gdk_threads_enter(); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
476 streambrowser_win_set_category_state(data->streamdir, data->category, TRUE); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
477 gdk_threads_leave(); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
478 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
479 /* shoutcast */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
480 if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) { |
2891 | 481 shoutcast_category_fetch(data->streamdir, data->category); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
482 } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
483 /* xiph */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
484 else if (strncmp(data->streamdir->name, XIPH_NAME, strlen(XIPH_NAME)) == 0) { |
2891 | 485 xiph_category_fetch(data->streamdir, data->category); |
486 } | |
487 /* bookmarks */ | |
488 else if (strncmp(data->streamdir->name, BOOKMARKS_NAME, strlen(BOOKMARKS_NAME)) == 0) { | |
489 bookmarks_category_fetch(data->streamdir, data->category); | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
490 } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
491 |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
492 gdk_threads_enter(); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
493 streambrowser_win_set_category(data->streamdir, data->category); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
494 streambrowser_win_set_category_state(data->streamdir, data->category, FALSE); |
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
495 gdk_threads_leave(); |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
496 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
497 /* update a streamdir */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
498 else if (data->streamdir != NULL) { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
499 /* shoutcast */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
500 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
|
501 streamdir_t *streamdir = shoutcast_streamdir_fetch(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
502 if (streamdir != NULL) { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
503 gdk_threads_enter(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
504 streambrowser_win_set_streamdir(streamdir, SHOUTCAST_ICON); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
505 gdk_threads_leave(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
506 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
507 } |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
508 /* xiph */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
509 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
|
510 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
|
511 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
|
512 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
|
513 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
|
514 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
|
515 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
516 } |
2891 | 517 /* bookmarks */ |
518 else if (strncmp(data->streamdir->name, BOOKMARKS_NAME, strlen(BOOKMARKS_NAME)) == 0) { | |
519 streamdir_t *streamdir = bookmarks_streamdir_fetch(streambrowser_cfg.bookmarks, streambrowser_cfg.bookmarks_count); | |
520 if (streamdir != NULL) { | |
521 gdk_threads_enter(); | |
522 streambrowser_win_set_streamdir(streamdir, BOOKMARKS_ICON); | |
523 gdk_threads_leave(); | |
524 } | |
525 } | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
526 } |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
527 /* update all streamdirs */ |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
528 else { |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
529 /* shoutcast */ |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
530 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
|
531 if (streamdir != NULL) { |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
532 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
|
533 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
|
534 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
|
535 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
536 /* xiph */ |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
537 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
|
538 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
|
539 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
|
540 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
|
541 gdk_threads_leave(); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
542 } |
2891 | 543 /* bookmarks */ |
544 streamdir = bookmarks_streamdir_fetch(streambrowser_cfg.bookmarks, streambrowser_cfg.bookmarks_count); | |
545 if (streamdir != NULL) { | |
546 gdk_threads_enter(); | |
547 streambrowser_win_set_streamdir(streamdir, BOOKMARKS_ICON); | |
548 gdk_threads_leave(); | |
549 } | |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
550 } |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
551 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
552 g_free(data); |
2788 | 553 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
554 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
|
555 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
556 /* 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
|
557 g_queue_pop_head(update_thread_data_queue); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
558 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
559 /* 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
|
560 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
|
561 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
|
562 else |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
563 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
|
564 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
565 g_mutex_unlock(update_thread_mutex); |
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
566 } |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
567 |
2795
4c9db0b2194f
added strcasestr implementation; improved searching and updating
Calin Crisan ccrisan@gmail.com
parents:
2791
diff
changeset
|
568 debug("leaving update thread core\n"); |
2788 | 569 |
570 return NULL; | |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
571 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
572 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
573 static void streaminfo_add_to_playlist(streaminfo_t *streaminfo) |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
574 { |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
575 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
|
576 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
|
577 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
|
578 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
|
579 return; |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
580 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
581 debug("stream playlist '%s' successfuly downloaded to '%s'\n", streaminfo->playlist_url, PLAYLIST_TEMP_FILE); |
2788 | 582 |
2815
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
583 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
|
584 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
|
585 } |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
586 |
cc6f02424609
added initial support for xiph streaming directory; small bug fixes & code cleanups
Calin Crisan ccrisan@gmail.com
parents:
2811
diff
changeset
|
587 if (strlen(streaminfo->url) > 0) { |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
588 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
|
589 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
|
590 } |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
591 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
592 |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
593 static void on_plugin_services_menu_item_click() |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
594 { |
2788 | 595 debug("on_plugin_services_menu_item_click()\n"); |
596 | |
597 streambrowser_win_show(); | |
2889
6c53f9fa9029
Backed out changeset 59ff744e1e23
Matti Hamalainen <ccr@tnsp.org>
parents:
2817
diff
changeset
|
598 streamdir_update(NULL, NULL, NULL, FALSE); |
2735
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
599 } |
6d6a3eb67510
some work on the streambrowser
Calin Crisan ccrisan@gmail.com
parents:
2570
diff
changeset
|
600 |