use anyhow::Result; use jellybase::CONF; use jellycommon::{ jhls::{JhlsMetadata, JhlsTrack}, stream::StreamSpec, LocalTrack, Node, }; use tokio::io::{AsyncWriteExt, DuplexStream}; pub async fn jhls_stream( node: Node, track_sources: Vec, _spec: StreamSpec, mut b: DuplexStream, ) -> Result<()> { let tracks = tokio::task::spawn_blocking(move || { node.public .media .as_ref() .unwrap() .tracks .iter() .enumerate() .map(|(i, t)| { let segments = jellyremuxer::snippet::snippet_index( &CONF.library_path, &node.public, &track_sources, i, )?; Ok::<_, anyhow::Error>(JhlsTrack { info: t.to_owned(), segments, }) }) .try_collect::>() }) .await??; let out = serde_json::to_string(&JhlsMetadata { tracks })?; tokio::spawn(async move { b.write_all(out.as_bytes()).await }); Ok(()) }