/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ // async fn vtt_stream(json: bool, node: Arc, spec: StreamSpec, b: DuplexStream) -> Result<()> { // TODO cache // TODO should use fragments too? big films take too long... // let tracki = *spec.track.first().ok_or(anyhow!("no track selected"))?; // let local_track = local_tracks.first().ok_or(anyhow!("no tracks"))?.clone(); // let track = &node.media.as_ref().unwrap().tracks[tracki]; // let cp = local_track.codec_private.clone(); // let subtitles = async_cache_memory( // &[ // "vtt", // &format!( // "{} {}", // local_track.path.to_str().unwrap(), // local_track.track // ), // ], // move || async move { // let blocks = tokio::task::spawn_blocking(move || { // extract_track(CONF.media_path.clone(), local_track) // }) // .await??; // let subtitles = parse_subtitles(&track.codec, cp, blocks)?; // Ok(subtitles) // }, // )spec.track.first().ok_or(anyhow!("no track selected"))?; // let local_track = local_tracks.first().ok_or(anyhow!("no tracks"))?.clone(); // let track = &node.media.as_ref().unwrap().tracks[tracki]; // let cp = local_track.codec_private.clone(); // let subtitles = async_cache_memory( // &[ // "vtt", // &format!( // "{} {}", // local_track.path.to_str().unwrap(), // local_track.track // ), // ], // move || async move { // let blocks = tokio::task::spawn_blocking(move || { // extract_track(CONF.media_path.clone(), local_track) // }) // .await??; // let subtitles = parse_subtitles(&track.codec, cp, blocks)?; // Ok(subtitles) // }, // ) // .await?; // let output = if json { // serde_json::to_string(subtitles.as_ref())? // } else { // write_webvtt(node.title.clone().unwrap_or_default(), subtitles.as_ref()) // .context("writing webvtt")? // }; // tokio::task::spawn(async move { // let _ = b.write_all(output.as_bytes()).await; // }); // .await?; // let output = if json { // serde_json::to_string(subtitles.as_ref())? // } else { // write_webvtt(node.title.clone().unwrap_or_default(), subtitles.as_ref()) // .context("writing webvtt")? // }; // tokio::task::spawn(async move { // let _ = b.write_all(output.as_bytes()).await; // }); // Ok(()) // }