diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-26 07:30:22 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-26 07:30:22 +0100 |
commit | 32ba7fd735b965f2c2b4d919ec25042ca5389c9e (patch) | |
tree | 6614653200fbb677c2212401a39a61d3e87564a1 /server | |
parent | 814896238c9b3928709f27606816ab6de60abdf3 (diff) | |
download | jellything-32ba7fd735b965f2c2b4d919ec25042ca5389c9e.tar jellything-32ba7fd735b965f2c2b4d919ec25042ca5389c9e.tar.bz2 jellything-32ba7fd735b965f2c2b4d919ec25042ca5389c9e.tar.zst |
set server header and refactor stream resp
Diffstat (limited to 'server')
-rw-r--r-- | server/src/routes/mod.rs | 7 | ||||
-rw-r--r-- | server/src/routes/stream.rs | 20 |
2 files changed, 25 insertions, 2 deletions
diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs index cbc1b42..d1bf7fc 100644 --- a/server/src/routes/mod.rs +++ b/server/src/routes/mod.rs @@ -5,7 +5,7 @@ */ use crate::{database::Database, library::Library, routes::ui::error::MyResult, CONF}; use jellyremuxer::RemuxerContext; -use rocket::{catchers, config::SecretKey, fs::FileServer, get, routes, Build, Config, Rocket}; +use rocket::{catchers, config::SecretKey, fs::FileServer, get, routes, Build, Config, Rocket, fairing::AdHoc, http::Header}; use std::fs::File; use stream::r_stream; use ui::{ @@ -43,7 +43,10 @@ pub fn build_rocket( }) .manage(remuxer) .manage(library) - .manage(database) + .manage(database).attach(AdHoc::on_response("set server header", |_req,res| { + res.set_header(Header::new("server","jellything")); + Box::pin(async {}) + })) .register("/", catchers![r_catch]) .mount("/assets", FileServer::from(&CONF.asset_dir)) .mount( diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs index 4fbc990..094fc6a 100644 --- a/server/src/routes/stream.rs +++ b/server/src/routes/stream.rs @@ -9,6 +9,11 @@ use anyhow::{anyhow, Context}; use jellyremuxer::RemuxerContext; use log::debug; use log::warn; +use rocket::http::Header; +use rocket::response; +use rocket::response::Responder; +use rocket::Request; +use rocket::Response; use rocket::{get, http::ContentType, response::stream::ReaderStream, State}; use std::ops::Deref; use std::path::PathBuf; @@ -66,3 +71,18 @@ pub fn r_stream( debug!("starting stream"); Ok((ContentType::WEBM, ReaderStream::one(a))) } + +pub struct StreamResponse { + stream: DuplexStream, +} + +#[rocket::async_trait] +impl<'r> Responder<'r, 'static> for StreamResponse { + fn respond_to(self, _: &'r Request<'_>) -> response::Result<'static> { + Response::build() + .header(Header::new("accept-ranges", "bytes")) + .header(ContentType::WEBM) + .streamed_body(self.stream) + .ok() + } +} |