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>
328 lines
11 KiB
Markdown
328 lines
11 KiB
Markdown
# Media Center v2
|
||
|
||
Electron-приложение для просмотра фильмов и сериалов с глобальным поиском по множеству сайтов.
|
||
|
||
## Возможности
|
||
|
||
- **Глобальный поиск** - поиск фильмов на всех подключенных сайтах одновременно
|
||
- **Кастомные поисковые скрипты** - для каждого сайта свой скрипт поиска
|
||
- **Закладки** - сохранение избранных фильмов и сериалов
|
||
- **Управление вкладками** - просмотр и переключение между открытыми страницами
|
||
- **Прокси поддержка** - автоматическое использование прокси для заблокированных сайтов
|
||
- **Автообновления** - проверка и установка новых версий
|
||
- **Расширения браузера** - AdBlock и FoxyProxy
|
||
|
||
## Технологический стек
|
||
|
||
- **Electron 28** - кроссплатформенный фреймворк
|
||
- **React 18** - UI библиотека
|
||
- **TypeScript** - язык разработки
|
||
- **Vite** - сборщик для frontend
|
||
- **Axios** - HTTP клиент
|
||
- **Cheerio** - HTML парсинг
|
||
- **NeDB** - встроенная база данных
|
||
|
||
## Установка и запуск
|
||
|
||
### Требования
|
||
|
||
- Node.js 18+ (для разработки)
|
||
- npm или yarn
|
||
|
||
### Установка зависимостей
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### Разработка
|
||
|
||
Запуск в режиме разработки:
|
||
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
Это запустит:
|
||
- Vite dev server для React (порт 3000)
|
||
- TypeScript компиляцию main process
|
||
- Electron приложение с hot reload
|
||
|
||
### Сборка
|
||
|
||
Сборка всего проекта:
|
||
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
Создание установщика для Windows:
|
||
|
||
```bash
|
||
npm run package:win
|
||
```
|
||
|
||
Создание установщика для macOS:
|
||
|
||
```bash
|
||
npm run package:mac
|
||
```
|
||
|
||
Создание установщика для Linux:
|
||
|
||
```bash
|
||
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 # Этот файл
|
||
```
|
||
|
||
## Использование
|
||
|
||
### Главная страница
|
||
|
||
Отображает карточки с доступными сайтами. Клик по карточке открывает сайт в новой вкладке.
|
||
|
||
### Глобальный поиск
|
||
|
||
1. Введите название фильма в поисковую строку
|
||
2. Нажмите "Найти"
|
||
3. Просмотрите результаты со всех сайтов
|
||
4. Кликните на результат для открытия страницы фильма
|
||
|
||
### Закладки
|
||
|
||
1. При просмотре фильма добавьте его в закладки
|
||
2. Все закладки доступны на странице "Закладки"
|
||
3. Фильтруйте закладки по сайтам
|
||
4. Удаляйте ненужные закладки
|
||
|
||
### Активные вкладки
|
||
|
||
- Просмотр всех открытых вкладок
|
||
- Переключение между вкладками
|
||
- Закрытие вкладок
|
||
|
||
### Настройки
|
||
|
||
**Конфигурация:**
|
||
- URL сервера для обновления конфигураций
|
||
- Обновление списка сайтов и скриптов
|
||
|
||
**Прокси:**
|
||
- Статус прокси (запущен/остановлен)
|
||
- Автозапуск при старте приложения
|
||
- Ручное управление прокси
|
||
|
||
**Интерфейс:**
|
||
- Выбор темы (светлая/темная)
|
||
- Выбор языка (русский/английский)
|
||
|
||
**Обновления:**
|
||
- Проверка доступных обновлений
|
||
- Автоматическая загрузка и установка
|
||
|
||
## Поисковые скрипты
|
||
|
||
Каждый сайт имеет свой JavaScript скрипт для поиска. Скрипты выполняются в контексте Electron без необходимости внешнего Node.js.
|
||
|
||
### Создание нового скрипта
|
||
|
||
1. Скопируйте `search-scripts/SCRIPT_TEMPLATE.js`
|
||
2. Назовите файл по имени сайта (например, `mysite.js`)
|
||
3. Реализуйте функцию `search()`:
|
||
|
||
```javascript
|
||
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: "Описание" // опционально
|
||
}
|
||
];
|
||
}
|
||
```
|
||
|
||
4. Добавьте сайт в `config/sites.json`:
|
||
|
||
```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](./SEARCH_SCRIPTS.md)
|
||
|
||
## Прокси (InvisibleManXRay)
|
||
|
||
Для доступа к заблокированным сайтам используется InvisibleManXRay прокси.
|
||
|
||
### Установка
|
||
|
||
1. Скачайте [InvisibleManXRay CLI](https://github.com/...)
|
||
2. Установите в системный PATH или укажите путь в `src/shared/constants.ts`
|
||
3. Приложение запустит прокси автоматически (если включен автозапуск)
|
||
|
||
### Настройка
|
||
|
||
В `src/shared/constants.ts`:
|
||
|
||
```typescript
|
||
export const INVISIBLE_MAN_CLI_PATH = 'invisibleManXRay'; // или полный путь
|
||
export const DEFAULT_PROXY_PORT = 10808;
|
||
```
|
||
|
||
## Серверная часть (Backend API)
|
||
|
||
Для полной функциональности нужен сервер с API:
|
||
|
||
### GET /api/config/sites
|
||
|
||
Возвращает конфигурацию сайтов:
|
||
|
||
```json
|
||
{
|
||
"version": "1.0.0",
|
||
"lastUpdated": "2025-10-14T12:00:00Z",
|
||
"sites": [...]
|
||
}
|
||
```
|
||
|
||
### GET /api/version/check
|
||
|
||
Проверка обновлений:
|
||
|
||
```json
|
||
{
|
||
"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](./REQUIREMENTS.md)
|
||
|
||
## Разработка
|
||
|
||
### Добавление нового сайта
|
||
|
||
1. Создайте поисковый скрипт в `search-scripts/`
|
||
2. Добавьте сайт в `config/sites.json`
|
||
3. Протестируйте поиск
|
||
|
||
### Отладка
|
||
|
||
- Откройте DevTools: F12
|
||
- Логи main process: `console.log` видны в терминале
|
||
- Логи renderer process: видны в DevTools Console
|
||
- Ошибки скриптов: проверьте консоль при выполнении поиска
|
||
|
||
### TypeScript
|
||
|
||
Все типы находятся в `src/shared/types.ts`. Для добавления новых типов:
|
||
|
||
```typescript
|
||
export interface MyType {
|
||
field: string;
|
||
}
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
- Скрипты выполняются в изолированном контексте
|
||
- Context Isolation включена
|
||
- Node Integration отключена в BrowserView
|
||
- Строгая Content Security Policy
|
||
- Таймауты для всех операций
|
||
|
||
## Производительность
|
||
|
||
- Ленивая загрузка вкладок
|
||
- Кэширование результатов поиска
|
||
- Параллельные запросы при поиске
|
||
- Оптимизация памяти
|
||
|
||
## Известные проблемы
|
||
|
||
1. **Прокси не запускается**: Убедитесь, что InvisibleManXRay установлен
|
||
2. **Поиск не работает**: Проверьте доступность сайтов
|
||
3. **Обновления не скачиваются**: Проверьте URL сервера в настройках
|
||
|
||
## Лицензия
|
||
|
||
MIT
|
||
|
||
## Автор
|
||
|
||
George
|
||
|
||
## Поддержка
|
||
|
||
Для вопросов и предложений создайте Issue в GitHub.
|
||
|
||
## Roadmap
|
||
|
||
- [ ] История просмотров
|
||
- [ ] Рекомендации на основе закладок
|
||
- [ ] Синхронизация между устройствами
|
||
- [ ] Встроенный видеоплеер
|
||
- [ ] Автоматическая загрузка субтитров
|
||
- [ ] Торрент интеграция
|
||
- [ ] Уведомления о новых сериях
|