aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-28 10:55:10 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-28 10:55:10 +0100
commit0427a45ce8fa4762b087eeaf7e24f00678ceb48b (patch)
tree3f55f4bf994dbff980d930f51ac201beb22aa5e3 /server/src
parenta742f7dbd8bda0bf23a6d5273e5dd2f83b9d4c9f (diff)
downloadjellything-0427a45ce8fa4762b087eeaf7e24f00678ceb48b.tar
jellything-0427a45ce8fa4762b087eeaf7e24f00678ceb48b.tar.bz2
jellything-0427a45ce8fa4762b087eeaf7e24f00678ceb48b.tar.zst
seeking logic
Diffstat (limited to 'server/src')
-rw-r--r--server/src/routes/stream.rs21
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,