millores en el resum del final
el resum del final ix sempre, inclus despres de fer control-c Millores en presentació per pantalla
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
# main.py
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import os
|
||||
import shutil
|
||||
from core.scanner import find_comic_files
|
||||
from core.pipeline import Pipeline
|
||||
from core.summary import SummaryCollector
|
||||
@@ -8,6 +11,26 @@ from core.collision import CollisionPolicy
|
||||
|
||||
_COL_W = 30
|
||||
_SEP = "─" * 44
|
||||
_BOLD = "\033[1m"
|
||||
_DIM = "\033[2m"
|
||||
_RST = "\033[0m"
|
||||
|
||||
|
||||
def _human_size(size: int) -> str:
|
||||
if size >= 1_073_741_824:
|
||||
return f"{size / 1_073_741_824:.1f} GB"
|
||||
if size >= 1_048_576:
|
||||
return f"{size / 1_048_576:.1f} MB"
|
||||
return f"{size / 1024:.1f} KB"
|
||||
|
||||
|
||||
def _print_file_header(path: str, i: int = 0, total: int = 0) -> None:
|
||||
name = os.path.basename(path)
|
||||
size_str = _human_size(os.path.getsize(path))
|
||||
counter = f"{_DIM}[{i}/{total}]{_RST} " if i and total else ""
|
||||
term_w = shutil.get_terminal_size(fallback=(80, 24)).columns
|
||||
print(f"\n{'─' * term_w}")
|
||||
print(f" {counter}{_BOLD}{name}{_RST} {_DIM}({size_str}){_RST}")
|
||||
|
||||
|
||||
def _print_preview(step: str, preview: dict, formato: str) -> None:
|
||||
@@ -44,6 +67,16 @@ def _print_preview(step: str, preview: dict, formato: str) -> None:
|
||||
print(f"Formato final del archivo: {fmt}")
|
||||
|
||||
|
||||
def _save_log(collector, script_dir):
|
||||
log_dir = os.path.join(script_dir, "validaciones")
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
ts = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
||||
log_path = os.path.join(log_dir, f"{ts}.log")
|
||||
with open(log_path, "w", encoding="utf-8") as fh:
|
||||
fh.write(collector.full_log())
|
||||
return log_path
|
||||
|
||||
|
||||
def make_confirm_fn(args):
|
||||
def confirm_fn(step: str, preview: dict) -> bool:
|
||||
if step == "convert":
|
||||
@@ -93,13 +126,24 @@ def main():
|
||||
if args.validar:
|
||||
pipeline = Pipeline(steps=[])
|
||||
collector = SummaryCollector()
|
||||
for f in comic_files:
|
||||
result = pipeline.run(f)
|
||||
collector.add(result)
|
||||
if result.has_issues():
|
||||
print(result.full_report())
|
||||
total = len(comic_files)
|
||||
try:
|
||||
for i, f in enumerate(comic_files, 1):
|
||||
size_str = _human_size(os.path.getsize(f))
|
||||
name = os.path.basename(f)
|
||||
term_w = shutil.get_terminal_size(fallback=(80, 24)).columns
|
||||
line = f" [{i}/{total}] {name} ({size_str})"
|
||||
print(f"\r{line[:term_w]:<{term_w}}", end="", flush=True)
|
||||
result = pipeline.run(f)
|
||||
collector.add(result)
|
||||
except KeyboardInterrupt:
|
||||
print("\n (interrumpido)")
|
||||
finally:
|
||||
if collector._results:
|
||||
print()
|
||||
print(collector.render())
|
||||
print(collector.render())
|
||||
log_path = _save_log(collector, os.path.dirname(os.path.abspath(__file__)))
|
||||
print(f" Log completo: {log_path}")
|
||||
return
|
||||
|
||||
# --- Construir steps ---
|
||||
@@ -125,12 +169,20 @@ def main():
|
||||
collision_policy=collision,
|
||||
)
|
||||
collector = SummaryCollector()
|
||||
for f in comic_files:
|
||||
print(f"\n=== {f} ===")
|
||||
result = pipeline.run(f, confirm_fn=confirm_fn)
|
||||
print(result.summary())
|
||||
collector.add(result)
|
||||
print(f"\n{collector.render()}")
|
||||
try:
|
||||
total = len(comic_files)
|
||||
for i, f in enumerate(comic_files, 1):
|
||||
_print_file_header(f, i, total)
|
||||
result = pipeline.run(f, confirm_fn=confirm_fn)
|
||||
print(result.summary())
|
||||
collector.add(result)
|
||||
except KeyboardInterrupt:
|
||||
print("\n (interrumpido)")
|
||||
finally:
|
||||
if collector._results:
|
||||
print(f"\n{collector.render()}")
|
||||
log_path = _save_log(collector, os.path.dirname(os.path.abspath(__file__)))
|
||||
print(f" Log completo: {log_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user