make_icon() грузит PNG из icons/ по состоянию (серый/жёлтый/зелёный — цвета
прежние) и кэширует. Если файла нет или он битый — прежняя отрисовка кружка.
В .gitignore исключение для icons/*.png, иначе иконки не попадали в репозиторий
под общим правилом *.png.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
launch_vpn.bat — запуск без окна консоли (pythonw из .venv, PATH или pyw -3).
vpn_tray_task.xml — задача с наивысшими правами, чтобы ensure_admin() не дёргал
UAC при каждом входе в систему.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- чтение vpn_config.json через utf-8-sig (BOM от PowerShell/блокнота ломал json.load)
- автоперебор адаптеров: быстрый фатал на dev_node -> повтор через dev_node_fallback с --disable-dco
- вместо молчаливого отката на DEFAULT_CONFIG (старый сервер ano) - диалоговое окно с ошибкой
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Актуализировал под конфиг vpn_config.json: убрал шаг правки username
в коде, добавил установку зависимостей, создание конфига и описание
состояний индикатора в трее.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>