Astro-Session-Watcher/services/config_service.py
2026-05-07 17:15:56 +03:00

161 lines
No EOL
5.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
ConfigService - управление настройками приложения
"""
import json
import os
from typing import List, Optional
from dataclasses import dataclass, asdict
@dataclass
class AppConfig:
"""Конфигурация приложения"""
cameras: List[str]
lenses: List[str]
celestial_bodies: List[str]
last_watch_folder: str
last_camera: str
last_lens: str
class ConfigService:
"""Сервис для работы с конфигурацией"""
SETTINGS_FILE = "astro_settings.json"
CELESTIAL_BODIES_FILE = "celestial_bodies.json"
def __init__(self):
self.config = AppConfig(
cameras=[],
lenses=[],
celestial_bodies=[],
last_watch_folder="",
last_camera="",
last_lens=""
)
self.load_all()
def load_all(self):
"""Загружает все настройки"""
self._load_settings()
self._load_celestial_bodies()
if not self.config.celestial_bodies:
self.config.celestial_bodies = [
"M31 (Andromeda Galaxy)",
"M42 (Orion Nebula)",
"M45 (Pleiades)",
"M57 (Ring Nebula)",
"Sun",
"Moon",
"Jupiter",
"Saturn"
]
self._save_celestial_bodies()
def _load_settings(self):
if os.path.exists(self.SETTINGS_FILE):
try:
with open(self.SETTINGS_FILE, 'r', encoding='utf-8') as f:
data = json.load(f)
self.config.cameras = data.get('cameras', [])
self.config.lenses = data.get('lenses', [])
self.config.last_watch_folder = data.get('last_watch_folder', '')
self.config.last_camera = data.get('last_camera', '')
self.config.last_lens = data.get('last_lens', '')
except Exception as e:
print(f"Ошибка загрузки настроек: {e}")
def save_settings(self):
try:
with open(self.SETTINGS_FILE, 'w', encoding='utf-8') as f:
json.dump({
'cameras': self.config.cameras,
'lenses': self.config.lenses,
'last_watch_folder': self.config.last_watch_folder,
'last_camera': self.config.last_camera,
'last_lens': self.config.last_lens
}, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"Ошибка сохранения настроек: {e}")
def _load_celestial_bodies(self):
if os.path.exists(self.CELESTIAL_BODIES_FILE):
try:
with open(self.CELESTIAL_BODIES_FILE, 'r', encoding='utf-8') as f:
self.config.celestial_bodies = json.load(f)
except Exception as e:
print(f"Ошибка загрузки небесных тел: {e}")
def _save_celestial_bodies(self):
try:
with open(self.CELESTIAL_BODIES_FILE, 'w', encoding='utf-8') as f:
json.dump(self.config.celestial_bodies, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"Ошибка сохранения небесных тел: {e}")
def get_cameras(self) -> List[str]:
return self.config.cameras.copy()
def add_camera(self, camera: str):
if camera and camera not in self.config.cameras:
self.config.cameras.append(camera)
self.save_settings()
def remove_camera(self, camera: str):
if camera in self.config.cameras:
self.config.cameras.remove(camera)
self.save_settings()
def get_lenses(self) -> List[str]:
return self.config.lenses.copy()
def add_lens(self, lens: str):
if lens and lens not in self.config.lenses:
self.config.lenses.append(lens)
self.save_settings()
def remove_lens(self, lens: str):
if lens in self.config.lenses:
self.config.lenses.remove(lens)
self.save_settings()
def get_celestial_bodies(self) -> List[str]:
return self.config.celestial_bodies.copy()
def add_celestial_body(self, name: str):
if name and name not in self.config.celestial_bodies:
self.config.celestial_bodies.append(name)
self._save_celestial_bodies()
def remove_celestial_body(self, name: str):
if name in self.config.celestial_bodies:
self.config.celestial_bodies.remove(name)
self._save_celestial_bodies()
def update_celestial_body(self, old_name: str, new_name: str):
if old_name in self.config.celestial_bodies:
idx = self.config.celestial_bodies.index(old_name)
self.config.celestial_bodies[idx] = new_name
self._save_celestial_bodies()
def get_last_watch_folder(self) -> str:
return self.config.last_watch_folder
def set_last_watch_folder(self, folder: str):
self.config.last_watch_folder = folder
self.save_settings()
def get_last_camera(self) -> str:
return self.config.last_camera
def set_last_camera(self, camera: str):
self.config.last_camera = camera
self.save_settings()
def get_last_lens(self) -> str:
return self.config.last_lens
def set_last_lens(self, lens: str):
self.config.last_lens = lens
self.save_settings()