📦 MediaMatrix

Полная документация по менеджеру плагинов v2.3.8

📋 Содержание

🚀 Установка и запуск

Запуск из исходного кода

Сборка исполняемого файла

npm run dist

Готовые установщики появятся в папке dist/.

✨ Основные возможности

📘 Руководство пользователя

🏠 Главная страница и карусель

На главной отображается горизонтальная карусель, содержащая пункты меню, добавленные плагинами (кроме стандартных «Главная», «Магазин», «Плагины», «Настройки»). Клик по карточке открывает соответствующую страницу. Карусель можно скрыть в настройках.

🛒 Магазин плагинов

🔌 Управление плагинами

На странице «Плагины» для каждого плагина доступны:

Статистика вверху страницы: общее количество, активные, доступно в магазине.

Установка нового плагина

Кнопка «Установить» открывает модальное окно с тремя вкладками:

При необходимости можно заполнить название, описание и версию вручную.

🔔 Уведомления

Всплывающие уведомления появляются справа вверху. История доступна по клику на иконку колокольчика (хранится до 50 записей).

🧩 Разработка плагинов

Формат плагина

Плагин — JavaScript-файл, который экспортирует функцию, принимающую объект pluginAPI. Метаданные указываются в блоке комментариев /** ... */.

/**
 * @name Мой плагин
 * @version 1.0.0
 * @description Пример плагина
 * @author Ваше имя
 * @settings [{"id":"apiKey","label":"API ключ","type":"text"}]
 */

(function(pluginAPI) {
    // код плагина
})(pluginAPI);

Метаданные плагина

ТегОписание
@nameНазвание плагина
@versionВерсия (строка)
@descriptionКраткое описание
@authorАвтор
@settingsJSON-массив с описанием настроек

Настройки плагина (формат)

[{"id": "apiKey","label": "API ключ","type": "password","placeholder": "Введите ключ","hint": "Получите ключ на сайте"}{"id": "enableLogging","label": "Логирование","type": "switch","default": true}]

Внимание! Весь формат настроек плагина пишется в одну строку.

Поддерживаемые типы: text, password, url, textarea, switch (или checkbox), select (с полем options).

Пример плагина

/**
 * @name Hello World
 * @version 1.0.0
 * @description Добавляет страницу с приветствием.
 * @author John Doe
 * @settings [{"id":"greeting","label":"Текст","type":"text","default":"Привет, мир!"}]
 */

(function(api) {
  const settings = api.getSettings();
  api.addMenuItem('hello-page', 'fas fa-smile', 'Приветствие');
  api.addPage('hello-page', `<h1>${settings.greeting}</h1><p>Страница плагина.</p>`);
  api.showNotification('Плагин загружен', 'success');
})(pluginAPI);

⚙️ API для плагинов

Плагин получает объект pluginAPI со следующими методами:

МетодОписание
showNotification(message, type)type: 'success' (по умолч.), 'info', 'error'.
getSettings()Возвращает объект текущих настроек.
saveSettings(settings)Сохраняет настройки (слияние).
addMenuItem(id, icon, label)Добавляет пункт в боковое меню. icon — класс FontAwesome (например "fas fa-star").
removeMenuItem(id)Удаляет пункт меню.
addPage(id, content)Добавляет страницу с HTML-содержимым.
removePage(id)Удаляет страницу.
updatePageContent(id, content)Обновляет содержимое страницы.
navigateTo(pageId)Переходит на страницу.
getStorePlugins()Возвращает массив плагинов из магазина.
installFromStore(pluginId)Устанавливает плагин из магазина.
checkForUpdates()Проверяет обновления для установленных плагинов.
updatePlugin(pluginId)Обновляет конкретный плагин.
✅ Все методы безопасно обёрнуты в try/catch — при ошибках выводят предупреждение в консоль, но не ломают плагин.

🛠️ Настройки приложения

Общие настройки (localStorage)

Настройки меню (порядок пунктов)

Сохраняются как массив идентификаторов страниц в localStorage.menuOrder. Изменяются drag-and-drop в разделе «Настройки меню».

Настройки магазина

Настройки сервера (для разработчиков)

Хранятся в config.json в папке пользовательских данных приложения.

Управление данными

Экспорт в JSON, импорт из файла, полная очистка (сброс к умолчанию).

💻 Electron и системная интеграция

Управление окном

Через window.electronAPI (доступно только в Electron-версии):

Трей (системный лоток)

При запуске появляется значок. Контекстное меню: «Открыть», «Перезагрузить приложение», «Выход». При закрытии окна оно скрывается в трей.

Контекстное меню

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

Сервер Express

Встроенный сервер раздаёт статические файлы из корня проекта. Доступен по адресу http://localhost:порт.

🏗️ Техническая архитектура

Структура файлов

/
├── main.js                 # главный процесс Electron
├── preload.js              # мост для безопасного API
├── package.json
├── index.html
├── styles.css
├── engine/                 # рендер-скрипты
│   ├── electron.js
│   ├── main.js
│   ├── navigation.js
│   ├── notifications.js
│   ├── plugins.js
│   ├── settings.js
│   ├── state.js
│   ├── ui.js
│   └── utils.js
├── component/              # компоненты
│   ├── carousel.js
│   ├── menu-settings.js
│   └── store.js
└── ...

Рендер-процесс

Чистый JS без фреймворков. Состояние в глобальных переменных, синхронизация с localStorage. Основные функции: renderPlugins(), renderCarousel(), filterStorePlugins().

Главный процесс

Создание окна, трей, IPC-обработчики, запуск Express-сервера.

Хранилище

📦 Сборка и распространение

Требования

Node.js 14+, npm/yarn.

Конфигурация electron-builder (из package.json)

"build": {
  "appId": "com.mediamatrix.app",
  "productName": "MediaMatrix",
  "directories": { "output": "dist" },
  "win": { "target": "nsis", "icon": "build/icon.ico" },
  "mac": { "target": "dmg", "icon": "build/icon.icns" },
  "linux": { "target": "AppImage", "icon": "build/icon.png" }
}

Для сборки: npm run dist.

❓ Часто задаваемые вопросы

Как добавить свой репозиторий плагинов? В настройках магазина измените поле «URL магазина плагинов» на адрес вашего JSON-файла.
Плагин не работает после установки. Проверьте консоль (F12) на ошибки. Убедитесь, что плагин включён и код корректен.
Как открыть инструменты разработчика? В Electron можно запустить с флагом NODE_ENV=development или раскомментировать mainWindow.webContents.openDevTools().
Работает ли без Electron? Да, после запуска сервера можно открыть http://localhost:3000 в браузере, но функции управления окном будут недоступны.
Где хранятся данные? Настройки и плагины — в localStorage, конфиг сервера — в папке пользовательских данных: Windows %APPDATA%\MediaMatrix\config.json, macOS ~/Library/Application Support/MediaMatrix/config.json.