From 0427a45ce8fa4762b087eeaf7e24f00678ceb48b Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 28 Jan 2023 10:55:10 +0100 Subject: seeking logic --- server/src/routes/stream.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'server/src') 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, range: Option, ) -> Result { - 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, -- cgit v1.2.3-70-g09d2