aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/stream.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-18 19:13:36 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-18 19:13:36 +0100
commite24a026c58c07a2800662b9f5f4fd3f61d53c1d1 (patch)
tree91c158ff294508f903f2489f204e313700d42828 /server/src/routes/stream.rs
parent46ef75431e1d34c63a690726a8ef584d175ddd30 (diff)
downloadjellything-e24a026c58c07a2800662b9f5f4fd3f61d53c1d1.tar
jellything-e24a026c58c07a2800662b9f5f4fd3f61d53c1d1.tar.bz2
jellything-e24a026c58c07a2800662b9f5f4fd3f61d53c1d1.tar.zst
player config works
Diffstat (limited to 'server/src/routes/stream.rs')
-rw-r--r--server/src/routes/stream.rs28
1 files changed, 21 insertions, 7 deletions
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/<path..>?<selection>")]
+pub fn stream_uri(path: &PathBuf, tracks: &Vec<u64>) -> String {
+ format!(
+ "/stream/{}?tracks={}",
+ path.to_str().unwrap().to_string(),
+ tracks
+ .iter()
+ .map(|v| format!("{v}"))
+ .collect::<Vec<_>>()
+ .join(",")
+ )
+}
+
+#[get("/stream/<path..>?<tracks>&<webm>")]
pub fn r_stream(
path: PathBuf,
- selection: String,
+ webm: Option<bool>,
+ tracks: String,
state: &State<AppState>,
) -> 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::<Result<Vec<_>, _>>()?;
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}")
}