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