From 925760c9c85aba319461b7499df38e706de00c57 Mon Sep 17 00:00:00 2001 From: vangel76 Date: Mon, 12 Oct 2026 19:08:21 +0200 Subject: [PATCH] Web disk cache: handle the Matte kind (mattes/ folder) Co-Authored-By: Claude Sonnet 5.5 --- apps/effectcraft-web/js/host.js | 3 ++- apps/effectcraft-web/src/diskcache.rs | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/effectcraft-web/js/host.js b/apps/effectcraft-web/js/host.js index 793900bee..3db6ad35c 100644 --- a/apps/effectcraft-web/js/host.js +++ b/apps/effectcraft-web/js/host.js @@ -404,7 +404,7 @@ export function frameWorkerStart(base, onMessage, gpu) { // ends in a checksum) and read the layer buffers they prefetch; the page lists, reads and // deletes. const CACHE_ROOT = "effectcraft-cache"; -const CACHE_KINDS = ["frames", "layers"]; +const CACHE_KINDS = ["frames", "layers", "mattes"]; const cacheDirHandles = {}; async function cacheDir(kind = "frames") { @@ -419,6 +419,7 @@ async function cacheDir(kind = "frames") { /// The folder and file name of an entry name (`layers/.ecc` or `.ecc`). async function entryDir(name) { if (name.startsWith("layers/")) return [await cacheDir("layers"), name.slice(7)]; + if (name.startsWith("mattes/")) return [await cacheDir("mattes"), name.slice(7)]; return [await cacheDir("frames"), name]; } diff --git a/apps/effectcraft-web/src/diskcache.rs b/apps/effectcraft-web/src/diskcache.rs index d96e6f132..ef9d46f8c 100644 --- a/apps/effectcraft-web/src/diskcache.rs +++ b/apps/effectcraft-web/src/diskcache.rs @@ -105,19 +105,23 @@ pub fn init() { }); } -/// An entry's name in `js/host.js`'s cache folders (`layers/` for layer buffers). +/// An entry's name in `js/host.js`'s cache folders (`layers/` for layer buffers, `mattes/` for segmentations). pub(crate) fn name_of(kind: Kind, key: u128) -> String { match kind { Kind::Frame => disk_cache::entry_name(key), Kind::Layer => format!("layers/{}", disk_cache::entry_name(key)), + Kind::Matte => format!("mattes/{}", disk_cache::entry_name(key)), } } fn parse_name(name: &str) -> Option<(Kind, u128)> { - match name.strip_prefix("layers/") { - Some(n) => Some((Kind::Layer, disk_cache::parse_entry_name(n)?)), - None => Some((Kind::Frame, disk_cache::parse_entry_name(name)?)), + if let Some(n) = name.strip_prefix("layers/") { + return Some((Kind::Layer, disk_cache::parse_entry_name(n)?)); } + if let Some(n) = name.strip_prefix("mattes/") { + return Some((Kind::Matte, disk_cache::parse_entry_name(n)?)); + } + Some((Kind::Frame, disk_cache::parse_entry_name(name)?)) } /// Layer entries (32 hex digits) a frame worker should read before its next frame: recent