anti-prestige-tool/reforger_queue/reader.py

57 lines
1.4 KiB
Python

import os
import tempfile
from dataclasses import dataclass
from .magick import run_bytes
from .ocr import read_queue_number, resolve_crop
from .portal import capture_portal_window
@dataclass
class QueueReadResult:
number: str
details: list
crop: tuple | None = None
portal_info: dict | None = None
def read_image_once(args, image_path):
crop = resolve_crop(
image_path,
args.crop,
args.reference_crop,
args.reference_size,
args.scale_mode,
args.cropped,
)
number, details = read_queue_number(
image_path,
crop,
args.template_set,
args.font,
args.pointsize,
args.cropped,
)
return QueueReadResult(number=number, details=details, crop=crop)
def read_portal_window_once(args):
fd, image_path = tempfile.mkstemp(prefix="reforger-queue-", suffix=".png")
os.close(fd)
try:
portal_info = capture_portal_window(
image_path,
args.portal_restore_token,
args.portal_reselect,
args.portal_timeout,
)
if args.save_input:
run_bytes(["magick", image_path, "+repage", args.save_input])
result = read_image_once(args, image_path)
result.portal_info = portal_info
return result
finally:
try:
os.unlink(image_path)
except OSError:
pass