diff options
Diffstat (limited to 'music.cpp')
-rw-r--r-- | music.cpp | 51 |
1 files changed, 7 insertions, 44 deletions
@@ -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); } |