Rewrite of ESH-Media v1 with separated main/renderer/shared architecture (vite-plugin-electron, React 18, react-router-dom). Includes NeDB storage, electron-store config, proxy manager with FoxyProxy/uBlock extensions, custom server-checked updater, NSIS installer. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
11 KiB
Media Center v2
Electron-приложение для просмотра фильмов и сериалов с глобальным поиском по множеству сайтов.
Возможности
- Глобальный поиск - поиск фильмов на всех подключенных сайтах одновременно
- Кастомные поисковые скрипты - для каждого сайта свой скрипт поиска
- Закладки - сохранение избранных фильмов и сериалов
- Управление вкладками - просмотр и переключение между открытыми страницами
- Прокси поддержка - автоматическое использование прокси для заблокированных сайтов
- Автообновления - проверка и установка новых версий
- Расширения браузера - AdBlock и FoxyProxy
Технологический стек
- Electron 28 - кроссплатформенный фреймворк
- React 18 - UI библиотека
- TypeScript - язык разработки
- Vite - сборщик для frontend
- Axios - HTTP клиент
- Cheerio - HTML парсинг
- NeDB - встроенная база данных
Установка и запуск
Требования
- Node.js 18+ (для разработки)
- npm или yarn
Установка зависимостей
npm install
Разработка
Запуск в режиме разработки:
npm run dev
Это запустит:
- Vite dev server для React (порт 3000)
- TypeScript компиляцию main process
- Electron приложение с hot reload
Сборка
Сборка всего проекта:
npm run build
Создание установщика для Windows:
npm run package:win
Создание установщика для macOS:
npm run package:mac
Создание установщика для Linux:
npm run package:linux
Готовый установщик будет в папке release/.
Структура проекта
media-center/
├── src/
│ ├── main/ # Главный процесс Electron
│ │ ├── index.ts # Точка входа
│ │ ├── proxy.ts # Управление прокси
│ │ ├── config.ts # Управление конфигурацией
│ │ ├── database.ts # База данных
│ │ ├── tabs.ts # Управление вкладками
│ │ ├── search.ts # Система поиска
│ │ ├── updater.ts # Обновления
│ │ └── preload.ts # Preload скрипт
│ │
│ ├── renderer/ # Renderer процесс (React)
│ │ ├── App.tsx # Главный компонент
│ │ ├── pages/ # Страницы
│ │ ├── components/ # Компоненты
│ │ └── styles/ # CSS стили
│ │
│ └── shared/ # Общий код
│ ├── types.ts # TypeScript типы
│ └── constants.ts # Константы
│
├── config/ # Конфигурации
│ └── sites.json # Настройки сайтов
│
├── search-scripts/ # Поисковые скрипты
│ ├── kinogo.js
│ ├── rutube.js
│ ├── hdrezka.js
│ ├── SCRIPT_TEMPLATE.js
│ └── README.md
│
├── REQUIREMENTS.md # Детальные требования
├── SEARCH_SCRIPTS.md # Документация по скриптам
└── README.md # Этот файл
Использование
Главная страница
Отображает карточки с доступными сайтами. Клик по карточке открывает сайт в новой вкладке.
Глобальный поиск
- Введите название фильма в поисковую строку
- Нажмите "Найти"
- Просмотрите результаты со всех сайтов
- Кликните на результат для открытия страницы фильма
Закладки
- При просмотре фильма добавьте его в закладки
- Все закладки доступны на странице "Закладки"
- Фильтруйте закладки по сайтам
- Удаляйте ненужные закладки
Активные вкладки
- Просмотр всех открытых вкладок
- Переключение между вкладками
- Закрытие вкладок
Настройки
Конфигурация:
- URL сервера для обновления конфигураций
- Обновление списка сайтов и скриптов
Прокси:
- Статус прокси (запущен/остановлен)
- Автозапуск при старте приложения
- Ручное управление прокси
Интерфейс:
- Выбор темы (светлая/темная)
- Выбор языка (русский/английский)
Обновления:
- Проверка доступных обновлений
- Автоматическая загрузка и установка
Поисковые скрипты
Каждый сайт имеет свой JavaScript скрипт для поиска. Скрипты выполняются в контексте Electron без необходимости внешнего Node.js.
Создание нового скрипта
- Скопируйте
search-scripts/SCRIPT_TEMPLATE.js - Назовите файл по имени сайта (например,
mysite.js) - Реализуйте функцию
search():
async function search(query, siteUrl, useProxy, axios, cheerio, proxyConfig) {
// Ваш код поиска
return [
{
name: "Название фильма",
url: "https://site.com/movie/123",
image: "https://site.com/poster.jpg", // опционально
year: "2023", // опционально
description: "Описание" // опционально
}
];
}
- Добавьте сайт в
config/sites.json:
{
"id": "mysite",
"name": "My Site",
"url": "https://mysite.com",
"logo": "https://mysite.com/favicon.ico",
"enabled": true,
"useProxy": false,
"searchScript": "mysite.js"
}
Подробнее см. SEARCH_SCRIPTS.md
Прокси (InvisibleManXRay)
Для доступа к заблокированным сайтам используется InvisibleManXRay прокси.
Установка
- Скачайте InvisibleManXRay CLI
- Установите в системный PATH или укажите путь в
src/shared/constants.ts - Приложение запустит прокси автоматически (если включен автозапуск)
Настройка
В src/shared/constants.ts:
export const INVISIBLE_MAN_CLI_PATH = 'invisibleManXRay'; // или полный путь
export const DEFAULT_PROXY_PORT = 10808;
Серверная часть (Backend API)
Для полной функциональности нужен сервер с API:
GET /api/config/sites
Возвращает конфигурацию сайтов:
{
"version": "1.0.0",
"lastUpdated": "2025-10-14T12:00:00Z",
"sites": [...]
}
GET /api/version/check
Проверка обновлений:
{
"latestVersion": "1.1.0",
"updateAvailable": true,
"downloadUrl": "https://server.com/downloads/media-center-1.1.0.exe",
"changelog": "- Новые функции...",
"releaseDate": "2025-10-14",
"mandatory": false
}
GET /api/downloads/{version}/{platform}
Скачивание установщика.
Подробнее см. REQUIREMENTS.md
Разработка
Добавление нового сайта
- Создайте поисковый скрипт в
search-scripts/ - Добавьте сайт в
config/sites.json - Протестируйте поиск
Отладка
- Откройте DevTools: F12
- Логи main process:
console.logвидны в терминале - Логи renderer process: видны в DevTools Console
- Ошибки скриптов: проверьте консоль при выполнении поиска
TypeScript
Все типы находятся в src/shared/types.ts. Для добавления новых типов:
export interface MyType {
field: string;
}
Безопасность
- Скрипты выполняются в изолированном контексте
- Context Isolation включена
- Node Integration отключена в BrowserView
- Строгая Content Security Policy
- Таймауты для всех операций
Производительность
- Ленивая загрузка вкладок
- Кэширование результатов поиска
- Параллельные запросы при поиске
- Оптимизация памяти
Известные проблемы
- Прокси не запускается: Убедитесь, что InvisibleManXRay установлен
- Поиск не работает: Проверьте доступность сайтов
- Обновления не скачиваются: Проверьте URL сервера в настройках
Лицензия
MIT
Автор
George
Поддержка
Для вопросов и предложений создайте Issue в GitHub.
Roadmap
- История просмотров
- Рекомендации на основе закладок
- Синхронизация между устройствами
- Встроенный видеоплеер
- Автоматическая загрузка субтитров
- Торрент интеграция
- Уведомления о новых сериях