194 lines
No EOL
7.5 KiB
Python
194 lines
No EOL
7.5 KiB
Python
"""
|
||
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() |