diff options
author | metamuffin <metamuffin@disroot.org> | 2024-01-29 20:20:42 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-01-29 20:20:42 +0100 |
commit | 46fe19f1c0814fa3975f60dcdd17c1680b161c3c (patch) | |
tree | 53adfe377325d363631f9cc73b99e1dfb850a57a /stream | |
parent | c0ba30314a06de10c9b98ac130676dcbc9f287fa (diff) | |
download | jellything-46fe19f1c0814fa3975f60dcdd17c1680b161c3c.tar jellything-46fe19f1c0814fa3975f60dcdd17c1680b161c3c.tar.bz2 jellything-46fe19f1c0814fa3975f60dcdd17c1680b161c3c.tar.zst |
caching subtitles
Diffstat (limited to 'stream')
-rw-r--r-- | stream/src/webvtt.rs | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/stream/src/webvtt.rs b/stream/src/webvtt.rs index e9d03bf..b29c7c5 100644 --- a/stream/src/webvtt.rs +++ b/stream/src/webvtt.rs @@ -4,7 +4,7 @@ Copyright (C) 2024 metamuffin <metamuffin.org> */ use anyhow::{anyhow, Context, Result}; -use jellybase::CONF; +use jellybase::{cache::async_cache_memory, CONF}; use jellycommon::{stream::StreamSpec, LocalTrack, Node}; use jellyremuxer::extract::extract_track; use jellytranscoder::subtitles::{parse_subtitles, write_webvtt}; @@ -26,16 +26,34 @@ pub async fn vtt_stream( let track = &node.public.media.unwrap().tracks[tracki]; let cp = local_track.codec_private.clone(); - let blocks = - tokio::task::spawn_blocking(move || extract_track(CONF.media_path.clone(), local_track)) + 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 = parse_subtitles(&track.codec, cp, blocks)?; let output = if json { - serde_json::to_string(&subtitles)? + serde_json::to_string(subtitles.as_ref())? } else { - write_webvtt(node.public.title.clone().unwrap_or_default(), subtitles) - .context("writing webvtt")? + write_webvtt( + node.public.title.clone().unwrap_or_default(), + subtitles.as_ref(), + ) + .context("writing webvtt")? }; tokio::task::spawn(async move { let _ = b.write_all(output.as_bytes()).await; |