Files
ESH-Media/README.md
eshmeshek 1c7bb75a05 ESH-Media v1.0.11 — kiosk media browser for elderly users
Electron-based kiosk desktop app: large-tile launcher for YouTube, RuTube,
movie sites and Google services, designed for low-tech grandparent use.

Features:
  - WebContentsView-per-app tabbed browsing with session persistence
  - per-app proxy routing (Clash/V2Ray friendly, useProxy flag)
  - cliqz-electron adblocker with whitelist for OAuth/integrity domains
  - TMDB-backed movie search across kinogo / hdrezka / filmix
  - bookmark posters auto-fetched from og:image / JSON-LD
  - electron-updater wired to Gitea releases API (latest.yml + .blockmap)
  - cross-domain navigation confirms via custom WebContentsView dialogs
  - kiosk window with hidden menu, Ctrl+Shift+I devtools shortcut
  - Trusted Types disabled engine-wide so adblocker scriptlets work on YouTube

Google OAuth handling (the hard-won part):
  Google's anti-abuse JS rejects WebContentsView + custom session settings
  as "embedded browser". So accounts.google.com opens in a top-level
  BrowserWindow popup in a dedicated persist:google-login partition that
  we never call setProxy/setUserAgent on — it inherits Windows system
  proxy and the default Electron-tagged UA, both of which Google accepts.
  After login, .google.com/.youtube.com cookies migrate into the parent
  view's session and the view reloads to pick up the logged-in state.

Session restore: only the last-active tab attaches to the window; other
tabs load silently in the background and become instantly visible when
the user clicks them in the sidebar.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 00:46:02 +03:00

88 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ESH-Media
Десктопное приложение на Electron + React. Запускает веб-сервисы в отдельных WebContentsView, поиск и обзор фильмов через TMDB, встроенная блокировка рекламы.
## Стек
- Electron 32
- React 18 + TypeScript
- Vite
- @cliqz/adblocker-electron
## Запуск
```bash
npm install
npm run dev
```
## Сборка
```bash
# Windows (installer + zip)
npm run build:win
# Linux (AppImage + deb)
npm run build:linux
```
Артефакты в папке `release/`.
> Linux-сборку нужно запускать на Linux-машине.
## Настройка
Настройки открываются кнопкой в левом верхнем углу приложения.
### Приложения
Список сайтов, которые отображаются на главном экране в виде карточек. Для каждого можно указать:
- **Название** — отображается под иконкой
- **URL** — адрес сайта, открывается в отдельном WebContentsView
- **URL иконки** — картинка для карточки (необязательно)
- **Прокси** — использовать ли прокси для этого сайта (переключатель включается отдельно для каждого)
### Прокси
Приложение поддерживает HTTP/HTTPS/SOCKS5 прокси. Настраивается в разделе "Прокси" — указываешь хост и порт. Прокси применяется не глобально, а поприложенно: для каждого сайта в списке есть отдельный переключатель. Это позволяет, например, открывать заблокированные сайты через прокси, а остальные — напрямую.
Конфигурация прокси сохраняется в файл `~/.ESH-Media.json` и применяется при следующем запуске автоматически.
### Поиск фильмов
- **TMDB API Key** — ключ для поиска метаданных, постеров и обзора по фильтрам. Получить бесплатно на [themoviedb.org](https://www.themoviedb.org/settings/api). Поддерживаются как обычные API-ключи, так и Bearer-токены.
- **Сайты** — список фильмовых сайтов, на которых будет производиться поиск после выбора фильма из TMDB. Поддерживаются движки DLE (kinogo, lordfilm и зеркала), HDRezka, Filmix. Тип определяется автоматически по домену.
Если раздел "Сайты" пустой, приложение попробует использовать подходящие сайты из раздела "Приложения".
## Конфиг
Хранится в домашней директории пользователя: `~/.ESH-Media.json`.
```json
{
"apps": [...],
"proxy": { "host": "127.0.0.1", "port": "7890" },
"movieSites": [...],
"tmdbApiKey": "...",
"bookmarks": [...]
}
```
## Структура
```
main.js — main process
preload.js — preload / IPC bridge
index.html — точка входа основного UI
loader.html — экран загрузки
dialog-error.html — диалог ошибки
dialog-confirm.html — диалог подтверждения
src/
entries/ — entry points для Vite (loader, dialogs)
components/ — React компоненты
pages/ — страницы
styles/ — стили
```