From 22c0f4b0cc6727047418443cf63598e8c3698a34 Mon Sep 17 00:00:00 2001 From: cheykrym Date: Tue, 31 Mar 2026 23:31:26 +0300 Subject: [PATCH] auto search --- screens/setting/bluetooth_screen.py | 22 ++++++++++++++++++++-- services/bluetooth_service.py | 7 +++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/screens/setting/bluetooth_screen.py b/screens/setting/bluetooth_screen.py index 00a65c7..6a67040 100644 --- a/screens/setting/bluetooth_screen.py +++ b/screens/setting/bluetooth_screen.py @@ -1,6 +1,6 @@ from __future__ import annotations -from PySide6.QtCore import Qt, QTimer, QSettings +from PySide6.QtCore import Qt, QTimer, QSettings, QEvent from PySide6.QtGui import QFont from PySide6.QtWidgets import ( QWidget, @@ -23,6 +23,8 @@ class BluetoothScreen(QWidget): self._on_back = on_back self._settings = QSettings("car_ui", "ui") self._bt_service = BluetoothService(self) + self._discoverable_timer = QTimer(self) + self._discoverable_timer.timeout.connect(self._refresh_discoverable) root = QVBoxLayout(self) root.setContentsMargins(0, 0, 0, 0) @@ -127,7 +129,13 @@ class BluetoothScreen(QWidget): elif not success: self.status.setText(f"Статус: ошибка ({self._bt_service.last_error})") else: - self.status.setText("Статус: видим для сопряжения") + self.status.setText("Статус: видим для сопряжения (10 сек)") + # Запускаем таймер продления видимости + self._discoverable_timer.start(9000) # 9 секунд + + def _refresh_discoverable(self): + """Продлить режим сопряжения.""" + self._bt_service.make_discoverable() def _connect_selected(self): """Подключить выбранное устройство.""" @@ -163,3 +171,13 @@ class BluetoothScreen(QWidget): """Обновить текстовый статус.""" mac = self._selected_mac() self.status.setText(self._bt_service.get_status_text(mac)) + + def showEvent(self, event): + """Экран показан — запускаем таймер, если видимость активна.""" + super().showEvent(event) + # Можно запустить таймер, если нужно авто-продление при показе экрана + + def hideEvent(self, event): + """Экран скрыт — останавливаем таймер.""" + super().hideEvent(event) + self._discoverable_timer.stop() diff --git a/services/bluetooth_service.py b/services/bluetooth_service.py index e6799a2..9a5a4b8 100644 --- a/services/bluetooth_service.py +++ b/services/bluetooth_service.py @@ -81,9 +81,12 @@ class BluetoothService(QObject): self.connected_changed.emit(mac, False) return success - def make_discoverable(self) -> bool: + def make_discoverable(self, timeout_sec: int = 10) -> bool: """Сделать устройство видимым для сопряжения. + Args: + timeout_sec: Время видимости в секундах (по умолчанию 10). + Возвращает False, если достигнуто максимальное количество сопряженных устройств. """ # Проверка лимита сопряженных устройств @@ -96,7 +99,7 @@ class BluetoothService(QObject): script_out = self._run_btctl_script( [ "power on", - "discoverable-timeout 0", + f"discoverable-timeout {timeout_sec}", "discoverable on", "pairable on", "agent NoInputNoOutput",