diff 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
line wrap: on
line diff
--- a/src/streambrowser/streambrowser.c	Tue Aug 12 20:40:31 2008 +0300
+++ b/src/streambrowser/streambrowser.c	Tue Aug 12 23:49:32 2008 +0200
@@ -19,6 +19,7 @@
 
 #include <stdlib.h>
 #include <gtk/gtk.h>
+#include <glib.h>
 #include <audacious/plugin.h>
 #include <audacious/ui_plugin_menu.h>
 
@@ -26,15 +27,26 @@
 #include "streamdir.h"
 #include "shoutcast.h"
 #include "xiph.h"
+#include "bookmarks.h"
 #include "gui/streambrowser_win.h"
 #include "gui/about_win.h"
 
 
 typedef struct {
+
+	gboolean		debug;
+	bookmark_t		*bookmarks;
+	int				bookmarks_count;
+
+} streambrowser_cfg_t;
+
+typedef struct {
+
     streamdir_t *streamdir;
     category_t *category;
     streaminfo_t *streaminfo;
     gboolean add_to_playlist;
+
 } update_thread_data_t;
 
 
@@ -249,12 +261,47 @@
         return;
     }
 
-    aud_cfg_db_get_bool(db, "streambrowser", "debug", &streambrowser_cfg.debug);
+	aud_cfg_db_get_bool(db, "streambrowser", "debug", &streambrowser_cfg.debug);
+	aud_cfg_db_get_int(db, "streambrowser", "bookmarks_count", &streambrowser_cfg.bookmarks_count);
+	
+	streambrowser_cfg.bookmarks = g_malloc(sizeof(bookmark_t) * streambrowser_cfg.bookmarks_count);
+
+    int i;
+	gchar item[DEF_STRING_LEN];
+	gchar *value;
+	for (i = 0; i < streambrowser_cfg.bookmarks_count; i++) {
+		g_snprintf(item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i);
+		aud_cfg_db_get_string(db, "streambrowser", item, &value);
+		strncpy(streambrowser_cfg.bookmarks[i].streamdir_name, value, DEF_STRING_LEN);
+		g_free(value);
+
+		g_snprintf(item, DEF_STRING_LEN, "bookmark%d_category_name", i);
+		aud_cfg_db_get_string(db, "streambrowser", item, &value);
+		strncpy(streambrowser_cfg.bookmarks[i].category_name, value, DEF_STRING_LEN);
+		g_free(value);
+
+		g_snprintf(item, DEF_STRING_LEN, "bookmark%d_name", i);
+		aud_cfg_db_get_string(db, "streambrowser", item, &value);
+		strncpy(streambrowser_cfg.bookmarks[i].name, value, DEF_STRING_LEN);
+		g_free(value);
+
+		g_snprintf(item, DEF_STRING_LEN, "bookmark%d_playlist_url", i);
+		aud_cfg_db_get_string(db, "streambrowser", item, &value);
+		strncpy(streambrowser_cfg.bookmarks[i].playlist_url, value, DEF_STRING_LEN);
+		g_free(value);
+
+		g_snprintf(item, DEF_STRING_LEN, "bookmark%d_url", i);
+		aud_cfg_db_get_string(db, "streambrowser", item, &value);
+		strncpy(streambrowser_cfg.bookmarks[i].url, value, DEF_STRING_LEN);
+		g_free(value);
+	}
 
     aud_cfg_db_close(db);
 
     debug("configuration loaded\n");
     debug("debug = %d\n", streambrowser_cfg.debug);
+    
+	// todo: write all other config options to the console
 }
 
 static void config_save()
@@ -266,6 +313,45 @@
     }
 
     aud_cfg_db_set_bool(db, "streambrowser", "debug", streambrowser_cfg.debug);
