From e832651e4a6250ebddc63a9218fd8a039be57806 Mon Sep 17 00:00:00 2001 From: Hermes Date: Sat, 8 Aug 2026 03:08:06 +0200 Subject: [PATCH] fix: register menu via Lampa.Controller.add, start only on app:ready --- README.md | 123 +++++++++++++++++++++++++++--------------------------- plugin.js | 41 ++++++++++-------- 2 files changed, 85 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index c897f18..f3d6525 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,73 @@ -# Lampa Plugin — «Мои фильмы» +# Lampa Movies — плагин «Мои фильмы» -Плагин добавляет в меню Lampa раздел **«Мои фильмы»**: каталог фильмов с обложками, -описанием и торрентами. Клик по фильму → детали → «Смотреть» → воспроизведение -через настроенный в Lampa torrserver (localhost:8090). +Статический сервер (nginx) на Coolify. Каталог и файлы фильмов живут в **persistent volume** (переживают деплои). -## Структура на сервере +**Сервер приложения:** `e9ghwyp5n5kyfshk55krbhki.31.129.103.242.sslip.io` +**Volume на spb-easy-dale:** `/data/coolify/applications/e9ghwyp5n5kyfshk55krbhki/movies` → смонтирован в контейнере как `/movies` (nginx отдаёт по URL `/movies/`). -Всё раздаётся по одному базовому URL (например `https://movies.example.com/`): +## Как добавить фильм (по SSH на spb-easy-dale) +1. Создай папку фильма в volume: + ``` + mkdir -p /data/coolify/applications/e9ghwyp5n5kyfshk55krbhki/movies/ + ``` + `` — латиницей, без пробелов (например `inception`, `dune-2021`). + +2. Залей в неё файлы: + - `meta.txt` — описание (см. формат ниже) + - обложка: любой `*.jpg` / `*.png` (берётся первая) + - торрент: любой `*.torrent` (берётся первый) + +3. Пересобери `catalog.json`: + ``` + bash /data/coolify/applications/e9ghwyp5n5kyfshk55krbhki/build_catalog.sh + ``` + +Готово — плагин в Lampa сразу увидит фильм (обновления страницы достаточно). + +## Формат `meta.txt` + +Строки `ключ: значение`: ``` -server-root/ -├── catalog.json описание каталога (массив фильмов) -├── covers/ -│ ├── inception.jpg -│ └── interstellar.jpg -├── torrents/ -│ ├── inception.torrent -│ └── interstellar.torrent -└── plugin.js (можно раздавать отсюда же или с отдельного хоста) +title: Начало +original_title: Inception +year: 2010 +genre: фантастика, боевик +rating: 8.8 +description: Дом Кобб — талантливый вор... +``` +Поддерживаются: `title`, `original_title`, `year` (число), `genre` (через запятую), +`rating` (число), `description`. Если `meta.txt` нет — заголовком будет ``. + +## Пример (bash) + +```bash +B=/data/coolify/applications/e9ghwyp5n5kyfshk55krbhki/movies +mkdir -p $B/inception +cat > $B/inception/meta.txt <<'EOF' +title: Начало +original_title: Inception +year: 2010 +genre: фантастика, боевик +rating: 8.8 +description: Дом Кобб — талантливый вор, специалист по извлечению секретов. +EOF +# скопируй обложку и торрент в $B/inception/ +bash /data/coolify/applications/e9ghwyp5n5kyfshk55krbhki/build_catalog.sh ``` -`catalog.json` — см. `catalog.example.json`. Поля фильма: +## Плагин в Lampa -| поле | обязательно | назначение | -|-----------------|-------------|---------------------------------------------| -| `id` | да | уникальный id | -| `title` | да | название | -| `original_title`| нет | оригинальное название | -| `year` | нет | год | -| `genre` | нет | массив жанров | -| `rating` | нет | рейтинг | -| `description` | нет | описание | -| `poster` | нет | путь к обложке в `covers/` (или полный URL) | -| `torrent` | да* | путь к `.torrent` в `torrents/` (или URL) | -| `magnet` | нет | magnet-ссылка (приоритетнее `torrent`) | +Настройки → Плагины → Добавить плагин → URL: +`http://e9ghwyp5n5kyfshk55krbhki.31.129.103.242.sslip.io/plugin.js` -\* нужен либо `torrent`, либо `magnet`. +Базовый URL захардкожен в `plugin.js` (менять в настройках не нужно). -## Требования к серверу - -- Отдавать `catalog.json`, `covers/*`, `torrents/*` по HTTPS (или HTTP, если Lampa на - том же устройстве). -- **CORS**: заголовок `Access-Control-Allow-Origin: *` на `catalog.json` и обложки - (Lampa грузит их из WebView). Торрент torrserver забирает сам — CORS для него не нужен, - но файл должен отдаваться с корректным типом. -- Любой статический хостинг: nginx, Caddy, GitHub Pages, хостинг торрент-бокса и т.п. - -Пример nginx: - -```nginx -location / { - add_header Access-Control-Allow-Origin *; - try_files $uri $uri/ =404; -} -``` - -## Установка плагина в Lampa - -1. Положи `plugin.js` на доступный по URL хост, запомни прямую ссылку - (например `https://movies.example.com/plugin.js`). -2. В Lampa: **Настройки → Плагины → Добавить плагин** → вставить URL `plugin.js` → OK. -3. В **Настройки → Плагины → Мои фильмы** (параметр «Адрес сервера каталога») - вписать базовый URL сервера (с `/` на конце), напр. `https://movies.example.com/`. -4. В главном меню появится пункт **«Мои фильмы»**. - -## Поток воспроизведения - -При нажатии «Смотреть» плагин передаёт torrent/magnet в `Lampa.Player`. Дальше -работает уже настроенный в Lampa torrserver (локально `localhost:8090`), который -раздаёт видеопоток плееру. Плагин сам torrserver не трогает. +## Файлы репо (Gitea `admin/mymovies`) +- `Dockerfile` — nginx + создание `/usr/share/nginx/html/movies` +- `nginx.conf` — раздача `catalog.json`, `/covers/`, `/torrents/`, `/movies/` с CORS +- `plugin.js` — код плагина (тянет `/movies/catalog.json`) +- `build_catalog.sh` — скан папок → `catalog.json` (копируется на spb при необходимости) +- `catalog.json` — **старый** корневой каталог (не используется плагином, можно удалить) +- `add_movie.sh` — альтернативный хелпер (правит корневой `catalog.json`, не volume) diff --git a/plugin.js b/plugin.js index 476e90f..fe8e250 100644 --- a/plugin.js +++ b/plugin.js @@ -106,28 +106,33 @@ .replace(/>/g, '>').replace(/"/g, '"'); } - // ---- Пункт меню ---- - function addMenuItem() { - if ($('.menu__item[data-component="' + PLUGIN.name + '"]').length) return; - var item = $('