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())