working logic+working watching files+added calibration feature+instructions

This commit is contained in:
Vic Sergeev 2026-05-07 21:13:00 +03:00
parent 09d181eba8
commit 97ed8217bf
25 changed files with 1743 additions and 192 deletions

View file

@ -4,18 +4,6 @@ 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:
@ -25,14 +13,15 @@ class ConfigService:
CELESTIAL_BODIES_FILE = "celestial_bodies.json"
def __init__(self):
self.config = AppConfig(
cameras=[],
lenses=[],
celestial_bodies=[],
last_watch_folder="",
last_camera="",
last_lens=""
)
self.config = {
'cameras': [],
'lenses': [],
'telescopes': [],
'celestial_bodies': [],
'last_watch_folder': '',
'last_camera': '',
'last_lens': ''
}
self.load_all()
def load_all(self):
@ -40,8 +29,9 @@ class ConfigService:
self._load_settings()
self._load_celestial_bodies()
if not self.config.celestial_bodies:
self.config.celestial_bodies = [
# Если список небесных тел пуст - добавляем стандартные
if not self.config['celestial_bodies']:
self.config['celestial_bodies'] = [
"M31 (Andromeda Galaxy)",
"M42 (Orion Nebula)",
"M45 (Pleiades)",
@ -54,108 +44,151 @@ class ConfigService:
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', '')
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,
'last_watch_folder': self.config.last_watch_folder,
'last_camera': self.config.last_camera,
'last_lens': self.config.last_lens
'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)
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)
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()
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)
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)
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()
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)
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)
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()
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)
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)
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
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
return self.config.get('last_watch_folder', '')
def set_last_watch_folder(self, folder: str):
self.config.last_watch_folder = folder
self.config['last_watch_folder'] = folder
self.save_settings()
def get_last_camera(self) -> str:
return self.config.last_camera
return self.config.get('last_camera', '')
def set_last_camera(self, camera: str):
self.config.last_camera = camera
self.config['last_camera'] = camera
self.save_settings()
def get_last_lens(self) -> str:
return self.config.last_lens
return self.config.get('last_lens', '')
def set_last_lens(self, lens: str):
self.config.last_lens = lens
self.config['last_lens'] = lens
self.save_settings()