From 3568ebefab593ba03f3d874d5b2e130aec4f1a89 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Thu, 3 Mar 2011 12:33:05 +0100 Subject: Fixed content-type and range handling. --- music.cpp | 51 +++++++-------------------------------------------- 1 file changed, 7 insertions(+), 44 deletions(-) (limited to 'music.cpp') diff --git a/music.cpp b/music.cpp index 8a28965..65e3735 100644 --- a/music.cpp +++ b/music.cpp @@ -169,20 +169,8 @@ MusicDirectory::MusicDirectory(const fs::path root) { } void MusicTrack::render(HTTP::Connection::p req) { - req->add_header("Content-Type", "audio/mpeg"); fs::path file_path = path; - - int skip = 0; - int range = 0; - - if(req->headers.count("Range")) { - if(req->headers["Range"] == "bytes=0-1024") { - range = 1025; - } else { - skip = 1025; - } - } - + if(req->args.count("decoder") && req->args.count("encoder")) { Decoder::p decoder = Decoder::get(req->args["decoder"], path.string()); Encoder::p encoder = Encoder::get(req->args["encoder"], decoder); @@ -191,37 +179,12 @@ void MusicTrack::render(HTTP::Connection::p req) { file_path = ec.get_path(); if(!fs::exists(file_path)) ec.create_cache(); - // TODO: Make an encoder-to-istream adapter to get rid of this: - char data[0x10000]; - std::streamsize size = 1; - - if(skip) { - size = encoder->read(data, skip); - } - - if(range) { - size = encoder->read(data, range); - if(size > 0) { - req->send_data(data, size); - } - return; - } - - while(size) { - size = encoder->read(data, 0x10000); - if(size > 0) - req->send_data(data, size); - } - } - - req->send_file(path); - /* - fs::ifstream is(file_path, std::ios::in | std::ios::binary); - is.seekg(0, std::ios::end); - req->add_header("content-length", boost::str(boost::format("%d") % is.tellg())); - is.seekg(0, std::ios::beg); + req->add_header("Content-Type", encoder->get_mime_type()); + } else { + // TODO: Send correct Content-Type. + req->add_header("Content-Type", "application/octet-stream"); + } - req->send_data(is); - */ + req->send_file(file_path); } -- cgit v1.2.3