diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-11-30 12:32:44 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-11-30 12:32:44 +0100 |
| commit | 8174d129fbabd2d39323678d11d868893ddb429a (patch) | |
| tree | 7979a528114cd5fb827f748f678a916e8e8eeddc /stream/src/cues.rs | |
| parent | 5db15c323d76dca9ae71b0204d63dcb09fbbcbc5 (diff) | |
| download | jellything-8174d129fbabd2d39323678d11d868893ddb429a.tar jellything-8174d129fbabd2d39323678d11d868893ddb429a.tar.bz2 jellything-8174d129fbabd2d39323678d11d868893ddb429a.tar.zst | |
new sync cache
Diffstat (limited to 'stream/src/cues.rs')
| -rw-r--r-- | stream/src/cues.rs | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/stream/src/cues.rs b/stream/src/cues.rs index 646db5b..9291e18 100644 --- a/stream/src/cues.rs +++ b/stream/src/cues.rs @@ -5,7 +5,7 @@ */ use anyhow::{anyhow, Result}; -use jellycache::cache_memory; +use jellycache::{cache_memory, CacheKey}; use jellyremuxer::demuxers::create_demuxer_autodetect; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, fs::File, path::Path, sync::Arc}; @@ -29,29 +29,32 @@ pub struct StatsAndCues { } pub fn generate_cues(path: &Path) -> Result<Arc<StatsAndCues>> { - cache_memory("generated-cues", path, move || { - let media = File::open(path)?; - let mut media = - create_demuxer_autodetect(Box::new(media))?.ok_or(anyhow!("media format unknown"))?; + cache_memory( + CacheKey::new_json(("media-generated-cues", path)), + move || { + let media = File::open(path)?; + let mut media = create_demuxer_autodetect(Box::new(media))? + .ok_or(anyhow!("media format unknown"))?; - let info = media.info()?; - media.seek_cluster(None)?; + let info = media.info()?; + media.seek_cluster(None)?; - let mut stats = BTreeMap::<u64, TrackStat>::new(); - let mut cues = Vec::new(); + let mut stats = BTreeMap::<u64, TrackStat>::new(); + let mut cues = Vec::new(); - while let Some((position, cluster)) = media.read_cluster()? { - cues.push(GeneratedCue { - position, - time: cluster.timestamp * info.timestamp_scale, - }); - for block in cluster.simple_blocks { - let e = stats.entry(block.track).or_default(); - e.num_blocks += 1; - e.total_size += block.data.len() as u64; + while let Some((position, cluster)) = media.read_cluster()? { + cues.push(GeneratedCue { + position, + time: cluster.timestamp * info.timestamp_scale, + }); + for block in cluster.simple_blocks { + let e = stats.entry(block.track).or_default(); + e.num_blocks += 1; + e.total_size += block.data.len() as u64; + } } - } - Ok(StatsAndCues { stats, cues }) - }) + Ok(StatsAndCues { stats, cues }) + }, + ) } |