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:
327
README.md
Normal file
327
README.md
Normal 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
|
||||
|
||||
- [ ] История просмотров
|
||||
- [ ] Рекомендации на основе закладок
|
||||
- [ ] Синхронизация между устройствами
|
||||
- [ ] Встроенный видеоплеер
|
||||
- [ ] Автоматическая загрузка субтитров
|
||||
- [ ] Торрент интеграция
|
||||
- [ ] Уведомления о новых сериях
|
||||
Reference in New Issue
Block a user