aboutsummaryrefslogtreecommitdiff
path: root/stream/src/cues.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-11-30 12:32:44 +0100
committermetamuffin <metamuffin@disroot.org>2025-11-30 12:32:44 +0100
commit8174d129fbabd2d39323678d11d868893ddb429a (patch)
tree7979a528114cd5fb827f748f678a916e8e8eeddc /stream/src/cues.rs
parent5db15c323d76dca9ae71b0204d63dcb09fbbcbc5 (diff)
downloadjellything-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.rs45
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 })
+ },
+ )
}