From 014db5f5e4bb913e4d6391abb019bd123642fed3 Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Tue, 17 Mar 2009 14:26:54 +0100 Subject: [PATCH] Allow user to set the playlist command. Give a warning if the command cannot be started. --- src/plugin.c | 65 +++++++++++++++++++----------------------------------------- 1 file changed, 20 insertions(+), 45 deletions(-) diff --git a/src/plugin.c b/src/plugin.c index da80aea..16374fe 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -23,6 +23,7 @@ #include #include #include +#include #ifndef __WIN32__ #include #include @@ -32,8 +33,7 @@ #include #endif -#define SHOUT_HOSTNAME "http://192.150.0.102:8000/mpd.ogg" -#define SHOUT_OUTPUT "pulse" +#define SHOUT_COMMAND "mplayer -ao pulse -nocache http://192.150.0.120:8000/mpd.ogg" #include GPid ogg123_pid = -1; @@ -104,25 +104,12 @@ void shout_destroy(GtkWidget *container) { gtk_container_remove(GTK_CONTAINER(container), shout_vbox); } -static void shout_enable_toggle(GtkWidget *wid) -{ - int kk = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wid)); - shout_set_enabled(kk); -} static void shout_entry_edited(GtkWidget *entry) { const char *str = gtk_entry_get_text(GTK_ENTRY(entry)); if(str) { - cfg_set_single_value_as_string(config, "shout-plugin", "hostname",(char *)str); - } -} -static void shout_output_entry_edited(GtkWidget *entry) -{ - const char *str = gtk_entry_get_text(GTK_ENTRY(entry)); - if(str) - { - cfg_set_single_value_as_string(config, "shout-plugin", "output",(char *)str); + cfg_set_single_value_as_string(config, "shout-plugin", "command",(char *)str); } } @@ -130,20 +117,12 @@ static void shout_output_entry_edited(GtkWidget *entry) - void shout_construct(GtkWidget *container) { - GtkWidget *enable_cg = gtk_check_button_new_with_mnemonic("_Enable shout-cast streaming"); - GtkWidget *entry = NULL; - char *entry_str = cfg_get_single_value_as_string_with_default(config, "shout-plugin", "hostname",SHOUT_HOSTNAME); - char *output_str = cfg_get_single_value_as_string_with_default(config, "shout-plugin", "output",SHOUT_OUTPUT); + GtkWidget *entry = NULL, *label; + char *entry_str = cfg_get_single_value_as_string_with_default(config, "shout-plugin", "command", SHOUT_COMMAND); shout_vbox = gtk_vbox_new(FALSE,6); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enable_cg), - cfg_get_single_value_as_int_with_default(config, "shout-plugin", "enable", FALSE)); - - g_signal_connect(G_OBJECT(enable_cg), "toggled", G_CALLBACK(shout_enable_toggle), NULL); - gtk_box_pack_start(GTK_BOX(shout_vbox), enable_cg, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(container), shout_vbox); entry = gtk_entry_new(); @@ -152,23 +131,13 @@ void shout_construct(GtkWidget *container) gtk_entry_set_text(GTK_ENTRY(entry), entry_str); cfg_free_string(entry_str); } - gtk_box_pack_start(GTK_BOX(shout_vbox), gtk_label_new(_("Shout URI:")), FALSE, FALSE,0); + label = gtk_label_new(_("Playback Command:")); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_box_pack_start(GTK_BOX(shout_vbox), label, FALSE, FALSE,0); gtk_box_pack_start(GTK_BOX(shout_vbox), entry, FALSE, FALSE,0); g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(shout_entry_edited), NULL); - entry = gtk_entry_new(); - if(output_str) - { - gtk_entry_set_text(GTK_ENTRY(entry), output_str); - cfg_free_string(output_str); - } - - gtk_box_pack_start(GTK_BOX(shout_vbox), gtk_label_new(_("Audio output:")), FALSE, FALSE,0); - gtk_box_pack_start(GTK_BOX(shout_vbox), entry, FALSE, FALSE,0); - - g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(shout_output_entry_edited), NULL); - gtk_widget_show_all(container); } static void shout_pid_callback (GPid pid, @@ -183,21 +152,27 @@ static void start_ogg123(void) { if(ogg123_pid == -1) { - gchar *uri = cfg_get_single_value_as_string_with_default(config, "shout-plugin", "hostname", SHOUT_HOSTNAME); - gchar *output = cfg_get_single_value_as_string_with_default(config, "shout-plugin","output", SHOUT_OUTPUT); - gchar *argv[] = { "ogg123", "-d", output,uri, NULL}; + gchar *uri = cfg_get_single_value_as_string_with_default(config, "shout-plugin", "command", SHOUT_COMMAND); + gchar **argv = g_strsplit(uri, " ", 0); GError *error = NULL; + if(!g_spawn_async(NULL,argv, NULL, G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD,NULL, NULL, &ogg123_pid, &error)) { - printf("%s\n", error->message); - + if(error) + { + gchar *message = g_strdup_printf("%s: %s", _("Shout plugin: Failed to spawn client. Error"), error->message); + playlist3_show_error_message(message, ERROR_WARNING); + g_free(message); + g_error_free(error); + error = NULL; + } } else { g_child_watch_add(ogg123_pid, shout_pid_callback, NULL); } printf("spawned pid: %i\n", ogg123_pid); - g_free(output); + g_strfreev(argv); g_free(uri); } } -- 2.11.4.GIT