aboutsummaryrefslogtreecommitdiff
path: root/stream/src/webvtt.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-04-16 20:06:01 +0200
committermetamuffin <metamuffin@disroot.org>2025-04-16 20:06:01 +0200
commitd26849375c70c795fdf664f9dfea68c273b6d483 (patch)
tree53ad4f0eff3604e80b27ff0abf0438ea6c69d432 /stream/src/webvtt.rs
parent1cd966f7454f052fda6c6c9ae1597479f05e23d9 (diff)
parentcdf95d7b80bd2b78895671da8f462145bb5db522 (diff)
downloadjellything-d26849375c70c795fdf664f9dfea68c273b6d483.tar
jellything-d26849375c70c795fdf664f9dfea68c273b6d483.tar.bz2
jellything-d26849375c70c795fdf664f9dfea68c273b6d483.tar.zst
Merge branch 'rewrite-stream'
Diffstat (limited to 'stream/src/webvtt.rs')
-rw-r--r--stream/src/webvtt.rs116
1 files changed, 73 insertions, 43 deletions
diff --git a/stream/src/webvtt.rs b/stream/src/webvtt.rs
index f78ac2f..e9f0181 100644
--- a/stream/src/webvtt.rs
+++ b/stream/src/webvtt.rs
@@ -3,61 +3,91 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use anyhow::{anyhow, Context, Result};
-use jellybase::{
- cache::async_cache_memory,
- common::{stream::StreamSpec, LocalTrack, Node},
- CONF,
-};
-use jellyremuxer::extract::extract_track;
-use jellytranscoder::subtitles::{parse_subtitles, write_webvtt};
+use anyhow::Result;
+use jellybase::common::{stream::StreamSpec, Node};
use std::sync::Arc;
-use tokio::io::{AsyncWriteExt, DuplexStream};
+use tokio::io::DuplexStream;
pub async fn vtt_stream(
json: bool,
node: Arc<Node>,
- local_tracks: Vec<LocalTrack>,
spec: StreamSpec,
- mut b: DuplexStream,
+ b: DuplexStream,
) -> Result<()> {
+ let _ = b;
+ let _ = spec;
+ let _ = node;
+ let _ = json;
// 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 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)
- },
- )
- .await?;
+ // 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 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;
- });
+ // 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(())
}