fix(r5): address the /code-review high round — 10 findings

- HLS sweep only deletes directories matching the session-name shape; the root
  is admin-configurable and may be a shared path
- playlist unwrap picks the first entry that actually downloaded, not entries[0]
- concat quoting keeps backslashes literal (ffmpeg treats them so inside '')
- ArrowUp/Down defer while the focused element can still scroll that way
- the staging fallback skips yt-dlp working files (.part-Frag/.ytdl/.temp/.fNNN)
- the boot HLS sweep runs off the event loop
- volume persistence is debounced (was a setItem per wheel notch) and a spin no
  longer loses notches to the iframe's lagging getVolume
- _Breaker.run owns the whole open/call/record protocol; four call sites shrink
- should_prune extracted and unit-tested, plus RSS error-vs-empty tests
- the worker exits non-zero when the schema never lands
This commit is contained in:
2026-07-23 23:25:06 +02:00
parent 5130584d0a
commit 2a7f49c981
9 changed files with 307 additions and 79 deletions
+36 -2
View File
@@ -38,6 +38,22 @@ class TestProducedFile:
(tmp_path / "huge.mp4.part").write_bytes(b"x" * 999)
assert _produced_file({}, staging) == tmp_path / "big.mp4"
@pytest.mark.parametrize(
"leftover",
["vid.f137.mp4", "vid.mp4.part-Frag12", "vid.ytdl", "vid.temp.mp4", "vid.mp4.part"],
)
def test_ytdlp_working_files_never_win(self, tmp_path, leftover):
# Each of these can legitimately be the BIGGEST file in staging (a video-only per-format
# stream especially) — storing one would serve a silent or truncated "download".
(tmp_path / leftover).write_bytes(b"x" * 5000)
(tmp_path / "vid.mp4").write_bytes(b"x" * 10)
assert _produced_file({}, tmp_path) == tmp_path / "vid.mp4"
def test_only_leftovers_is_treated_as_no_output(self, tmp_path):
(tmp_path / "vid.f251.webm").write_bytes(b"x" * 5000)
with pytest.raises(RuntimeError):
_produced_file({}, tmp_path)
def test_no_output_at_all_raises(self, tmp_path):
staging = _staging(tmp_path, "only.jpg")
with pytest.raises(RuntimeError):
@@ -53,6 +69,22 @@ class TestMediaInfo:
info = {"id": "vid", "requested_downloads": [{"filepath": "/x.mp4"}]}
assert _media_info(info) is info
def test_picks_the_entry_that_actually_downloaded(self):
# A page whose first entry was skipped: taking entries[0] would label the produced file
# with the teaser's id/title.
info = {
"id": "page",
"entries": [
{"id": "teaser", "title": "Teaser"},
{"id": "main", "title": "Main", "requested_downloads": [{"filepath": "/x.mp4"}]},
],
}
assert _media_info(info)["id"] == "main"
def test_falls_back_to_the_first_entry_when_none_downloaded(self):
info = {"id": "page", "entries": [{"id": "a"}, {"id": "b"}]}
assert _media_info(info)["id"] == "a"
def test_wrapper_that_downloaded_itself_wins_over_its_entries(self):
info = {"id": "vid", "requested_downloads": [{"filepath": "/x.mp4"}], "entries": [{"id": "other"}]}
assert _media_info(info)["id"] == "vid"
@@ -98,8 +130,10 @@ class TestConcatQuote:
# A pre-0.51.0 file can still be named with an apostrophe; unescaped it breaks the list.
assert _concat_quote(PurePosixPath("/m/Don't_Look.mp4")) == "/m/Don'\\''t_Look.mp4"
def test_backslash_is_doubled(self):
assert _concat_quote(PurePosixPath("/m/a\\b.mp4")) == "/m/a\\\\b.mp4"
def test_backslash_stays_literal(self):
# Inside single quotes ffmpeg treats `\` literally — doubling it would point at a
# different (non-existent) path.
assert _concat_quote(PurePosixPath("/m/a\\b.mp4")) == "/m/a\\b.mp4"
def test_ordinary_path_is_unchanged(self):
assert _concat_quote(PurePosixPath("/m/clip.mp4")) == "/m/clip.mp4"