Astro-Session-Watcher/services/config_service.py

194 lines
No EOL
7.5 KiB
Python
Raw Permalink 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
class ConfigService:
"""Сервис для работы с конфигурацией"""
SETTINGS_FILE = "astro_settings.json"
CELESTIAL_BODIES_FILE = "celestial_bodies.json"
def __init__(self):
self.config = {
'cameras': [],
'lenses': [],
'telescopes': [],
'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['telescopes'] = data.get('telescopes', [])
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'],
'telescopes': self.config['telescopes'],
'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 update_lens(self, old_name: str, new_name: str):
if old_name in self.config['lenses']:
idx = self.config['lenses'].index(old_name)
self.config['lenses'][idx] = new_name
self.save_settings()
# ===== Методы для работы с телескопами =====
def get_telescopes(self) -> List[str]:
return self.config.get('telescopes', []).copy()
def add_telescope(self, telescope: str):
if 'telescopes' not in self.config:
self.config['telescopes'] = []
if telescope and telescope not in self.config['telescopes']:
self.config['telescopes'].append(telescope)
self.save_settings()
def remove_telescope(self, telescope: str):
if 'telescopes' in self.config and telescope in self.config['telescopes']:
self.config['telescopes'].remove(telescope)
self.save_settings()
def update_telescope(self, old_name: str, new_name: str):
if 'telescopes' in self.config and old_name in self.config['telescopes']:
idx = self.config['telescopes'].index(old_name)
self.config['telescopes'][idx] = new_name
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.get('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.get('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.get('last_lens', '')
def set_last_lens(self, lens: str):
self.config['last_lens'] = lens
self.save_settings()