fix settings dev

This commit is contained in:
cheykrym 2026-04-01 02:22:17 +03:00
parent 28a795558e
commit 2fdb506044
3 changed files with 35 additions and 104 deletions

View File

@ -13,7 +13,7 @@ DEFAULT_SOUND_VOLUME = 100
DEFAULT_PREMUTE_VOLUME = 10 DEFAULT_PREMUTE_VOLUME = 10
DEFAULT_DUCKING_VOLUME = 35 DEFAULT_DUCKING_VOLUME = 35
DEV_MODE_ENABLE = (Path(__file__).resolve().parent / "dev_mode_enable").exists() DEV_MODE_ENABLE = (Path(__file__).resolve().parent / "dev_mode_enable").exists()
BLUETOOTH_MAX_PAIRED_DEVICES = 5 BLUETOOTH_MAX_PAIRED_DEVICES = 4
def get_device_model() -> str: def get_device_model() -> str:

View File

@ -111,97 +111,11 @@ def _build_sound_toggles() -> QWidget:
return container return container
def _build_mock_devices_toggle() -> QWidget:
settings = QSettings("car_ui", "ui")
container = QWidget()
layout = QVBoxLayout(container)
layout.setContentsMargins(12, 6, 12, 6)
layout.setSpacing(8)
layout.addWidget(
_toggle_row(
"Mock Bluetooth устройства",
settings,
"debug/mock_devices",
False,
flag_path=_mock_devices_flag_path(),
)
)
return container
def _build_persist_toggle() -> QWidget:
row = QWidget()
layout = QHBoxLayout(row)
layout.setContentsMargins(12, 6, 12, 6)
layout.setSpacing(12)
lbl = QLabel("Показывать после перезагрузки")
lbl.setFont(QFont("", 14, 600))
btn = QPushButton("Выкл")
btn.setObjectName("SoundToggle")
btn.setCheckable(True)
btn.setChecked(_dev_flag_path().exists())
btn.setMinimumHeight(40)
btn.setMinimumWidth(110)
btn.setFont(QFont("", 12, 700))
def _sync_text(is_checked: bool):
btn.setText("Вкл" if is_checked else "Выкл")
def _persist_flag(is_checked: bool):
flag_path = _dev_flag_path()
if is_checked:
flag_path.touch(exist_ok=True)
else:
if flag_path.exists():
flag_path.unlink()
btn.toggled.connect(_sync_text)
btn.toggled.connect(_persist_flag)
_sync_text(btn.isChecked())
layout.addWidget(lbl)
layout.addStretch(1)
layout.addWidget(btn)
return row
def _build_sound_toggles() -> QWidget:
settings = QSettings("car_ui", "ui")
container = QWidget()
layout = QVBoxLayout(container)
layout.setContentsMargins(12, 6, 12, 6)
layout.setSpacing(8)
layout.addWidget(
_toggle_row(
"Премут",
settings,
"sound/premute_enabled",
False,
)
)
layout.addWidget(
_toggle_row(
"Ducking",
settings,
"sound/ducking_enabled",
False,
)
)
return container
def _toggle_row( def _toggle_row(
label: str, label: str,
settings: QSettings, settings: QSettings,
key: str, key: str,
default: bool, default: bool,
flag_path: Path | None = None,
) -> QWidget: ) -> QWidget:
row = QWidget() row = QWidget()
layout = QHBoxLayout(row) layout = QHBoxLayout(row)
@ -214,10 +128,7 @@ def _toggle_row(
btn = QPushButton("Выкл") btn = QPushButton("Выкл")
btn.setObjectName("SoundToggle") btn.setObjectName("SoundToggle")
btn.setCheckable(True) btn.setCheckable(True)
if flag_path: btn.setChecked(_read_bool_setting(settings, key, default))
btn.setChecked(flag_path.exists())
else:
btn.setChecked(_read_bool_setting(settings, key, default))
btn.setMinimumHeight(40) btn.setMinimumHeight(40)
btn.setMinimumWidth(110) btn.setMinimumWidth(110)
btn.setFont(QFont("", 12, 700)) btn.setFont(QFont("", 12, 700))
@ -226,14 +137,7 @@ def _toggle_row(
btn.setText("Вкл" if is_checked else "Выкл") btn.setText("Вкл" if is_checked else "Выкл")
def _persist_flag(is_checked: bool): def _persist_flag(is_checked: bool):
if flag_path: settings.setValue(key, is_checked)
if is_checked:
flag_path.touch(exist_ok=True)
else:
if flag_path.exists():
flag_path.unlink()
else:
settings.setValue(key, is_checked)
btn.toggled.connect(_sync_text) btn.toggled.connect(_sync_text)
btn.toggled.connect(_persist_flag) btn.toggled.connect(_persist_flag)
@ -261,8 +165,23 @@ def _dev_flag_path() -> Path:
return Path(build_info.__file__).resolve().parent / "dev_mode_enable" return Path(build_info.__file__).resolve().parent / "dev_mode_enable"
def _mock_devices_flag_path() -> Path: def _build_mock_devices_toggle() -> QWidget:
return Path(build_info.__file__).resolve().parent / "mock_devices_enable" settings = QSettings("car_ui", "ui")
container = QWidget()
layout = QVBoxLayout(container)
layout.setContentsMargins(12, 6, 12, 6)
layout.setSpacing(8)
layout.addWidget(
_toggle_row(
"Mock Bluetooth устройства (debug)",
settings,
"debug/mock_devices",
False,
)
)
return container
def _confirm_exit(on_exit): def _confirm_exit(on_exit):

View File

@ -7,15 +7,27 @@ from dataclasses import dataclass
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from PySide6.QtCore import QObject, Signal from PySide6.QtCore import QObject, Signal, QSettings
import build_info import build_info
def _is_mock_devices_enabled() -> bool: def _is_mock_devices_enabled() -> bool:
"""Проверить, включён ли режим мок-устройств.""" """Проверить, включён ли режим мок-устройств."""
flag_path = Path(build_info.__file__).resolve().parent / "mock_devices_enable" settings = QSettings("car_ui", "ui")
return flag_path.exists() return _read_bool_setting(settings, "debug/mock_devices", False)
def _read_bool_setting(settings: QSettings, key: str, default: bool) -> bool:
raw = settings.value(key, default)
if isinstance(raw, bool):
return raw
if isinstance(raw, str):
return raw.strip().lower() in ("1", "true", "yes", "on")
try:
return bool(int(raw))
except (TypeError, ValueError):
return default
@dataclass @dataclass