diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-28 10:55:10 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-28 10:55:10 +0100 |
commit | 0427a45ce8fa4762b087eeaf7e24f00678ceb48b (patch) | |
tree | 3f55f4bf994dbff980d930f51ac201beb22aa5e3 /server/src/routes | |
parent | a742f7dbd8bda0bf23a6d5273e5dd2f83b9d4c9f (diff) | |
download | jellything-0427a45ce8fa4762b087eeaf7e24f00678ceb48b.tar jellything-0427a45ce8fa4762b087eeaf7e24f00678ceb48b.tar.bz2 jellything-0427a45ce8fa4762b087eeaf7e24f00678ceb48b.tar.zst |
seeking logic
Diffstat (limited to 'server/src/routes')
-rw-r--r-- | server/src/routes/stream.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs index e7547bd..749077c 100644 --- a/server/src/routes/stream.rs +++ b/server/src/routes/stream.rs @@ -17,7 +17,7 @@ use rocket::{ }; use std::{ ops::{Deref, Range}, - path::{PathBuf, Path}, + path::{Path, PathBuf}, }; use tokio::io::{duplex, DuplexStream}; use tokio_util::io::SyncIoBridge; @@ -45,7 +45,13 @@ pub fn r_stream( library: &State<Library>, range: Option<RequestRange>, ) -> Result<StreamResponse, MyError> { - info!("stream request (range={range:?})"); + info!( + "stream request (range={})", + range + .as_ref() + .map(|r| r.to_cr_hv()) + .unwrap_or(format!("none")) + ); let (a, b) = duplex(1024); let path = path.to_str().unwrap().to_string(); let item = library @@ -60,10 +66,19 @@ pub fn r_stream( let b = SyncIoBridge::new(b); + let urange = match &range { + Some(r) => { + // TODO this can crash + let r = &r.0[0]; + r.start.unwrap_or(0)..r.end.unwrap_or(isize::MAX as usize) + } + None => 0..(isize::MAX as usize), + }; + tokio::task::spawn_blocking(move || { if let Err(e) = remuxer.generate_into( b, - 0, + urange, item.fs_path.parent().unwrap().to_path_buf(), item.info.clone(), tracks, |