from __future__ import annotations import json import time from dataclasses import dataclass from pathlib import Path ROOT = Path(__file__).resolve().parents[1] PAIR_PATH = ROOT / "data" / "phone_pairing.json" @dataclass(frozen=True, slots=True) class PairStatus: paired: bool device_name: str paired_at: float def mark_paired(device_name: str = "android") -> None: PAIR_PATH.parent.mkdir(parents=True, exist_ok=True) payload = {"paired": True, "device_name": str(device_name or "android"), "paired_at": float(time.time())} try: PAIR_PATH.write_text(json.dumps(payload, indent=2), encoding="utf-8") except Exception: pass def read_pair_status() -> PairStatus: try: if not PAIR_PATH.exists(): return PairStatus(False, "", 0.0) data = json.loads(PAIR_PATH.read_text(encoding="utf-8")) if not isinstance(data, dict): return PairStatus(False, "", 0.0) return PairStatus(bool(data.get("paired")), str(data.get("device_name") or ""), float(data.get("paired_at") or 0.0)) except Exception: return PairStatus(False, "", 0.0)