summaryrefslogtreecommitdiff
path: root/music.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'music.cpp')
-rw-r--r--music.cpp51
1 files changed, 7 insertions, 44 deletions
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);
}