FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

enhancement(settings): allow manual install of extensions from local .zip/.qext files · Issue #316 · QueryaHub/Querya-Desktop · GitHub

enhancement(settings): allow manual install of extensions from local .zip/.qext files #316

Description

Описание задачи

Сейчас расширения ставятся только через Marketplace (скачивание по URL). Нужна ручная установка из локального файла — по аналогии с импортом тем в Preferences → Appearance (openFile + VS Code JSON).

Пользователь должен иметь возможность выбрать .zip / .qext пакет с диска и установить его в ~/.querya/extensions/ без обращения к market.queryahub.com.

Зачем

  • Разработка и отладка собственных расширений до публикации в маркетплейс
  • Офлайн / air-gapped окружения
  • Установка приватных / внутренних драйверов и скриптов

Предлагаемое UX

  1. Preferences (Settings) — новая секция Extensions (или блок в существующем диалоге):
    • кнопка Install from file… → file_selector с XTypeGroup(extensions: ['zip', 'qext'])
    • опционально: Open extensions folder (как «Open themes folder»)
    • краткий статус последней установки / ошибка
  2. Дополнительно (желательно): та же кнопка на вкладке Installed в Extension Manager (extension_manager_dialog.dart)

Технические требования

  • Распаковка архива с защитой от path traversal (как в HttpMarketplaceRepository.install, issue security(extensions): защита от Path Traversal при распаковке архивов тем и плагинов #242)
  • Парсинг и валидация manifest.json (ExtensionManifest)
  • Прогон SandboxPolicy / ExtensionSupport (preview-only драйверы без валидного sandbox.engine: process — отказ с понятным сообщением)
  • Для database_driver — validateDriverPackage (наличие main)
  • Копирование в ExtensionPaths.extensionsDirectory() / <id>/
  • LocalExtensionRegistry.reload() + обновление UI
  • Опционально: проверка SHA-256, если рядом лежит .sha256 / пользователь ввёл checksum
  • Юнит-тесты на happy path + path traversal + невалидный manifest

Место в коде (ориентир)

  • UI: lib/features/settings/preferences_dialog.dart (+ новая секция)
  • Core: lib/core/market/marketplace_repository.dart или новый LocalExtensionInstaller
  • Реестр: lib/core/extensions/local_extension_registry.dart
  • Аналог по UX: PreferencesAppearanceSection._pickAndImportTheme

Acceptance Criteria

  • Из Preferences можно выбрать локальный .zip/.qext и успешно установить валидное расширение
  • Невалидный пакет / path traversal / preview-only без sandbox — понятная ошибка, файлы не остаются в half-installed состоянии
  • После установки расширение видно во вкладке Installed Extension Manager и в LocalExtensionRegistry
  • Есть тесты на установку из локального архива

Scope

  • Scope: desktop
  • Component: Settings / Marketplace / Extensions
  • Kind: feature_request

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or requestmarketplaceExtensions marketplace, ExtensionManifestsettingsTheme parser epic label: settingsuiUser interface components and widgets

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


    Back | FazBrowse Home | New Git URL