Изменено:
- сервис автоматически применяет обновлённые настройки без перезапуска
- графический интерфейс сразу отображает выбранный режим
- настройки сохраняются без риска повреждения при фоновом чтении
Исправлено:
- чрезмерная загрузка процессора при ожидании команд интерфейса
- обработка команд после периода бездействия
- использование пользовательского пути к конфигурации
Добавлено:
- передача состояния устройств и команд управления между сервисом и графическим интерфейсом
- автоматическое восстановление связи интерфейса с сервисом
Изменено:
- графический интерфейс использует единый запущенный сервис вместо собственного опроса устройств
Исправлено:
- одновременный опрос устройств сервисом и графическим интерфейсом
Удалено:
- отдельный фоновый опрос устройств в графическом интерфейсе
Под нагрузкой (игра) interrupt endpoint донгла переполняется
(input irq status -75), и одиночный запрос батареи может не ответить.
Раньше это сразу считалось отключением наушников и дёргало sink
на стерео. Теперь отключение признаётся после MAX_MISSED_POLLS=3
подряд неудачных опросов; единичные таймауты сохраняют состояние.
- resizeEvent больше не мутирует grid layout синхронно: перестройка
откладывается на следующий проход цикла событий с защитой от дублей
- Убраны inline setStyleSheet из set_battery; прозрачный фон бейджа
батареи перенесён в QSS (обе темы)
- Виджеты перед deleteLater скрываются и отвязываются от родителя,
чтобы repaint и опрос батареи не трогали умирающие виджеты
- Заодно: менеджер HRIR теперь сохраняет конфиг и применяет активный
HRIR после закрытия (раньше изменения терялись)
- Регрессионный тест на повторные rebuild + resize
- razer_protocol.py: приоритет openrazer Python API (DKMS+daemon), fallback на raw USB
- setup-razer.sh: одна команда для полной настройки Razer на любом дистре
- определяет пакетный менеджер (dnf/apt/pacman/zypper)
- ставит kernel-devel + dkms + gcc
- собирает и устанавливает DKMS-модуль openrazer
- загружает razermouse, настраивает автозагрузку
- устанавливает openrazer Python библиотеку
- lgcompanion diagnose для Razer мышей отправляет 6 команд и выводит ответы
- Тестирует: заряд, зарядка, частота, DPI, режим, серийник
- Показывает raw hex и статус каждой команды
- battery_icon.py: draw_battery_icon/percent, draw_battery_badge
- Иконка с заливкой пропорционально заряду, цвет зависит от уровня
- Карточка и страница устройства используют pixmap-иконку
- Зелёный/жёлтый/красный бейдж заряда на карточке в списке
- Заряд на странице устройства рядом со статусом
- Привязка заряда к конкретному устройству по имени профиля
- Статус-бар: 'устройство подключено' вместо 'наушники'
- Убраны razer, steelseries, logitech, corsair, sennheiser, sony, jbl, hyperx
из _HEADSET_KEYWORDS — бренд не означает тип
- Добавлены конкретные модели гарнитур (Arctis, Virtuoso, Void, Astro A50 и т.д.)
- Добавлены конкретные модели мышей (Naga, DeathAdder, Basilisk, Viper и т.д.)
- Razer Naga Pro V2 теперь корректно определяется как мышь
- Дедупликация по (VID, PID, интерфейс) — каждый dongle показывается один раз
- Уже добавленные устройства отмечены серым текстом и недоступны для выбора
- Config передаётся в DeviceDetectorDialog для проверки
- Sidebar: "Headset Companion" → "LG Companion"
- Заголовок "Мои устройства" заменён на фильтры: Все / Гарнитуры / Мыши
- Добавлено поле device_type (headset/mouse) в DeviceProfile
- Известные мыши SteelSeries: Rival 3, Rival 650, Aerox 3/5/9, Prime Wireless
- Автообнаружение мышей по HID-ключевым словам (detect_mouse_candidates)
- Редактор профиля: выбор типа устройства (гарнитура/мышь)
- Диалог автообнаружения: тип устройства отображается в списке
- Для мышей скрыты настройки HRIR и режима surround/stereo
- QSS-стили для кнопок фильтров в обеих темах
- HID-чтение ChatMix (0x06 0x24) для Arctis 7 2019 — get_chatmix_level()
- pactl-функции get_sink_volume() / set_sink_volume()
- Поля game и chat в SinkConfig для имён PipeWire сингов каналов
- CLI: lgcompanion volume get/set game|chat, lgcompanion chatmix
- GUI: слайдеры громкости каналов на странице устройства
- QSS-стили для QSlider в обеих темах (светлая/тёмная)
- Диагностика ChatMix в lgcompanion diagnose
- Сигнал chatmix_changed в EngineWorker для GUI
- 8 новых тестов (ChatMix, volume pactl, config roundtrip)
- Переименован Python-пакет: headset_companion → lgcompanion
- Переименованы исполняемые файлы: headset-companion → lgcompanion, headset-companion-gui → lgcompanion-gui
- Переименованы сервис, desktop-файл, иконка, каталог конфигурации
- Обновлены все импорты, docstrings и пользовательские строки
- Обновлено описание в README.md и AGENTS.md: программа теперь позиционируется как универсальный компаньон для USB-гарнитур, из коробки поддерживаются SteelSeries Arctis
- Убраны привязки к Arctis 7 в defaults/placeholders GUI и CLI
- Обновлены ссылки репозитория на git.linux-gaming.ru
- боковая панель навигации с разделами Устройства и Настройки
- карточки устройств в списке с бейджами статуса и режима
- детальная страница устройства с настройками режима и HRIR
- адаптивная раскладка режима и HRIR при изменении ширины окна
- автообнаружение известных гарнитур по VID, PID и USB-интерфейсу
- база известных устройств на основе HeadsetControl
- автосохранение общих и звуковых настроек без кнопок Сохранить/Отмена
- защита от пустых имён звуковых выходов в конфиге
- таймаут для команд pactl и обработка зависаний PipeWire
- кэширование списка звуковых выходов в настройках
- тесты для GUI, стилей и автообнаружения устройств
Изменено:
- дизайн интерфейса на плоские цвета без градиентов
- переключатель режима в трее теперь сохраняется в активное устройство
- цвет бейджа состояния устройства на зелёный/красный
- названия полей звуковых выходов и подсказки к ним
- ширина боковой панели для корректного отображения русских названий
Удалено:
- inline-стили из виджетов, все стили перенесены в styles.py
- группа настроек устройства с кнопками сохранения и отмены
- серый текст статуса в карточках устройств
- человекочитаемые имена PipeWire sinks в выпадающих списках настроек
Изменено:
- отмена в диалоге автообнаружения устройства больше не открывает форму ручного добавления
- ручное добавление открывается только по соответствующей кнопке
- автообнаружение подключённых наушников через hidraw
- диалог выбора устройства из системы при добавлении профиля
- фильтрация устройств по ключевым словам (headset, headphone, наушники и т.д.)
Изменено:
- профиль Arctis 7 2019 убран из конфига по умолчанию
- кнопка 'Добавить' теперь открывает автообнаружение, ручное добавление доступно отдельной кнопкой
- обновлена документация README и AGENTS
- интерфейс управления HRIR-профилями в CLI и GUI
- диалог управления HRIR: добавление, удаление, выбор активного профиля
- выбор HRIR для каждого профиля устройства
- копирование добавляемых HRIR в директорию приложения
Изменено:
- структура конфига hrir: список профилей и активный файл
- установщик использует активный HRIR из конфига
- документация README и AGENTS по работе с HRIR
- SVG-иконка приложения с изображением surround-раскладки 7.1
- настройка выбора темы интерфейса в окне настроек
- автоматическое применение иконки для окна, панели задач и .desktop файла
Изменено:
- стили GUI теперь поддерживают светлую и тёмную темы
- установщик копирует иконку в системную тему иконок
- автоматическое переключение между светлой и тёмной темой в интерфейсе
- светлая цветовая схема для главного окна и диалога профиля
Изменено:
- стили элементов управления для лучшей читаемости в светлой теме
- цвета заголовков, полей ввода и списка устройств в светлом режиме
- Добавлены pytest-тесты для конфигурации, HID, PipeWire и движка
- Обновлён install.sh: поддержка PREFIX/DESTDIR и системной установки
- Обновлён pyproject.toml: автор, классификаторы Python, dev-зависимости и правила сборки
- Унифицирована версия приложения через __version__ в GUI
- Обновлена документация README и AGENTS.md
Added:
- Automatic surround/stereo switching based on headset wireless state
- Command-line interface for diagnosis, configuration and service management
- System tray GUI for manual mode switching and device profile editing
- PipeWire virtual 7.1 surround configuration with bundled audio profile
- Install script, application menu entry and default configuration