L×Box v2.15.10
Настройка «Suspend active-route tunnels» теперь сохраняется. По репорту с
форума: выбранное значение «откатывалось» к «5 minutes» при повторном входе на
экран, а другие значения не запоминались вовсе. Причина — настройка зависит от
соседней «Suspend idle tunnels», и при выключенной базовой выбор молча
игнорировался, хотя выпадающий список выглядел рабочим. Теперь зависимость
видна явно: при выключенной базовой настройке список неактивен (серый), в
подсказке написано условие; при включённой — любое значение сохраняется.
Ядро не менялось (пин v1.14.0-lx.8-rc.1, как в v2.15.9) — релиз целиком
клиентский.
Quick links:
🆕 Что нового ·
🔧 Под капотом ·
📲 Install
🆕 Что нового
-
§277 — «Suspend active-route tunnels» больше не теряет выбор.
VPN Settings → System → WireGuard connections.«Suspend idle tunnels» = Off «Suspend idle tunnels» включён Было второй список выглядит рабочим, выбор молча отбрасывается, после перезахода снова «5 minutes» сохраняется Стало второй список честно неактивен (серый), в описании указано условие сохраняется (без изменений) Выбранное значение переживает выключение базовой настройки: включил обратно —
прежний выбор снова действует. -
§278 — экран папки при внешнем удалении папки. Если папку удаляли извне
при открытом её экране (Debug APIDELETE /folders/{id}или
DELETE /subs/{id}, restore из backup), экран продолжал выглядеть рабочим,
но все действия — тоггл, тап, reorder, добавление серверов, переименование —
молча ничего не делали. Теперь экран закрывается сам, как при удалении
через собственную кнопку Delete. -
Пикер приложений: «Export to clipboard» во время загрузки списка. Пункт
меню был активен, но нажатие молча игнорировалось, пока грузится список
приложений. Экспорт зависит только от текущего выбора — теперь работает и
во время загрузки.
🔧 Под капотом
Оба бага — один анти-паттерн: «немой гейт», ранний return внутри обработчика
контрола по состоянию, которое юзеру не видно. Контрол выглядит активным
(Flutter считает контрол с непустым обработчиком рабочим и показывает выбор),
а запись молча не происходит.
- §277: зависимость перенесена из тела
onChangedв само его наличие —
каноническое disabled-состояние (onChanged: null+ серые рамка и контент). - §278: у экрана папки гейт был размазан по ~15 обработчикам
(if (_index < 0) return). Вместо точечных фиксов — один механизм: экран
слушает контроллер и закрывается при исчезновении своего entry (если поверх
открыт диалог или шит — снимается именно свой роут). Защёлка от двойного
закрытия сбрасывается при ошибке записи, иначе экран оставался бы «зомби»
навсегда; обработчики шитов получили mounted-гарды. - Фиксы прошли адверсарное ревью (7 независимых проверок против исходников
Flutter SDK, три находки исправлены до коммита) и полный сьют —
1904 теста, analyze чистый. Свип кодовой базы на тот же паттерн: прочие
ранние return в обработчиках — no-op-гейты и защита с видимым фидбэком,
новых немых гейтов не найдено.
📲 Install
adb install -r LxBox-v2.15.10-arm64-v8a.apkБез uninstall! Поверх существующей установки. Настройки и подписки сохранятся.
Предыдущий релиз: v2.15.9.