+    
+    int old_bookmarks_count, i;
+    gchar item[DEF_STRING_LEN];
+    aud_cfg_db_get_int(db, "streambrowser", "bookmarks_count", &old_bookmarks_count);
+	aud_cfg_db_set_int(db, "streambrowser", "bookmarks_count", streambrowser_cfg.bookmarks_count);
+    
+    for (i = 0; i < streambrowser_cfg.bookmarks_count; i++) {
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i);
+		aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].streamdir_name);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_category_name", i);
+		aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].category_name);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_name", i);
+		aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].name);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_playlist_url", i);
+		aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].playlist_url);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_url", i);
+		aud_cfg_db_set_string(db, "streambrowser", item, streambrowser_cfg.bookmarks[i].url);
+    }
+    
+    for (i = streambrowser_cfg.bookmarks_count; i < old_bookmarks_count; i++) {
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i);
+		aud_cfg_db_unset_key(db, "streambrowser", item);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_category_name", i);
+		aud_cfg_db_unset_key(db, "streambrowser", item);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_name", i);
+		aud_cfg_db_unset_key(db, "streambrowser", item);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_playlist_url", i);
+		aud_cfg_db_unset_key(db, "streambrowser", item);
+
+    	g_snprintf(item, DEF_STRING_LEN, "bookmark%d_url", i);
+		aud_cfg_db_unset_key(db, "streambrowser", item);
+	}
 
     aud_cfg_db_close(db);
 
@@ -372,6 +458,10 @@
 				else if (strncmp(data->streamdir->name, XIPH_NAME, strlen(XIPH_NAME)) == 0) {
 					xiph_streaminfo_fetch(data->category, data->streaminfo);
 				}
+				/* bookmarks */
+				else if (strncmp(data->streamdir->name, BOOKMARKS_NAME, strlen(BOOKMARKS_NAME)) == 0) {
+					bookmarks_streaminfo_fetch(data->category, data->streaminfo);
+				}
 			}
 
 	        gdk_threads_enter();
@@ -388,11 +478,15 @@
 	    	
 		    /* shoutcast */
 		    if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) {
-		        shoutcast_category_fetch(data->category);
+		        shoutcast_category_fetch(data->streamdir, data->category);
 		    }
 		    /* xiph */
 		    else if (strncmp(data->streamdir->name, XIPH_NAME, strlen(XIPH_NAME)) == 0) {
-		        xiph_category_fetch(data->category);
+		        xiph_category_fetch(data->streamdir, data->category);
+		    }
+		    /* bookmarks */
+		    else if (strncmp(data->streamdir->name, BOOKMARKS_NAME, strlen(BOOKMARKS_NAME)) == 0) {
+		        bookmarks_category_fetch(data->streamdir, data->category);
 		    }
 
 	        gdk_threads_enter();
@@ -420,6 +514,15 @@
 		            gdk_threads_leave();
 		        }
 		    }
+		    /* bookmarks */
+		    else if (strncmp(data->streamdir->name, BOOKMARKS_NAME, strlen(BOOKMARKS_NAME)) == 0) {
+		        streamdir_t *streamdir = bookmarks_streamdir_fetch(streambrowser_cfg.bookmarks, streambrowser_cfg.bookmarks_count);
+		        if (streamdir != NULL) {
+		            gdk_threads_enter();
+		            streambrowser_win_set_streamdir(streamdir, BOOKMARKS_ICON);
+		            gdk_threads_leave();
+		        }
+		    }
 		}
 		/* update all streamdirs */
 		else {
@@ -437,6 +540,13 @@
 		        streambrowser_win_set_streamdir(streamdir, XIPH_ICON);
 		        gdk_threads_leave();
 		    }
+		    /* bookmarks */
+		    streamdir = bookmarks_streamdir_fetch(streambrowser_cfg.bookmarks, streambrowser_cfg.bookmarks_count);
+		    if (streamdir != NULL) {
+		        gdk_threads_enter();
+		        streambrowser_win_set_streamdir(streamdir, BOOKMARKS_ICON);
+		        gdk_threads_leave();
+		    }
 		}
 
 		g_free(data);