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

2.8 KiB
Raw Permalink Blame History

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().