summaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/media_cache.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/media_cache.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/media_cache.py36
1 files changed, 19 insertions, 17 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/media_cache.py b/packages/meshbay-node/src/meshbay_node/media_cache.py
index 2898dea..9dfdf73 100644
--- a/packages/meshbay-node/src/meshbay_node/media_cache.py
+++ b/packages/meshbay-node/src/meshbay_node/media_cache.py
@@ -4,8 +4,8 @@ Videos and Music group apps.
Node-wide (not per-group, `data_dir/media_cache.db`), same rationale as
`tmdb_enabled`/`tmdb_api_token` (and `musicbrainz_enabled`,
-docs/musicbay.md §6) living in `group_settings` under the `group_id=""`
-sentinel (docs/mediacenter.md §5.5): the credential/budget is one
+docs/MESHBAY_DESIGN.md §9.8) living in `group_settings` under the `group_id=""`
+sentinel (docs/MESHBAY_DESIGN.md §9.7): the credential/budget is one
operator's, and a thumbnail or cover image is the same bytes
regardless of which group happens to share the file. The `file_mbid`/
`mbid_meta` tables below are the Music app's equivalent of `file_tmdb`/
@@ -13,7 +13,8 @@ regardless of which group happens to share the file. The `file_mbid`/
release's cover is cached under a synthetic `musicbrainz:{mbid}` file_id,
the same trick `_fetch_and_cache_poster` uses for a TMDB poster_path).
-Disposable and rebuildable, like the rest of the file index (§1, §2) — never
+Disposable and rebuildable, like the rest of the file index
+(docs/MESHBAY_DESIGN.md §6.5) — never
a second identity for a file. Every row here is keyed off a value the node
can already derive (a file's own blake3 id, or a TMDB id), so losing this
database costs re-probing/re-fetching, not data.
@@ -98,14 +99,14 @@ CREATE TABLE IF NOT EXISTS mbid_meta (
json TEXT NOT NULL,
fetched_at REAL NOT NULL
);
--- Photos app (docs/photos.md): the technical/EXIF fields enrich_photo.py
--- reads alongside the thumbnail. Durable for the same reason `thumbs` is —
--- without this, only the thumbnail bytes survived a restart, and every
--- image was still fully re-decoded through Pillow just to re-derive
--- width/height/taken_at/camera, which get_thumb_hash_by_file_id's own
--- cache hit had already proven unnecessary. thumb_hash is not duplicated
--- here — get_thumb_hash_by_file_id(file_id) already answers that, and a
--- second copy would just be one more place for the two to drift.
+-- Photos app (docs/MESHBAY_DESIGN.md §9.9): the technical/EXIF fields
+-- enrich_photo.py reads alongside the thumbnail. Durable for the same reason
+-- `thumbs` is — without this, only the thumbnail bytes survived a restart, and
+-- every image was still fully re-decoded through Pillow just to re-derive
+-- width/height/taken_at/camera, which get_thumb_hash_by_file_id's own cache
+-- hit had already proven unnecessary. thumb_hash is not duplicated here —
+-- get_thumb_hash_by_file_id(file_id) already answers that, and a second copy
+-- would just be one more place for the two to drift.
CREATE TABLE IF NOT EXISTS photo_meta (
file_id TEXT PRIMARY KEY,
width INTEGER,
@@ -116,10 +117,10 @@ CREATE TABLE IF NOT EXISTS photo_meta (
"""
# TMDB overviews/ratings do drift; a file's own resolved tmdb_id does not
-# need re-checking on this schedule, only the metadata blob (§5.4, V3).
+# need re-checking on this schedule, only the metadata blob (V3).
TMDB_META_TTL_SECS = 30 * 86400
-# Same default as TMDB (docs/musicbay.md §6) — MusicBrainz release data is
+# Same default as TMDB (docs/MESHBAY_DESIGN.md §9.8) — MusicBrainz release data is
# not expected to drift faster; revisit if that proves wrong in practice.
MUSICBRAINZ_META_TTL_SECS = 30 * 86400
@@ -231,7 +232,7 @@ class MediaCache:
Full per-file reset: forget the match *and* any manual override
marker, so the next `media_meta_req` re-resolves from scratch with
the current matcher. This is the explicit operator "re-match this
- one" action (§10.1/V13) — deliberately stronger than
+ one" action (V13) — deliberately stronger than
`clear_file_tmdb`, which spares an override.
"""
await self._db.execute("DELETE FROM file_tmdb WHERE file_id = ?", (file_id,))
@@ -282,9 +283,10 @@ class MediaCache:
# ── tmdb id + season number -> season-level metadata json ────────────────
#
# A show's own overview (tmdb_meta above) is one static field an operator
- # found does not necessarily describe every season alike (mediacenter.md
- # §5.4) — this is TMDB's per-season `overview`/`air_date`/`poster_path`,
- # fetched and cached independently, on the same staleness schedule.
+ # found does not necessarily describe every season alike
+ # (docs/MESHBAY_DESIGN.md §9.7) — this is TMDB's per-season
+ # `overview`/`air_date`/`poster_path`, fetched and cached independently,
+ # on the same staleness schedule.
async def get_season_meta(self, tmdb_id: str, season: int) -> dict | None:
async with self._db.execute(