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

351
REQUIREMENTS.md Normal file
View File

@@ -0,0 +1,351 @@
# Media Center v2 - Детальное Описание и Требования
## Общее Описание
Electron-приложение представляет собой специализированный медиацентр для просмотра фильмов и сериалов. Это кастомный браузер, оптимизированный для работы с различными онлайн-кинотеатрами и видеохостингами.
## Основные Функции
### 1. Главная Страница (Home)
- **Назначение**: Отображение карточек с предзаготовленными сайтами для просмотра фильмов
- **Функционал**:
- Отображение карточек сайтов (название, логотип, краткое описание)
- Клик по карточке открывает сайт в новой вкладке
- Возможность добавления новых сайтов через конфигурацию
- Индикация доступности сайта (онлайн/офлайн)
### 2. Закладки (Bookmarks)
- **Назначение**: Сохранение избранных фильмов и сериалов
- **Функционал**:
- Карточки с сохраненными фильмами/сериалами
- Информация: название, постер, сайт-источник, прямая ссылка
- Возможность удаления закладок
- Клик открывает сохраненную страницу
- Группировка по сайтам (опционально)
### 3. Активные Вкладки (Active Tabs)
- **Назначение**: Управление открытыми вкладками
- **Функционал**:
- Список всех открытых вкладок
- Превью страницы (скриншот или favicon + title)
- Переключение между вкладками
- Закрытие вкладок
- Возможность добавить текущую страницу в закладки
### 4. Глобальный Поиск
- **Назначение**: Поиск фильмов на всех доступных сайтах одновременно
- **Расположение**: Верхняя часть интерфейса (всегда доступен)
- **Функционал**:
- Поисковая строка с автодополнением
- Параллельный поиск на всех сайтах из конфигурации
- Агрегация результатов с разных сайтов
- Отображение результатов с указанием источника
- Фильтрация результатов по сайтам
- Индикация прогресса поиска
### 5. Система Конфигураций Сайтов
- **Назначение**: Управление настройками парсинга для каждого сайта
- **Структура конфигурации**:
```json
{
"version": "1.0.0",
"sites": [
{
"id": "site_unique_id",
"name": "Название сайта",
"url": "https://example.com",
"logo": "url_или_base64",
"enabled": true,
"useProxy": true,
"search": {
"endpoint": "/search",
"method": "GET",
"params": {
"query": "{searchQuery}"
},
"headers": {},
"responseType": "json",
"parsing": {
"type": "json",
"resultsPath": "data.results",
"mapping": {
"title": "title",
"url": "link",
"image": "poster",
"year": "year"
}
}
}
}
]
}
```
- **Поддерживаемые типы парсинга**:
- JSON (стандартный API ответ)
- HTML (парсинг DOM через селекторы)
- XML (парсинг XML структуры)
### 6. Настройки (Settings)
- **Конфигурация сайтов**:
- Просмотр текущей конфигурации
- URL сервера конфигураций (редактируемый)
- Кнопка "Обновить конфигурацию" - загрузка с сервера
- Последняя дата обновления
- **Прокси настройки**:
- Статус прокси (запущен/остановлен)
- Включение/отключение автозапуска прокси
- Настройки InvisibleManXRay CLI
- **Общие настройки**:
- Тема оформления (светлая/темная)
- Язык интерфейса
- Папка для загрузок
- Очистка кэша
### 7. Система Версионирования и Обновлений
- **Проверка версий**:
- Автоматическая проверка при запуске
- Ручная проверка через меню
- Сравнение текущей версии с серверной
- **Процесс обновления**:
- Уведомление о доступности новой версии
- Отображение changelog (что нового)
- Кнопка "Обновить сейчас" / "Напомнить позже"
- Скачивание нового установщика
- Запуск установки с закрытием текущего приложения
### 8. Прокси Интеграция
- **InvisibleManXRay CLI**:
- Автозапуск при старте приложения
- Проверка статуса прокси
- Логирование работы прокси
- Возможность перезапуска
- **FoxyProxy Integration**:
- Автоматическое переключение прокси для сайтов
- Правила на основе конфигурации (useProxy: true/false)
- Прямое подключение для сайтов без прокси
### 9. Расширения Браузера
- **AdBlock**:
- Блокировка рекламы на всех сайтах
- Настройка белого списка (если нужно)
- **FoxyProxy**:
- Управление прокси правилами
- Автоматическое переключение на основе URL
## Технический Стек
### Frontend
- **Electron**: Основной фреймворк
- **React**: UI библиотека
- **TypeScript**: Язык разработки
- **Electron BrowserView/WebView**: Для встраивания веб-страниц
- **CSS/SCSS**: Стилизация
- **Axios**: HTTP запросы
- **Cheerio**: HTML парсинг (для поиска)
### Backend (Main Process)
- **Node.js**: Серверная логика
- **SQLite/NeDB**: Локальная БД для закладок и настроек
- **Child Process**: Управление InvisibleManXRay CLI
- **Electron Store**: Хранение настроек
### Расширения
- **uBlock Origin / AdBlock Plus**: Блокировка рекламы
- **FoxyProxy**: Управление прокси
## Архитектура Приложения
```
media-center/
├── src/
│ ├── main/ # Main process
│ │ ├── index.ts # Точка входа
│ │ ├── proxy.ts # Управление прокси
│ │ ├── config.ts # Управление конфигурацией
│ │ ├── updater.ts # Система обновлений
│ │ └── database.ts # Работа с БД
│ │
│ ├── renderer/ # Renderer process
│ │ ├── App.tsx # Главный компонент
│ │ ├── pages/
│ │ │ ├── Home.tsx
│ │ │ ├── Bookmarks.tsx
│ │ │ ├── ActiveTabs.tsx
│ │ │ └── Settings.tsx
│ │ ├── components/
│ │ │ ├── SearchBar.tsx
│ │ │ ├── SiteCard.tsx
│ │ │ ├── BookmarkCard.tsx
│ │ │ ├── TabCard.tsx
│ │ │ └── BrowserView.tsx
│ │ └── services/
│ │ ├── search.ts # Сервис поиска
│ │ ├── config.ts # Работа с конфигурацией
│ │ └── api.ts # API клиент
│ │
│ ├── shared/ # Общий код
│ │ ├── types.ts # TypeScript типы
│ │ └── constants.ts # Константы
│ │
│ └── extensions/ # Браузерные расширения
│ ├── adblock/
│ └── foxyproxy/
├── config/ # Конфигурационные файлы
│ └── sites.json # Дефолтная конфигурация сайтов
├── package.json
├── electron-builder.json # Настройки сборки
└── tsconfig.json
```
## Требования к Серверной Части (Backend API)
### 1. Конфигурация Сайтов
**Endpoint**: `GET /api/config/sites`
**Ответ**:
```json
{
"version": "1.2.0",
"lastUpdated": "2025-10-14T12:00:00Z",
"sites": [...]
}
```
### 2. Проверка Версии
**Endpoint**: `GET /api/version/check`
**Параметры**: `?currentVersion=1.0.0`
**Ответ**:
```json
{
"latestVersion": "1.1.0",
"updateAvailable": true,
"downloadUrl": "https://server.com/downloads/media-center-1.1.0.exe",
"changelog": "- Добавлен новый сайт\n- Исправлены ошибки поиска",
"releaseDate": "2025-10-14",
"mandatory": false
}
```
### 3. Скачивание Обновления
**Endpoint**: `GET /api/downloads/{version}/{platform}`
**Ответ**: Бинарный файл установщика
### 4. Статистика (опционально)
**Endpoint**: `POST /api/stats/usage`
**Тело**:
```json
{
"appVersion": "1.0.0",
"event": "search",
"site": "kinogo",
"timestamp": "2025-10-14T12:00:00Z"
}
```
## Основные Сценарии Использования
### Сценарий 1: Поиск фильма
1. Пользователь вводит название в глобальный поиск
2. Приложение отправляет запросы на все сайты параллельно
3. Результаты агрегируются и отображаются
4. Пользователь выбирает результат и открывается страница фильма
5. Возможность добавить в закладки
### Сценарий 2: Работа с закладками
1. Пользователь открывает страницу фильма
2. Нажимает "Добавить в закладки"
3. Закладка сохраняется с метаданными
4. Закладка отображается на странице "Закладки"
5. Быстрый доступ к сохраненному фильму
### Сценарий 3: Обновление конфигурации
1. Пользователь открывает "Настройки"
2. Нажимает "Обновить конфигурацию"
3. Приложение загружает новую конфигурацию с сервера
4. Применяет изменения (новые сайты, обновленные правила парсинга)
5. Уведомляет пользователя об успехе
### Сценарий 4: Обновление приложения
1. При запуске приложение проверяет версию
2. Если доступно обновление - показывает уведомление
3. Пользователь может обновить сейчас или позже
4. При согласии скачивается новый установщик
5. Приложение закрывается и запускается установка
## UI/UX Требования
### Дизайн
- **Стиль**: Современный, минималистичный
- **Цветовая схема**: Темная тема по умолчанию (с возможностью переключения)
- **Шрифты**: Читабельные, sans-serif (например, Inter, Roboto)
- **Иконки**: Использовать библиотеку (например, Lucide, Heroicons)
### Навигация
- **Главное меню**: Боковая панель или верхнее меню с вкладками
- **Поиск**: Всегда доступен в верхней части
- **Быстрые действия**: Контекстное меню на карточках
### Адаптивность
- Поддержка разных разрешений экрана
- Минимальное разрешение: 1280x720
- Оптимально: 1920x1080
## Безопасность
1. **Санитизация URL**: Проверка и очистка всех внешних URL
2. **Content Security Policy**: Строгая CSP для renderer process
3. **Node Integration**: Отключена в BrowserView
4. **Context Isolation**: Включена
5. **Безопасное хранение**: Конфиденциальные данные в зашифрованном виде
## Производительность
1. **Ленивая загрузка**: Вкладки загружаются только при активации
2. **Кэширование**: Результаты поиска и конфигурации кэшируются
3. **Оптимизация памяти**: Автоматическое закрытие неиспользуемых вкладок
4. **Параллельные запросы**: Поиск выполняется параллельно
## Этапы Разработки
### Фаза 1: Базовая структура
- [x] Настройка Electron проекта
- [ ] Основная архитектура (main + renderer)
- [ ] Базовый UI с навигацией
### Фаза 2: Основной функционал
- [ ] Система конфигураций
- [ ] Страница Home с карточками сайтов
- [ ] BrowserView интеграция
- [ ] Система закладок
### Фаза 3: Продвинутый функционал
- [ ] Глобальный поиск
- [ ] Парсинг для разных типов ответов
- [ ] Управление активными вкладками
### Фаза 4: Прокси и расширения
- [ ] Интеграция InvisibleManXRay
- [ ] Установка AdBlock
- [ ] Настройка FoxyProxy
### Фаза 5: Обновления и полировка
- [ ] Система версионирования
- [ ] Автообновление
- [ ] Финальная оптимизация
- [ ] Тестирование
## Дополнительные Возможности (Future Features)
1. **История просмотров**: Отслеживание просмотренного контента
2. **Рекомендации**: На основе истории и закладок
3. **Синхронизация**: Между устройствами (через облако)
4. **Плеер интеграция**: Встроенный видеоплеер
5. **Субтитры**: Автоматическая загрузка субтитров
6. **Торрент интеграция**: Загрузка через торренты
7. **Уведомления**: О новых сериях любимых сериалов