Files
vpn/LINUX_IMPLEMENTATION_LOG.md
2026-04-20 01:34:03 +03:00

65 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Linux Implementation Log
Этот файл веду параллельно с реализацией Linux backend.
## Stage 1 - Подготовка backend-слоя
Status: done
- Добавлен runtime для `sing-box`: `lib/services/singbox_runtime.dart`.
- Реализовано извлечение бинарника из assets в `ApplicationSupport`.
- Добавлен `chmod 755` после копирования бинарника.
## Stage 2 - Запуск и lifecycle процесса
Status: done
- Добавлен `SingBoxService`: `lib/services/singbox_service.dart`.
- Реализован запуск через `pkexec <binary> run -c <config>`.
- Добавлены stop/dispose и стрим логов процесса.
## Stage 3 - Интеграция с приложением
Status: done
- `VpnService` переключается на Linux backend на `TargetPlatform.linux`.
- На Linux `start` ожидает JSON-конфиг `sing-box`.
- На Linux отключен запрос VPN permission через `v2ray_box`.
- Добавлен fallback-парсинг имени профиля из JSON (`outbounds[*].tag`).
## Stage 4 - UI и совместимость
Status: done
- Обновлен `ConfigInfoView`: ping проверка помечается как недоступная для Linux backend.
- Добавлено явное сообщение при старте с не-JSON конфигом на Linux.
## Stage 5 - Сборка и smoke-тесты
Status: in_progress
- Выполнен `flutter pub get`.
- Прогнан `flutter analyze` (без ошибок).
- После установки AppIndicator-зависимостей сборка восстановлена.
- Добавлен CMake-флаг `-Wno-error=deprecated-declarations` в `linux/CMakeLists.txt`,
чтобы deprecated warning из `tray_manager` не валил сборку plugin-кода.
- `flutter build linux --debug` проходит успешно.
- Остался ручной runtime smoke-тест через `flutter run -d linux`:
- start/stop VPN;
- close -> hide to tray;
- quit из tray с корректным stop.
## Stage 6 - Desktop UX (tray/hide-to-tray)
Status: done
- Добавлены зависимости `window_manager` и `tray_manager` в `pubspec.yaml`.
- Реализован `TrayService`: `lib/services/tray_service.dart`.
- В `main.dart` добавлены Linux lifecycle-сценарии:
- `setPreventClose(true)` и перехват close-события;
- hide-on-close в трей;
- действия меню трея `show`, `hide`, `quit`;
- при `quit` выполняется остановка VPN перед выходом.
- Исправлен `MissingPluginException` для `setToolTip` на Linux:
- добавлен безопасный `try/catch` в `TrayService.init()`.