From e24a026c58c07a2800662b9f5f4fd3f61d53c1d1 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 18 Jan 2023 19:13:36 +0100 Subject: player config works --- server/src/routes/stream.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'server/src/routes/stream.rs') diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs index 6ff6982..c49f51d 100644 --- a/server/src/routes/stream.rs +++ b/server/src/routes/stream.rs @@ -1,7 +1,6 @@ use super::ui::error::MyError; use crate::AppState; -use anyhow::anyhow; -use anyhow::Context; +use anyhow::{anyhow, Context}; use log::debug; use log::warn; use rocket::{get, http::ContentType, response::stream::ReaderStream, State}; @@ -9,10 +8,23 @@ use std::path::PathBuf; use tokio::io::{duplex, DuplexStream}; use tokio_util::io::SyncIoBridge; -#[get("/stream/?")] +pub fn stream_uri(path: &PathBuf, tracks: &Vec) -> String { + format!( + "/stream/{}?tracks={}", + path.to_str().unwrap().to_string(), + tracks + .iter() + .map(|v| format!("{v}")) + .collect::>() + .join(",") + ) +} + +#[get("/stream/?&")] pub fn r_stream( path: PathBuf, - selection: String, + webm: Option, + tracks: String, state: &State, ) -> Result<(ContentType, ReaderStream![DuplexStream]), MyError> { let (a, b) = duplex(1024); @@ -23,20 +35,22 @@ pub fn r_stream( .context("retrieving library node")? .get_item()?; let remuxer = state.remuxer.clone(); - let selection = selection + let tracks = tracks .split(",") .map(|e| e.parse().map_err(|_| anyhow!("invalid number"))) .into_iter() .collect::, _>>()?; let b = SyncIoBridge::new(b); + tokio::task::spawn_blocking(move || { if let Err(e) = remuxer.generate_into( b, 0, item.fs_path.parent().unwrap().to_path_buf(), - item.data.clone(), - selection, + item.info.clone(), + tracks, + webm.unwrap_or(false), ) { warn!("stream stopped: {e}") } -- cgit v1.2.3-70-g09d2