aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-05-05 22:51:17 +0200
committerMax Kellermann <max@duempel.org>2009-05-05 22:51:17 +0200
commit4818d386771cfda8a0d2a876468c114778d6f4c2 (patch)
tree012ff9541e2a5763336982842961bd1f21205c45 /src
parente55e560d4e48eaa9d2791b56a52a52bc6620df82 (diff)
downloadmpd-4818d386771cfda8a0d2a876468c114778d6f4c2.tar.gz
mpd-4818d386771cfda8a0d2a876468c114778d6f4c2.tar.xz
mpd-4818d386771cfda8a0d2a876468c114778d6f4c2.zip
httpd_output: save the page generated by encoder_tag()
Flush the encoder before calling encoder_tag(). The first page generated by the encoder after sending the tag will be the new "header" page, which is sent to all HTTP clients when they connect. This is a little bit specific to the vorbis encoder, but there are no other encoders which support tags (yet).
Diffstat (limited to 'src')
-rw-r--r--src/output/httpd_output_plugin.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/output/httpd_output_plugin.c b/src/output/httpd_output_plugin.c
index e045e8b5a..6465b108c 100644
--- a/src/output/httpd_output_plugin.c
+++ b/src/output/httpd_output_plugin.c
@@ -402,8 +402,29 @@ httpd_output_tag(void *data, const struct tag *tag)
if (httpd->encoder->plugin->tag != NULL) {
/* embed encoder tags */
+ struct page *page;
+
+ /* flush the current stream, and end it */
+
+ encoder_flush(httpd->encoder, NULL);
+ httpd_output_encoder_to_clients(httpd);
+
+ /* send the tag to the encoder - which starts a new
+ stream now */
encoder_tag(httpd->encoder, tag, NULL);
+
+ /* the first page generated by the encoder will now be
+ used as the new "header" page, which is sent to all
+ new clients */
+
+ page = httpd_output_read_page(httpd);
+ if (page != NULL) {
+ if (httpd->header != NULL)
+ page_unref(httpd->header);
+ httpd->header = page;
+ httpd_output_broadcast_page(httpd, page);
+ }
} else {
/* use Icy-Metadata */