65 lines
2.8 KiB
Markdown
65 lines
2.8 KiB
Markdown
# 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()`.
|