Skip to content

Системные возможности: Мультиязычность/темы/обновления/автозапуск/HTTP API Server

Вы переключили тему на dark, но интерфейс всё ещё светлый; вы явно закрыли окно, но процесс всё ещё работает в фоне; вы хотите, чтобы внешние инструменты переключали текущую учётную запись, но не хотите открывать обратный прокси в локальную сеть.

В этом уроке фокусируются системные возможности Antigravity Tools: переключение языка и темы интерфейса, проверка и обновление, трей после закрытия окна и автозапуск, а также предоставление HTTP API Server для внешних программ.

Что такое системные возможности?

Системные возможности — это «возможности продукта» Antigravity Tools как десктопного приложения: переключение языка и темы интерфейса, проверка обновлений и обновление, трей после закрытия окна и автозапуск, а также предоставление HTTP API Server, который привязан только к 127.0.0.1 для вызова внешними программами.

Что вы сможете сделать после изучения

  • Переключать язык/тему и понимать, какие из них «вступают в силу немедленно»
  • Понимать разницу между «закрытием окна» и «выходом из программы», а также что может делать меню трея
  • Знать триггерные условия автоматической проверки обновлений, интервал и файл сохранения
  • Включить HTTP API Server и выполнить пробное действие с помощью curl для проверки работоспособности/переключения учётных записей

🎒 Подготовка перед началом

Основная идея

Разделите эти возможности на две категории, будет легче запомнить:

  1. Возможности «приводимые конфигурацией»: язык и тема пишутся в gui_config.json (фронтенд вызывает save_config).
  2. Возможности «с независимым сохранением на диск»: настройки обновлений и HTTP API имеют свои собственные файлы JSON; трей и поведение закрытия окна контролируются на стороне Tauri.

Следуйте за мной

Шаг 1: Переключение языка (немедленное вступление в силу + автоматическое сохранение)

Почему Переключение языка проще всего ошибочно понять как «требует перезапуск». В этой реализации интерфейс переключается немедленно, одновременно записывая language обратно в конфигурацию.

Действия: откройте SettingsGeneral, в выпадающем списке языка выберите язык.

Вы почти одновременно увидите две вещи:

  • Интерфейс немедленно меняется на новый язык (фронтенд напрямую вызывает i18n.changeLanguage(newLang)).
  • Конфигурация сохраняется (фронтенд вызывает updateLanguage(newLang), внутри вызывается save_config).

Откуда берутся языковые пакеты?

Фронтенд инициализирует ресурсы мультиязычности с помощью i18next, и устанавливает fallbackLng: "en". Это означает: если для какого-то ключа нет перевода, будет использован английский.

Шаг 2: Переключение темы (light/dark/system)

Почему Тема влияет не только на CSS, но и на цвет фона окна Tauri, data-theme DaisyUI и класс dark Tailwind.

Действия: в SettingsGeneral переключите тему на light / dark / system.

Вы должны увидеть:

  • Тема немедленно вступает в силу (ThemeManager прочитает конфигурацию и применит к document.documentElement).
  • Когда тема system, изменения системной темной/светлой синхронизируются в приложении в реальном времени (прослушивает prefers-color-scheme).

Исключение Linux

ThemeManager попытается вызвать getCurrentWindow().setBackgroundColor(...) для установки цвета фона окна, но на платформе Linux этот шаг пропускается (в исходном коде есть комментарий: прозрачное окно + softbuffer может привести к сбою).

Шаг 3: Автозапуск (и почему с --minimized)

Почему Автозапуск — это не «поле конфигурации», а элемент регистрации системного уровня (плагин autostart Tauri).

Действия: в SettingsGeneral установите «Автоматический запуск при включении компьютера» в состояние «включено/выключено».

Вы должны увидеть:

  • При переключении сразу вызывается бэкенд toggle_auto_launch(enable).
  • При инициализации страницы вызывается is_auto_launch_enabled(), отображая реальное состояние (не полагается на локальный кеш).

Дополнительно: при инициализации плагина autostart передаётся параметр --minimized, поэтому «запуск при включении компьютера» обычно будет запущен в минимизированном/фоновом режиме (конкретное поведение зависит от того, как фронтенд обрабатывает этот параметр).

