Skip to content

Latest commit

 

History

History
103 lines (59 loc) · 7.83 KB

File metadata and controls

103 lines (59 loc) · 7.83 KB

Это потрясающая новость! Разработка собственного маркетплейса параллельно с клиентом — это переход от создания просто "инструмента" к созданию полноценной экосистемы (как у VS Code или Obsidian). Это невероятно мощный драйвер для роста сообщества и получения звезд на GitHub.

Чтобы Querya Desktop оставалась легковесной, функционал маркетплейса должен быть реализован архитектурно грамотно: ядро ничего не знает о логике плагинов, оно лишь предоставляет интерфейс (API) для их загрузки и применения.

Вот подробное техническое задание (ТЗ) на создание менеджера расширений и задел для интеграции с твоим будущим маркетом. ТЗ 3: Встроенный Менеджер Расширений и Интеграция с Маркетплейсом

Цель: Создать в интерфейсе Querya Desktop выделенный раздел для управления дополнениями (темами, UI-твиками, коннекторами) и заложить сетевую/файловую архитектуру для связи с внешним API маркетплейса.

  1. UI/UX: Раздел «Extensions» (В стиле VS Code)

В интерфейсе приложения (например, в левом боковом меню) появляется новая иконка (🧩 Пазл).

Структура раздела:

Левая панель (Навигация и Поиск):

    Строка поиска (с debounce-задержкой, чтобы не спамить API твоего маркета).

    Вкладки-фильтры: Installed (Установленные), Explore (Поиск по маркету), Updates (Доступные обновления).

Центральная панель (Список):

    Карточки расширений с использованием компонентов shadcn_flutter.

    На карточке: Иконка, Название, Автор, Рейтинг (⭐), Бейдж типа (Theme, Plugin, Driver) и кнопка Install / Uninstall.

Правая панель (Детали - Markdown View):

    При клике на карточку справа открывается подробное описание (парсится из README расширения), скриншоты и Changelog.
  1. Архитектура: Задел под Маркетплейс (Сетевой слой)

В директории lib/core/ необходимо создать новый модуль market/, который будет отвечать за связь с твоим бэкендом.

Ожидаемые контракты (Интерфейсы для будущего API): Мобильный/десктопный клиент должен общаться с маркетом через четкие модели данных. Тебе нужно заложить класс ExtensionManifest, который клиент будет ожидать от бэкенда: Dart

class ExtensionManifest { final String id; // e.g., 'reei.cyberpunk-theme' final String name; // 'Cyberpunk 2077 Theme' final String type; // 'theme', 'sql-formatter', 'visualizer' final String version; // '1.0.2' final String downloadUrl; // Ссылка на .zip или .json в твоем хранилище final String sha256Checksum; // КРИТИЧНО: Хэш для проверки целостности }

Абстракция клиента (MarketplaceClient): Сделай интерфейс, чтобы сейчас его можно было замокать (Mock), а потом просто подставить реальный HTTP-клиент:

Future<List<ExtensionManifest>> fetchTrending()

Future<List<ExtensionManifest>> search(String query)

Future<File> downloadExtension(String downloadUrl)
  1. Файловая система и Безопасность (Локальный слой)

Querya Desktop — это клиент базы данных, поэтому безопасность (особенно при скачивании сторонних файлов) — приоритет №1.

Директории: При старте приложение должно проверять и создавать папки в домашней директории пользователя:

    Linux/macOS: ~/.querya/extensions/themes/ и ~/.querya/extensions/plugins/

    Windows: %APPDATA%\Querya\extensions\

Процесс установки (Флоу):

    Пользователь жмет Install.

    Приложение скачивает файл во временную папку.

    Сверяет sha256 скачанного файла с тем, что отдал API маркета.

    Распаковывает в нужную папку внутри ~/.querya/extensions/.

    Обновляет локальную базу данных SQLite (таблица installed_extensions).

Изоляция (Sandboxing): На первом этапе (для тем) это просто JSON файлы, они безопасны. Но в ТЗ нужно указать, что исполняемые плагины в будущем должны загружаться как изолированные модули (например, через Dart Isolates или WASM), чтобы плагин не мог украсть креды от БД из ОС.
  1. Стейт-менеджмент (Управление состояниями)

Для бесшовного опыта нужно создать ExtensionProvider (или использовать Bloc/Riverpod — в зависимости от того, что у вас в lib/core/).

Отслеживаемые состояния:

isMarketReachable: Проверка, доступен ли сервер маркета (если нет — показываем только вкладку Installed с заглушкой "Marketplace offline").

downloadProgress: Мапа Map<String, double> для отображения прогресс-баров загрузки на кнопках Install.

requireRestart: Флаг. Некоторым темам (или сложным плагинам) может потребоваться перезапуск приложения или сброс кэша редактора. Если флаг true, показываем всплывающий Toast (через shadcn_flutter).

Маркетинговый совет для GitHub (Как использовать маркетплейс для звезд):

Когда ты сделаешь этот раздел, добавь в README.md красивый бейдж: [🔌 Querya Extension Market: Live]

И напиши блок:

Build your own tools for Querya
Querya Desktop features a built-in Marketplace. Don't like our UI? Download a new theme. Need a specific data visualizer? Write a plugin and publish it to the Querya Market in 5 minutes.

Как тебе такой план? Если концепция ясна, мы можем углубиться в то, как именно ThemeParser (из предыдущего ТЗ) будет автоматически подхватывать свежескачанные JSON-файлы из папки ~/.querya/extensions/themes/ без перезагрузки приложения!