car_ui/app.py
2026-01-09 04:32:08 +03:00

76 lines
2.5 KiB
Python

import sys
from pathlib import Path
from PySide6.QtCore import QSettings
from PySide6.QtWidgets import QApplication
import build_info
from audio.system_volume import set_volume
from themes import THEME_DAY, THEME_NIGHT
from ui.language_dialog import LanguageDialog
from ui.main_window_new import MainWindowNew
def run_app():
app = QApplication(sys.argv)
_apply_reset_if_requested()
_ensure_language_selected(app)
_apply_startup_sound_defaults()
_apply_startup_display_defaults()
window = MainWindowNew(app)
window.show()
sys.exit(app.exec())
def _apply_startup_sound_defaults():
settings = QSettings("car_ui", "ui")
base_volume = build_info.DEFAULT_SOUND_VOLUME
premute_volume = build_info.DEFAULT_PREMUTE_VOLUME
ducking_volume = build_info.DEFAULT_DUCKING_VOLUME
if not settings.contains("sound/base_volume"):
settings.setValue("sound/base_volume", base_volume)
if not settings.contains("sound/premute_volume"):
settings.setValue("sound/premute_volume", premute_volume)
if not settings.contains("sound/ducking_volume"):
settings.setValue("sound/ducking_volume", ducking_volume)
applied_volume = settings.value("sound/base_volume", base_volume)
try:
applied_volume = int(applied_volume)
except (TypeError, ValueError):
applied_volume = base_volume
set_volume(applied_volume)
def _apply_startup_display_defaults():
settings = QSettings("car_ui", "ui")
if not settings.contains("display/brightness"):
settings.setValue("display/brightness", 70)
if not settings.contains("display/auto_brightness"):
settings.setValue("display/auto_brightness", False)
if not settings.contains("display/theme"):
settings.setValue("display/theme", "night")
def _apply_reset_if_requested():
reset_marker = Path(__file__).resolve().parent / "reset"
if not reset_marker.exists():
return
settings = QSettings("car_ui", "ui")
settings_path = Path(settings.fileName())
if settings_path.exists():
settings_path.unlink()
reset_marker.unlink()
def _ensure_language_selected(app: QApplication):
settings = QSettings("car_ui", "ui")
if settings.contains("ui/language"):
return
theme_key = settings.value("display/theme", "night")
app.setStyleSheet(THEME_NIGHT if theme_key != "day" else THEME_DAY)
dialog = LanguageDialog()
if dialog.exec() == LanguageDialog.Accepted:
settings.setValue("ui/language", dialog.selected_language())