"""The download stage's progress line.""" import os from archipelago_tester.core.display.progress import Progress class DownloadReporter: """One line per game, saying what its apworld did. The download run calls back serialized, so this needs no lock of its own. What each game's last asset did is remembered so the line can still name it once the game itself finishes. """ #: What each download status means, in words. STATUS_LABELS = { "missing": "downloaded (new)", "stale": "downloaded (updated)", "verified": "already present (verified up to date)", "assumed": "already present (not verified)", } def __init__(self, config, total): self.bar = Progress(total, config=config, labels={"ok": "ok", "none": "none"}) self.last_asset = {} def on_asset(self, game_name, path, status): label = self.STATUS_LABELS.get(status, status) self.last_asset[game_name] = f"{label} {os.path.basename(path)}" def on_game(self, index, total, game_name, downloaded): detail = self.last_asset.pop(game_name, "no apworld") self.bar.update( index, "ok" if downloaded else "none", game_name, fallback_line=f"[{index}/{total}] {game_name}: {detail}")