2026-01-17 21:49:22 +13:00
|
|
|
"""
|
|
|
|
|
Configuration manager - handles settings persistence
|
|
|
|
|
"""
|
|
|
|
|
import json
|
|
|
|
|
import logging
|
2026-01-18 23:01:03 +13:00
|
|
|
from logging_utils import get_logger
|
2026-01-17 21:49:22 +13:00
|
|
|
from pathlib import Path
|
|
|
|
|
|
2026-01-18 23:01:03 +13:00
|
|
|
logger = get_logger(__name__)
|
2026-01-17 21:49:22 +13:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConfigManager:
|
|
|
|
|
"""Manages application settings with JSON persistence"""
|
|
|
|
|
|
|
|
|
|
def __init__(self, file_path="settings.json"):
|
|
|
|
|
self.file_path = Path(file_path)
|
|
|
|
|
self.settings = {
|
|
|
|
|
"api_key": "",
|
|
|
|
|
"default_directory": "",
|
|
|
|
|
"duration": 40,
|
|
|
|
|
"cleaning_patterns": [
|
|
|
|
|
r"\(\d{4}\)",
|
|
|
|
|
r"\[\d{4}\]",
|
|
|
|
|
r"\.\d{4}\.",
|
|
|
|
|
r"\.(19|20)\d{2}",
|
|
|
|
|
r"\.[a-z]{2,3}\b",
|
|
|
|
|
r"\.(?:720p|1080p|2160p|480p|HDRip|BRRip|BluRay|WEBRip|WEB-DL)",
|
|
|
|
|
r"\.(?:x264|x265|HEVC|AAC|AC3|DTS)"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
self.load_settings()
|
|
|
|
|
|
|
|
|
|
def load_settings(self):
|
|
|
|
|
"""Load settings from disk"""
|
|
|
|
|
if self.file_path.exists():
|
|
|
|
|
try:
|
|
|
|
|
with open(self.file_path, "r") as f:
|
|
|
|
|
self.settings.update(json.load(f))
|
2026-01-18 23:01:03 +13:00
|
|
|
logger.info("Settings loaded successfully")
|
2026-01-17 21:49:22 +13:00
|
|
|
except Exception as e:
|
2026-01-18 23:01:03 +13:00
|
|
|
logger.error(f"Error loading settings: {e}")
|
2026-01-17 21:49:22 +13:00
|
|
|
|
|
|
|
|
def save_settings(self):
|
|
|
|
|
"""Save settings to disk"""
|
|
|
|
|
try:
|
|
|
|
|
with open(self.file_path, "w") as f:
|
|
|
|
|
json.dump(self.settings, f, indent=2)
|
2026-01-18 23:01:03 +13:00
|
|
|
logger.info("Settings saved successfully")
|
2026-01-17 21:49:22 +13:00
|
|
|
except Exception as e:
|
2026-01-18 23:01:03 +13:00
|
|
|
logger.error(f"Error saving settings: {e}")
|
2026-01-17 21:49:22 +13:00
|
|
|
|
|
|
|
|
def get(self, key, default=None):
|
|
|
|
|
"""Get a setting value"""
|
|
|
|
|
return self.settings.get(key, default)
|
|
|
|
|
|
|
|
|
|
def set(self, key, value):
|
|
|
|
|
"""Set a setting value"""
|
|
|
|
|
self.settings[key] = value
|
2026-01-18 23:01:03 +13:00
|
|
|
logger.info(f"Setting updated: {key}")
|
2026-01-17 21:49:22 +13:00
|
|
|
|
|
|
|
|
def get_all(self):
|
|
|
|
|
"""Get all settings"""
|
|
|
|
|
return self.settings.copy()
|
|
|
|
|
|
|
|
|
|
def update_multiple(self, updates):
|
|
|
|
|
"""Update multiple settings at once"""
|
|
|
|
|
self.settings.update(updates)
|
2026-01-18 23:01:03 +13:00
|
|
|
logger.info(f"Updated {len(updates)} settings")
|