aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-26 07:30:22 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-26 07:30:22 +0100
commit32ba7fd735b965f2c2b4d919ec25042ca5389c9e (patch)
tree6614653200fbb677c2212401a39a61d3e87564a1 /server/src/routes
parent814896238c9b3928709f27606816ab6de60abdf3 (diff)
downloadjellything-32ba7fd735b965f2c2b4d919ec25042ca5389c9e.tar
jellything-32ba7fd735b965f2c2b4d919ec25042ca5389c9e.tar.bz2
jellything-32ba7fd735b965f2c2b4d919ec25042ca5389c9e.tar.zst
set server header and refactor stream resp
Diffstat (limited to 'server/src/routes')
-rw-r--r--server/src/routes/mod.rs7
-rw-r--r--server/src/routes/stream.rs20
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()
+ }
+}