diff --git a/src/admin.c b/src/admin.c index 37afa192..b13ced62 100644 --- a/src/admin.c +++ b/src/admin.c @@ -34,6 +34,7 @@ #include "xslt.h" #include "format.h" +#include "format_mp3.h" #include "logging.h" #ifdef _WIN32 @@ -641,7 +642,7 @@ static void command_metadata(client_t *client, source_t *source) { char *action; char *value; - format_plugin_t *format; + mp3_state *state; #ifdef USE_YP int i; time_t current_time; @@ -652,8 +653,7 @@ static void command_metadata(client_t *client, source_t *source) COMMAND_REQUIRE(client, "mode", action); COMMAND_REQUIRE(client, "song", value); - format = source->format; - if (format->type != FORMAT_TYPE_MP3) + if (source->format->type != FORMAT_TYPE_MP3) { client_send_400 (client, "Not mp3, cannot update metadata"); return; @@ -664,11 +664,14 @@ static void command_metadata(client_t *client, source_t *source) client_send_400 (client, "No such action"); return; } - if (format->set_tag) - { - if (value) - format->set_tag (format, "title", value); - } + + state = source->format->_state; + + thread_mutex_lock(&(state->lock)); + free(state->metadata); + state->metadata = strdup(value); + state->metadata_age++; + thread_mutex_unlock(&(state->lock)); DEBUG2("Metadata on mountpoint %s changed to \"%s\"", source->mount, value); diff --git a/src/format.h b/src/format.h index 84c60156..40c960f7 100644 --- a/src/format.h +++ b/src/format.h @@ -54,7 +54,6 @@ typedef struct _format_plugin_tag struct source_tag *source, client_t *client); void (*client_send_headers)(struct _format_plugin_tag *format, struct source_tag *source, client_t *client); - void (*set_tag)(struct _format_plugin_tag *plugin, char *tag, char *value); void (*free_plugin)(struct _format_plugin_tag *self); /* for internal state management */ diff --git a/src/format_mp3.c b/src/format_mp3.c index 071ee71d..affa8ad3 100644 --- a/src/format_mp3.c +++ b/src/format_mp3.c @@ -63,7 +63,6 @@ static int format_mp3_write_buf_to_client(format_plugin_t *self, client_t *client, unsigned char *buf, int len); static void format_mp3_send_headers(format_plugin_t *self, source_t *source, client_t *client); -static void mp3_set_tag (format_plugin_t *plugin, char *tag, char *value); typedef struct { int use_metadata; @@ -89,7 +88,6 @@ format_plugin_t *format_mp3_get_plugin(http_parser_t *parser) plugin->create_client_data = format_mp3_create_client_data; plugin->client_send_headers = format_mp3_send_headers; plugin->free_plugin = format_mp3_free_plugin; - plugin->set_tag = mp3_set_tag; plugin->format_description = "MP3 audio"; plugin->_state = state; @@ -106,18 +104,6 @@ format_plugin_t *format_mp3_get_plugin(http_parser_t *parser) } -static void mp3_set_tag (format_plugin_t *plugin, char *tag, char *value) -{ - mp3_state *state = plugin->_state; - - thread_mutex_lock(&(state->lock)); - free(state->metadata); - state->metadata = strdup(value); - state->metadata_age++; - thread_mutex_unlock(&(state->lock)); -} - - static int send_metadata(client_t *client, mp3_client_data *client_state, mp3_state *source_state) { diff --git a/src/format_vorbis.c b/src/format_vorbis.c index 40070f8d..2f4cc761 100644 --- a/src/format_vorbis.c +++ b/src/format_vorbis.c @@ -77,7 +77,6 @@ format_plugin_t *format_vorbis_get_plugin(void) plugin->create_client_data = format_vorbis_create_client_data; plugin->client_send_headers = format_vorbis_send_headers; plugin->free_plugin = format_vorbis_free_plugin; - plugin->set_tag = NULL; plugin->format_description = "Ogg Vorbis"; state = (vstate_t *)calloc(1, sizeof(vstate_t));