Шаг 4: Поймите разницу между «закрытием окна» и «выходом из программы»

Почему Многие десктопные приложения — это «закрытие = выход», но поведение Antigravity Tools по умолчанию — «закрытие = скрыть в трей».

Вы должны знать:

  • После нажатия кнопки закрытия окна Tauri перехватит событие закрытия и hide(), а не завершит процесс.
  • В меню трея есть Show/Quit: чтобы полностью выйти, следует использовать Quit.
  • Текст отображения трея следует за config.language (при создании трея читается конфигурация языка и берётся текст перевода; после обновления конфигурации прослушивается событие config://updated для обновления меню трея).

Шаг 5: Проверка обновлений (автоматический триггер + ручная проверка)

Почему Обновления используют две разные вещи одновременно:

  • Логика пользовательской «проверки версий»: через GitHub Releases получает последнюю версию, оценивает наличие обновлений.
  • Tauri Updater: отвечает за скачивание и установку, затем relaunch().

Вы можете использовать так:

  1. Автоматическая проверка: после запуска приложения вызывается should_check_updates, если требуется проверка, появляется UpdateNotification, и немедленно обновляется last_check_time.
  2. Ручная проверка: на странице Settings нажмите «Проверить обновления» (вызывается check_for_updates, в UI отображается результат).

Откуда берётся интервал обновлений?

Бэкенд сохраняет настройки обновлений в файл update_settings.json в каталоге данных, по умолчанию auto_check=true, check_interval_hours=24.

Шаг 6: Включение HTTP API Server (привязывается только к локальной машине)

Почему Если вы хотите, чтобы внешние программы (например, плагин VS Code) «переключали учётные записи/обновляли квоту/читали журналы», HTTP API Server более подходит, чем порт обратного прокси: он жёстко привязан к 127.0.0.1, открыт только для локальной машины.

Действия: в SettingsAdvanced в области «HTTP API»:

  1. Включите переключатель.
  2. Установите порт и нажмите сохранить.

Вы должны увидеть: UI подскажет «требуется перезапуск» (потому что бэкенд только при запуске читает http_api_settings.json и запускает службу).

Шаг 7: Проверка HTTP API с помощью curl (пробное действие/переключение/журналы)

Почему Вам нужен воспроизводимый замкнутый цикл проверки: можно выполнить пробное действие/переключение/обновление, и понять их асинхронные задачи.

Порт по умолчанию — 19527. Если вы изменили порт, замените 19527 ниже на ваше фактическое значение.

bash
 # пробное действие
curl -sS "http://127.0.0.1:19527/health" && echo

 # список учётных записей (включая сводку квоты)
curl -sS "http://127.0.0.1:19527/accounts" | head -n 5

 # получение текущей учётной записи
curl -sS "http://127.0.0.1:19527/accounts/current" | head -n 5

 # переключение учётной записи (обратите внимание: возвращает 202, выполняется асинхронно)
curl -sS -i \
  -H 'Content-Type: application/json' \
  -d '{"account_id":"<account_id>"}' \
  "http://127.0.0.1:19527/accounts/switch"

 # обновление всех квот (тоже 202, асинхронно)
curl -sS -i -X POST "http://127.0.0.1:19527/accounts/refresh"

 # чтение журналов прокси (limit/offset/filter/errors_only)
curl -sS "http://127.0.0.1:19527/logs?limit=50&offset=0&filter=&errors_only=false" | head -n 5
powershell
 # пробное действие
Invoke-RestMethod "http://127.0.0.1:19527/health"

 # список учётных записей
Invoke-RestMethod "http://127.0.0.1:19527/accounts" | ConvertTo-Json -Depth 5

 # получение текущей учётной записи
Invoke-RestMethod "http://127.0.0.1:19527/accounts/current" | ConvertTo-Json -Depth 5

 # переключение учётной записи (возвращает 202)
$body = @{ account_id = "<account_id>" } | ConvertTo-Json
Invoke-WebRequest -Method Post -ContentType "application/json" -Body $body "http://127.0.0.1:19527/accounts/switch" | Select-Object -ExpandProperty StatusCode

 # обновление всех квот (возвращает 202)
Invoke-WebRequest -Method Post "http://127.0.0.1:19527/accounts/refresh" | Select-Object -ExpandProperty StatusCode

 # чтение журналов прокси
Invoke-RestMethod "http://127.0.0.1:19527/logs?limit=50&offset=0&filter=&errors_only=false" | ConvertTo-Json -Depth 5

Вы должны увидеть:

  • /health возвращает {"status":"ok","version":"..."} в формате JSON.
  • /accounts/switch возвращает 202 (Accepted), и подсказывает «task started». Настоящее переключение выполняется в фоне.

Контрольная точка ✅

  • Вы можете объяснить, почему язык/тема «изменились, сразу вступили в силу», а порт HTTP API требует перезапуска
  • Вы можете объяснить, почему закрытие окна не завершает процесс, и где действительно выйти
  • Вы можете выполнить /health и /accounts с помощью curl, и понять, что /accounts/switch — асинхронно

Напоминания о возможных ошибках

  1. HTTP API Server жёстко привязан к 127.0.0.1, это другое дело, чем proxy.allow_lan_access.
  2. Логика «проверять или нет» автоматической проверки определяется при запуске приложения; после триггирования сначала обновляется last_check_time, даже если последующая проверка неудаётся, в течение короткого времени повторное всплывающее окно не появится.
  3. «Закрытие окна без выхода» — это задуманное поведение; для освобождения ресурсов процесса используйте Quit в трее.

Краткое содержание урока

  • Язык: немедленное переключение интерфейса + запись обратно в конфигурацию (i18n.changeLanguage + save_config)
  • Тема: унифицированно применяется ThemeManager к data-theme, классу dark и цвету фона окна (Linux — исключение)
  • Обновления: при запуске приложения по update_settings.json решается, показывать ли всплывающее окно, установка отвечает Tauri Updater
  • HTTP API: включён по умолчанию, только локальный доступ, конфигурация сохраняется в http_api_settings.json, изменение порта требует перезапуска

Предварительный просмотр следующего урока

Следующий урок перейдёт в Развертывание на сервере: Docker noVNC vs Headless Xvfb (advanced-deployment), перенося десктоп на NAS/сервер для запуска.


Приложение: Ссылка на исходный код

Нажмите, чтобы развернуть и просмотреть местоположение исходного кода

Дата обновления: 2026-01-23

ТемаПуть к файлуНомер строки
Инициализация i18n и fallbacksrc/i18n.ts1-67
Settings: язык/тема/автозапуск/обновления/настройки HTTP APIsrc/pages/Settings.tsx16-730
Приложение: синхронизация языка + запуск проверки обновленийsrc/App.tsx52-124
ThemeManager: применение темы, прослушивание system theme, запись в localStoragesrc/components/common/ThemeManager.tsx1-82
UpdateNotification: проверка обновлений, автоматическое скачивание/установка и relaunchsrc/components/UpdateNotification.tsx1-217
Проверка обновлений: GitHub Releases + интервал проверкиsrc-tauri/src/modules/update_checker.rs1-187
Трей: генерация меню по языкам + прослушивание config://updated для обновленияsrc-tauri/src/modules/tray.rs1-255
Сохранение конфигурации: отправка config://updated + горячее обновление работающего обратного проксиsrc-tauri/src/commands/mod.rs296-334
Команды автозапуска: toggle/is_enabled (совместимость с Windows disable)src-tauri/src/commands/autostart.rs1-39
Tauri: инициализация autostart/updater + закрытие окна转为 hide + запуск HTTP APIsrc-tauri/src/lib.rs50-160
HTTP API: сохранение настроек + маршруты (health/accounts/switch/refresh/logs) + привязка только к 127.0.0.1src-tauri/src/modules/http_api.rs1-95
HTTP API: Server bind и регистрация маршрутовsrc-tauri/src/modules/http_api.rs51-94
Команды HTTP API: get/savesrc-tauri/src/commands/mod.rs773-789