#!/usr/bin/env python3 # SPDX-License-Identifier: BSD-2-Clause """Generate preview/index.html for a sound theme.""" from __future__ import annotations import shutil import subprocess import sys from pathlib import Path TEMPLATE = Path(__file__).with_name("preview_template.html") def duration(path: Path) -> float: ffp = shutil.which("ffprobe") or "ffprobe" return float(subprocess.run( [ffp, "-v", "error", "-show_entries", "format=duration", "-of", "default=nw=1:nk=1", str(path)], capture_output=True, text=True, check=True).stdout.strip()) def main() -> int: theme = Path(sys.argv[1]) out = Path(sys.argv[2]) if len(sys.argv) > 2 else Path("preview/index.html") files = sorted((theme / "stereo").glob("*.oga")) names = ", ".join(f'["{f.stem}", {duration(f):.2f}]' for f in files if f.stem != "theme-demo") html = TEMPLATE.read_text(encoding="utf-8") extra = {} for cand in (Path("preview.meta"), theme.parent / "preview.meta", theme / "preview.meta"): if cand.is_file(): meta = cand break else: meta = None if meta is not None: for line in meta.read_text(encoding="utf-8").splitlines(): if "=" in line and not line.startswith("#"): k, v = line.split("=", 1) extra[k.strip()] = v.strip() extra.setdefault("title", theme.name) extra.setdefault("tagline", "") extra.setdefault("accent", "#2fb4d2") extra.setdefault("accent2", "#70c493") extra.setdefault("bg", "#0c1822") extra.setdefault("fg", "#d7e6ee") extra.setdefault("license", "CC BY-SA 4.0") extra["names"] = "[ " + names + " ]" extra["nsounds"] = str(len(files)) out.parent.mkdir(parents=True, exist_ok=True) out.write_text(html.format(**extra), encoding="utf-8") print(f"scritto {out} ({len(files)} cue)") return 0 if __name__ == "__main__": sys.exit(main())