init: media-center v2

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>
This commit is contained in:
2026-05-11 23:49:43 +03:00
commit ecb5e7e49f
52 changed files with 11718 additions and 0 deletions

327
README.md Normal file
View File

@@ -0,0 +1,327 @@
# 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
- [ ] История просмотров
- [ ] Рекомендации на основе закладок
- [ ] Синхронизация между устройствами
- [ ] Встроенный видеоплеер
- [ ] Автоматическая загрузка субтитров
- [ ] Торрент интеграция
- [ ] Уведомления о новых сериях