"""Configuration management for Modpack Version Checker.""" from __future__ import annotations import json from pathlib import Path from typing import Optional from pydantic import BaseModel, Field CONFIG_DIR = Path.home() / ".config" / "modpack-checker" CONFIG_FILE = CONFIG_DIR / "config.json" DEFAULT_DB_PATH = str(CONFIG_DIR / "modpacks.db") class Config(BaseModel): """Application configuration, persisted to ~/.config/modpack-checker/config.json.""" curseforge_api_key: str = "" discord_webhook_url: Optional[str] = None database_path: str = DEFAULT_DB_PATH check_interval_hours: int = Field(default=6, ge=1, le=168) notification_on_update: bool = True @classmethod def load(cls) -> "Config": """Load configuration from disk, returning defaults if not present.""" if CONFIG_FILE.exists(): try: with open(CONFIG_FILE) as f: data = json.load(f) return cls(**data) except (json.JSONDecodeError, ValueError): # Corrupted config — fall back to defaults silently return cls() return cls() def save(self) -> None: """Persist configuration to disk.""" CONFIG_DIR.mkdir(parents=True, exist_ok=True) with open(CONFIG_FILE, "w") as f: json.dump(self.model_dump(), f, indent=2) def is_configured(self) -> bool: """Return True if the minimum required config (API key) is present.""" return bool(self.curseforge_api_key)