Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion media_shrinker.py
Original file line number Diff line number Diff line change
Expand Up @@ -1349,14 +1349,17 @@ def main(argv: list[str] | None = None) -> int:
)
)
write_report(results, report_path)
converted = [result for result in results if result.status == "converted"]
skipped = [result for result in results if result.status == "skipped_existing"]
failed = [
result
for result in results
if result.status not in {"converted", "skipped_existing"}
]
print(f"REPORT\t{report_path}")
print(
f"SUMMARY\tconverted={len(results) - len(failed)}\tfailed_or_too_large={len(failed)}"
f"SUMMARY\tconverted={len(converted)}\tskipped_existing={len(skipped)}"
f"\tfailed_or_too_large={len(failed)}"
)
return 1 if failed else 0

Expand Down
43 changes: 43 additions & 0 deletions tests/test_media_shrinker.py
Original file line number Diff line number Diff line change
Expand Up @@ -1303,6 +1303,49 @@ def test_main_execute_returns_failure_when_any_result_failed(self) -> None:

self.assertEqual(rc, 1)

def test_main_summary_does_not_count_skipped_existing_as_converted(self) -> None:
import contextlib
import io

converted = media_shrinker.ConversionResult(
source_path=Path("/scan/a.wav"),
output_path=Path("/scan/out/a.flac"),
status="converted",
original_size_bytes=4,
output_size_bytes=2,
strategy="flac-lossless",
)
skipped = media_shrinker.ConversionResult(
source_path=Path("/scan/b.wav"),
output_path=Path("/scan/out/b.flac"),
status="skipped_existing",
original_size_bytes=4,
output_size_bytes=2,
strategy="existing",
)

with tempfile.TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
(root / "a.wav").write_bytes(b"1234")
(root / "b.wav").write_bytes(b"1234")
buffer = io.StringIO()
with patch(
"media_shrinker._execute_conversions",
return_value=[converted, skipped],
), contextlib.redirect_stdout(buffer):
rc = media_shrinker.main([str(root), "--execute"])

summary_line = next(
line
for line in buffer.getvalue().splitlines()
if line.startswith("SUMMARY")
)
self.assertEqual(rc, 0)
# Only one file was actually converted; the other reused an existing
# output, so it must not inflate the converted count.
self.assertIn("converted=1", summary_line)
self.assertIn("skipped_existing=1", summary_line)

def test_execute_conversions_records_success_and_failure(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
Expand Down
Loading