From 95db691a0d71da2dc5cc73220cc29691dd0e0660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D0=B5=D0=B4=D0=BE=D1=80=D0=BE=D0=B2=20=D0=94=D0=BC?= =?UTF-8?q?=D0=B8=D1=82=D1=80=D0=B8=D0=B8=CC=86?= Date: Thu, 1 Oct 2026 16:30:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=20main:=20Docker-?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B2=D1=91=D1=80=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20Lampac=20NextGen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Содержимое ветки заменено на актуальное из main: - docker-compose.yaml (ghcr.io/lampac-nextgen/lampac, относительные пути) - config/init.conf, modules/ (override-файлы) - README.md, AGENT.md, .gitignore Старый деплой (immisterio/lampac, configs/, plugins/, update.sh) удалён. --- .gitignore | 15 +- AGENT.md | 83 ++ README.md | 225 ++++++ config/init.conf | 54 ++ configs/init.conf | 62 -- configs/manifest.json | 1 - configs/sisi.js | 982 ----------------------- docker-compose-syn.yml | 19 - docker-compose.yaml | 25 + docker-compose.yml | 21 - modules/AdminPanel/manifest.json | 9 + modules/LampaWeb/plugins/extensions.json | 355 ++++++++ modules/Music/manifest.json | 17 + modules/Tg-notify.bot/manifest.json | 12 + modules/Tracks/manifest.json | 9 + plugins/extensions.json | 116 --- plugins/lampainit.my.js | 154 ---- update.sh | 5 - 18 files changed, 801 insertions(+), 1363 deletions(-) create mode 100644 AGENT.md create mode 100644 README.md create mode 100644 config/init.conf delete mode 100644 configs/init.conf delete mode 100644 configs/manifest.json delete mode 100644 configs/sisi.js delete mode 100644 docker-compose-syn.yml create mode 100644 docker-compose.yaml delete mode 100644 docker-compose.yml create mode 100644 modules/AdminPanel/manifest.json create mode 100644 modules/LampaWeb/plugins/extensions.json create mode 100644 modules/Music/manifest.json create mode 100644 modules/Tg-notify.bot/manifest.json create mode 100644 modules/Tracks/manifest.json delete mode 100644 plugins/extensions.json delete mode 100644 plugins/lampainit.my.js delete mode 100755 update.sh diff --git a/.gitignore b/.gitignore index f221fdd..7a86136 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,12 @@ -lampac.code-workspace -cache -configs/sisi_bkp.js \ No newline at end of file +# Секреты +config/passwd + +# Локальные данные и кеш +cache/ +database/ + +# Медиа DLNA (том ./dlna -> /lampac/data/dlna) +dlna/ + +# Системное +.DS_Store diff --git a/AGENT.md b/AGENT.md new file mode 100644 index 0000000..437207c --- /dev/null +++ b/AGENT.md @@ -0,0 +1,83 @@ +# AGENT.md — инструкции для AI-агента + +## О проекте + +Это **deployment-репозиторий** для локального развёртывания Lampac NextGen (активный форк заброшенного Lampac) в Docker на этой машине. Исходники форка сюда не клонируются — используется официальный образ `ghcr.io/lampac-nextgen/lampac`. + +- Форк: https://github.com/lampac-nextgen/lampac (347+ звёзд, ежедневные коммиты, релизы) +- Документация: https://docs.lampac.dev +- Образ: `ghcr.io/lampac-nextgen/lampac:latest` (multi-arch: amd64/arm64) +- Порт: **9118**, рабочая директория в контейнере: `/lampac` +- Последняя задеплоенная версия: `1.61.2` (при установке 01.10.2026) +- Git: `ssh://git@gitea.prodik.ru:222/prodik/lampac.git`, основная ветка **main** (ветка `synology` — старая, не трогать); remote настроен как `origin` +- Коммиты: `git add -A && git commit && git push origin main` — секреты/данные отсекает `.gitignore`; в git идут только compose, `init.conf`, `modules/`, доки, `.gitignore` + +## Файлы + +| Файл | Назначение | Правила | +| --- | --- | --- | +| `docker-compose.yaml` | Единственный compose-файл | тома обязательны; фиксированной сети/subnet нет (дефолтная сеть compose) | +| `config/init.conf` | Конфиг сервера (JSON) | hot-reload для большинства ключей (кроме `BaseModule.SkipModules` — нужен рестарт); строго валидный JSON | +| `config/passwd` | Пароль root, **секрет** | не выводить в чат/логи/коммиты, в `.gitignore` | +| `modules/*/manifest.json` | Manifest-оверрайды (`enable: true`) | монтируются поверх `/lampac/module//manifest.json`; для модулей, у которых в образе `enable: false` (сейчас: `Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel`) | +| `modules/LampaWeb/plugins/extensions.json` | Каталог магазина плагинов (`/extensions`) | override образного файла, добавлена секция «Lampac» (DLNA); после правки сбросить кеш `cache/static/63/` | +| `cache/` | Кеш | монтируется в `/lampac/cache` | +| `database/` | SQLite-БД (Sync, TimeCode, SISI) | монтируется в `/lampac/database`, не удалять | +| `dlna/` | Медиа/превью DLNA | монтируется в `/lampac/data/dlna`, не удалять | +| `.gitignore` | Игнорируемые пути | в игноре: `config/passwd` (секрет), `cache/`, `database/`, `dlna/`, `.DS_Store`; остальное (init.conf, modules/, compose, доки) — переносимое | +| `README.md` / `AGENT.md` | Документация | обновлять при любых изменениях развёртывания | + +## Основные команды + +```bash +docker compose up -d # запуск +docker compose pull && docker compose up -d # обновление +docker compose restart lampac # рестарт (нужен только для passwd) +docker compose logs -f --tail 100 lampac # логи +docker compose ps # статус +curl -fsS "http://localhost:9118/version?type=hash" # health-check (ожидается 200 + hash) +curl -fsS -o /dev/null -w '%{http_code}\n' http://localhost:9118/online.js # ожидается 200 +``` + +Проверка работоспособности после любых изменений: health-check выше + контейнер в статусе `healthy`. + +## Правила работы + +1. **Отвечать по-русски.** +2. После любых изменений в проекте — дополнять `README.md` и `AGENT.md`. +3. Конфиг менять только в `config/init.conf`; валидность проверять: `python3 -m json.tool config/init.conf`. +4. Включение/выключение модулей — через `BaseModule.SkipModules` в `init.conf` (добавить имя = выключить; имя = имя папки в `/lampac/module/`, группы вроде `OnlineAnime` выключаются целиком). `SkipModules` **не hot-reload** — после правки нужен `docker compose restart lampac`. Модули, у которых в образе `manifest.json: enable: false` (`Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel`), включаются только manifest-оверрайдом: копия манифеста с `enable: true` в `modules//manifest.json` + монтирование в compose. Список модулей: https://docs.lampac.dev/modules/overview + - Текущее состояние: выключены `OnlineAnime`, `OnlineUKR`, `OnlinePaid`, `OnlineGEO`, `Transcoding`, `WebLog`; включены все остальные (TorrServer, Sync/TimeCode/Storage/SyncEvents, Catalog, JacRed, DLNA, SISI, Tracks, Music, Tg-notify.bot, AdminPanel). + - Плагины Lampa: `/online.js`, `/sisi.js`, `/dlna.js` и т.д. Большинство Lampac сам подключает клиенту через `/lampainit.js` (см. ниже про `initPlugins`); при необходимости плагин можно добавить вручную по URL. + - **Два уровня включения модуля:** (1) `SkipModules`/manifest — модуль скомпилирован и работает на сервере; (2) `LampaWeb.initPlugins.` в `init.conf` — плагин попадает в список, который `/lampainit.js` добавляет клиенту Lampa (`Lampa.Plugins.add`). Без второго флага сервер отвечает, но пункт в Lampa не появится (так было с `dlna` — флаг `initPlugins.dlna` добавлен в init.conf). Дефолты флагов — в `current.conf` секция `LampaWeb.initPlugins`. + - **Магазин плагинов** в Lampa (Настройки → Плагины) читает `/extensions` → `LampaWeb/plugins/extensions.json` (каталог образа). Свои записи добавляются через override-файл в `modules/LampaWeb/plugins/extensions.json` (монтирован в compose). Ответ кешируется `Staticache` на диске: `cache/static//` — после правки удалить соответствующий файл (`grep -rl secuses cache/static/`) или весь каталог static, затем перезапросить. +5. Новые пользовательские модули класть в `mods//` (монтировать в `/lampac/mods/`), переопределения плагинов — `plugins/lampainit.js` → `/lampac/plugins/override/lampainit.js`. +6. Не раскрывать пароль из `passwd`, не коммитить его, не выводить в логи. +7. Не открывать порт 9118 в интернет без файрвола/reverse proxy; модули `DLNA`, `Tracks`, `Transcoding`, `GStreamer`, `Catalog` не предназначены для публичного доступа. +8. Образ пиннить по тегу при необходимости воспроизводимости (в compose сейчас `:latest`). + +## Структура контейнера (важные пути) + +```text +/lampac/ +├── init.conf # конфиг (смонтирован с хоста) +├── passwd # пароль root (смонтирован с хоста) +├── cache/ # кеш (смонтирован) +├── database/ # SQLite и бэкапы конфига (смонтирован) +├── mods/ # пользовательские модули (Roslyn компилирует .cs на лету) +├── module/ # встроенные модули образа +├── plugins/override/ # переопределения JS-плагинов +└── wwwroot/ # статика Lampa UI +``` + +Горячая перезагрузка: `init.conf` watcher каждую секунду; `mods/*.cs` перекомпилируются при изменении. + +## Troubleshooting + +- **Контейнер нестабилен / Chromium падает** — проверить `shm_size: 1024mb` в compose (обязательно для Playwright). +- **Не стартует после правки init.conf** — проверить JSON: `python3 -m json.tool config/init.conf`; бэкапы в `/lampac/database/backup/init/`. +- **Модуль не загрузился** — смотреть `docker compose logs lampac | grep -E "skip compilation|loaded module"`; для модулей с `enable: false` в образе проверить manifest-оверрайд и его монтирование в compose. +- **Tg-notify молчит** — нужен `bot_token` в секции `TelegramBot` init.conf (без него long polling не стартует, в логе предупреждение). +- **Занят порт 9118** — `lsof -i :9118` или сменить порт в `init.conf` (`listen.port`) и в `ports` compose-файла одновременно. +- **Сеть** — в compose нет фиксированной сети/subnet; используется дефолтная сеть проекта (`lampac_default`). +- **Обновление сломало конфиг** — свериться с https://github.com/lampac-nextgen/lampac/blob/main/config/example.init.conf (новые ключи добавляются в стартовый конфиг). diff --git a/README.md b/README.md new file mode 100644 index 0000000..8310a3c --- /dev/null +++ b/README.md @@ -0,0 +1,225 @@ +# Lampac NextGen — self-hosted backend для Lampa (Docker) + +Локальное развёртывание **[Lampac NextGen](https://github.com/lampac-nextgen/lampac)** — активного форка оригинального Lampac, чей основной репозиторий больше не поддерживается. + +## Почему этот форк + +Оригинальный Lampac (`Mirrowol/Lampac`) давно не обновляется. Из форков наибольшую популярность набрал **lampac-nextgen/lampac**: + +| Показатель | Значение | +| --- | --- | +| Репозиторий | https://github.com/lampac-nextgen/lampac | +| Stars / Forks | ~347 / ~80 (самый популярный форк Lampac) | +| Активность | ежедневные коммиты, релизы (последний `v1.61.2` — 30.09.2026) | +| Стек | ASP.NET Core, .NET 10, AGPL-3.0 | +| Docker-образ | `ghcr.io/lampac-nextgen/lampac` (amd64 + arm64) | +| Документация | https://docs.lampac.dev | +| Чат | https://t.me/LampacTalks/13998 | + +Что умеет: агрегация ссылок с 70+ VOD/аниме/18+ источников, встроенный TorrServer, DLNA, JacRed, транскодинг (GStreamer/FFmpeg), синхронизация закладок, хостинг Lampa UI, Telegram-уведомления, WAF и многое другое. + +## Структура проекта + +```text +Lampac/ +├── docker-compose.yaml # Единственный compose-файл (порт 9118) +├── config/ +│ ├── init.conf # Конфигурация сервера (JSON, hot-reload) +│ └── passwd # Пароль root (СЕКРЕТ, не коммитить) +├── modules/ # Overridе-файлы, монтируемые поверх файлов образа +│ ├── Tracks/manifest.json +│ ├── Music/manifest.json +│ ├── Tg-notify.bot/manifest.json +│ ├── AdminPanel/manifest.json +│ └── LampaWeb/plugins/extensions.json # каталог магазина плагинов (+DLNA) +├── cache/ # Кеш (монтируется в /lampac/cache) +├── database/ # SQLite-БД: Sync, TimeCode, SISI (→ /lampac/database) +├── dlna/ # Данные DLNA (медиа/превью, → /lampac/data/dlna) +├── README.md # Эта документация +├── AGENT.md # Инструкции для AI-агента +└── .gitignore +``` + +## Быстрый старт + +Требования: Docker 24+ с Compose v2 (проверка: `docker compose version`). + +```bash +# 1. Запуск +docker compose up -d + +# 2. Проверка +curl -fsS "http://localhost:9118/version?type=hash" # должен вернуть hash +curl -fsS -o /dev/null -w '%{http_code}\n' http://localhost:9118/online.js # 200 + +# 3. Логи / статус +docker compose logs -f lampac +docker compose ps +``` + +## Доступ + +| Сервис | URL | +| --- | --- | +| Веб-интерфейс (Lampa UI) | http://localhost:9118/ | +| Плагин Online для Lampa | http://localhost:9118/online.js | +| Плагин SISI (18+) | http://localhost:9118/sisi.js | +| Плагин DLNA для Lampa | http://localhost:9118/dlna.js | +| AdminPanel (вход) | http://localhost:9118/adminpanel/auth | +| Проверка версии | http://localhost:9118/version?type=hash | + +Чтобы подключить сервер к Lampa: откройте Lampa → Настройки → «Другие сервисы» (или вставьте адрес вручную) → `http://IP_МАШИНЫ:9118`. + +Для доступа с других устройств локальной сети используйте LAN-IP машины, например `http://192.168.x.x:9118` (порт уже проброшен на `0.0.0.0`). + +## Конфигурация + +### `config/init.conf` + +Основной конфиг (JSON). **Перечитывается автоматически без перезапуска** контейнера (watcher каждую секунду, бэкапы — внутри контейнера в `/lampac/database/backup/init/`). После правки достаточно сохранить файл. + +Ключевые разделы: + +```jsonc +{ + "listen": { "ip": "0.0.0.0", "port": 9118, "scheme": "http" }, + "BaseModule": { + "SkipModules": [/* выключенные модули, см. ниже */] + }, + "LampaWeb": { "initPlugins": { "dlna": true } }, // попадание плагина в список клиента Lampa + "TorrServer": { "enable": true, "tsport": 9085, "releases": "latest" }, + "TelegramBot": { "enable": true, "bot_token": "", "lampac_host": "http://127.0.0.1:9118" }, + "chromium": { "enable": true }, // Playwright для обхода JS-защит + "online": { "name": "Lampac NextGen" }, + "sisi": { "NextHUB": true } +} +``` + +### Текущий набор модулей + +**Выключены** (`BaseModule.SkipModules`): `OnlineAnime`, `OnlineUKR`, `OnlinePaid`, `OnlineGEO`, `Transcoding`, `WebLog`. + +**Включены дополнительно к стартовому набору:** + +- `Catalog`, `JacRed`, `Sync` (вместе с `Storage`, `SyncEvents`, `TimeCode`), `TorrServer`, `DLNA`, `SISI` — убраны из `SkipModules`. +- `Tracks`, `Music`, `Tg-notify.bot`, `AdminPanel` — включены через manifest-оверрайды в `modules/*/manifest.json` (в образе у них `enable: false`; файлы монтируются поверх `/lampac/module//manifest.json`). + +Чтобы выключить/включить любой другой модуль — добавьте или уберите его имя в `SkipModules` (имя = имя папки в `/lampac/module/`, включая группы вроде `OnlineAnime`). Изменение применяется после `docker compose restart lampac` (SkipModules не hot-reload). Убрать из списка группу `Sync` целиком отключит и `TimeCode`/`Storage`/`SyncEvents`. + +Список всех модулей и маршрутов: https://docs.lampac.dev/modules/overview + +### TorrServer + +Включён (`TorrServer` в `init.conf`, бинарник сам скачивается с GitHub в `/lampac/data/ts/`). Доступ **только из локальной сети**: + +- внутренний порт TorrServer `9085` **не проброшен на хост** — снаружи он недоступен; +- внешний доступ идёт только через прокси `http://LAN_IP:9118/ts/` (порт 9118 в compose); +- из интернета сервер не доступен, пока порт 9118 закрыт файрволом/роутером (см. «Безопасность»). + +Пароль (`tspass`) генерируется при старте; Web-UI — `http://LAN_IP:9118/ts/`. + +### Tg-notify (Telegram-бот) + +Модуль `Tg-notify.bot` загружен, но long polling не стартует, пока не задан токен: впишите `bot_token` (от [@BotFather](https://t.me/BotFather)) в секцию `TelegramBot` файла `init.conf` — конфиг подхватится автоматически. Опционально: `tmdb_api_key`, `trakt_client_id`, `kp_api_key` (описание полей — в README модуля). + +### DLNA в интерфейсе Lampa + +Чтобы плагин DLNA появился в Lampa, нужно две вещи: + +1. **Модуль** загружен (уже включён: `loaded module: DLNA`). +2. **Флаг `LampaWeb.initPlugins.dlna`** в `init.conf` — именно он решает, попадёт ли DLNA в список плагинов, который Lampac отдаёт клиенту (`/lampainit.js`). Сейчас выставлен `true`; без него Lampa плагин не увидит (модуль работает, а пункт в меню не появляется). + +```jsonc +"LampaWeb": { "initPlugins": { "dlna": true } } +``` + +Аналогично включаются флаги `tracks`, `catalog`, `dorama`, `sync`, `backup`, `watch_together` и др. (список — `LampaWeb/Models/InitPlugins.cs`, дефолты — в `current.conf`). + +После правки перезагрузите страницу Lampa — `lampainit.js` сам добавит плагин (`Lampa.Plugins.add`) и он появится в Настройки → Плагины (со статусом включён). Ручное добавление по ссылке тоже работает: `http://IP_МАШИНЫ:9118/dlna.js`. Прямой UI модуля — `http://IP_МАШИНЫ:9118/dlna`. + +**В магазине плагинов** (Настройки → Плагины/«Магазин») каталог отдаётся из `/extensions` — файла `LampaWeb/plugins/extensions.json` внутри образа, где DLNA по умолчанию нет. Добавлена запись через override: `modules/LampaWeb/plugins/extensions.json` (секция «Lampac» в начале каталога) монтируется поверх образного файла. Магазин кешируется (`Staticache`) — после правки этого файла кеш надо сбросить: удалить `cache/static/63/*` (каталог по хешу URL) или перезапустить контейнер. + +### AdminPanel + +Веб-админка Lampac: правка `init.conf`/`current.conf`, пользователи `users.json`. + +- Вход: `http://IP_МАШИНЫ:9118/adminpanel/auth` — пароль из `config/passwd` (cookie `accspasswd`, живёт 180 дней). +- Панель: `http://IP_МАШИНЫ:9118/adminpanel` (без входа — 302 на страницу auth). +- Доступ к админке не открывайте в интернет без защиты — см. README модуля AdminPanel. + +### `config/passwd` + +Пароль учётной записи `root` в одну строку (используется для служебных функций и WebLog). Сгенерирован при установке; для смены отредактируйте файл и перезапустите контейнер: `docker compose restart lampac`. + +## Обновление + +```bash +docker compose pull +docker compose up -d +``` + +Данные (`init.conf`, `passwd`, `cache/`, `database/`, `modules/`, `dlna/`) переживают обновление, т.к. смонтированы томами. + +## Перенос на другой сервер + +Игнорируемые пути (`.gitignore`): `config/passwd`, `cache/`, `database/`, `dlna/`, `.DS_Store`. + +**Копировать обязательно:** + +```bash +docker-compose.yaml +config/init.conf # вся конфигурация +config/passwd # СЕКРЕТ — переносить вне git (scp/rsync) +modules/ # override-файлы (manifest ×4, extensions.json) +README.md AGENT.md .gitignore +``` + +**Копировать по желанию** (данные пользователя, иначе создадутся заново): + +```bash +database/ # закладки Sync, позиции TimeCode, SISI, библиотека Music +dlna/ # медиа/превью DLNA +``` + +**Не копировать** — регенерируется автоматически: `cache/`, содержимое `/lampac/data` внутри контейнера (GeoLite2, ffmpeg/ffprobe, бинарник TorrServer, Lampa UI). + +Порядок переноса: скопировать файлы → `docker compose up -d` → health-check: `curl "http://localhost:9118/version?type=hash"`. Порт 9118 и пути в compose относительные — правок не требуется. + +## Полезные команды + +```bash +docker compose restart lampac # перезапуск +docker compose stop lampac # остановить +docker compose down # остановить и удалить контейнер (тома сохраняются) +docker compose logs -f --tail 100 lampac # логи +docker compose exec lampac sh # шелл внутри контейнера +docker compose pull && docker compose up -d # обновление до свежего latest +``` + +## Безопасность + +- Порт 9118 проброшен на все интерфейсы — при выходе в интернет закройте его файрволом или поднимите reverse proxy с аутентификацией. Внутренний порт TorrServer (9085) не проброшен вовсе: он доступен только контейнеру, внешний доступ к TorrServer идёт исключительно через `/ts/` на 9118. +- Модули `DLNA`, `Tracks`, `Transcoding`, `GStreamer`, `Catalog` не экранируют входящие запросы — не открывайте их публично без защиты. +- `config/passwd` содержит секрет — файл добавлен в `.gitignore`. + +## Git-репозиторий + +Код проекта хранится в Gitea: `ssh://git@gitea.prodik.ru:222/prodik/lampac.git` (ветка `main`; ветка `synology` — старая, не используется). + +```bash +git remote -v # origin должен указывать на этот репозиторий +git add -A # секреты/данные не попадут (.gitignore) +git commit -m "описание" +git push origin main +``` + +В git попадают только: `docker-compose.yaml`, `config/init.conf`, `modules/**`, `README.md`, `AGENT.md`, `.gitignore`. Секреты (`passwd`), `cache/`, `database/`, `dlna/` — в `.gitignore`. + +## Ссылки + +- Репозиторий форка: https://github.com/lampac-nextgen/lampac +- Документация: https://docs.lampac.dev +- Быстрый старт: https://docs.lampac.dev/quickstart +- Docker: https://docs.lampac.dev/deployment/docker +- Конфигурация: https://docs.lampac.dev/configuration/overview +- Релизы: https://github.com/lampac-nextgen/lampac/releases diff --git a/config/init.conf b/config/init.conf new file mode 100644 index 0000000..f31641f --- /dev/null +++ b/config/init.conf @@ -0,0 +1,54 @@ +{ + "listen": { + "version": true, + "ip": "0.0.0.0", + "port": 9118, + "scheme": "http", + "localhost": "127.0.0.1" + }, + "BaseModule": { + "SkipModules": [ + "OnlineAnime", + "OnlineUKR", + "OnlinePaid", + "OnlineGEO", + "Transcoding" + ] + }, + "TorrServer": { + "enable": true, + "tsport": 9085, + "releases": "latest" + }, + "TelegramBot": { + "enable": true, + "bot_token": "", + "lampac_host": "http://127.0.0.1:9118" + }, + "LampaWeb": { + "initPlugins": { + "dlna": true + } + }, + "chromium": { + "enable": true, + "executablePath": "/usr/bin/chromium" + }, + "openstat": { + "enable": true + }, + "online": { + "name": "Lampac NextGen", + "spiderName": "Lampac NextGen", + "version": true, + "btn_priority_forced": true + }, + "sisi": { + "lgbt": false, + "spider": false, + "NextHUB": true, + "history": { + "enable": false + } + } +} diff --git a/configs/init.conf b/configs/init.conf deleted file mode 100644 index edd9190..0000000 --- a/configs/init.conf +++ /dev/null @@ -1,62 +0,0 @@ -{ - //"listenip": "127.0.0.1", // nginx - "listenport": 9118, - "pirate_store": true, // Плагины - "multiaccess": true, // Многопользовательский режим > 100 пользователей - "apikey": "gsu53it69rg", // ключ к jacred - "puppeteer": { - "keepopen": true - }, - "storage": { // хранилище для синхронизации, бекапа - "enable": true - }, - "LampaWeb": { - "tree": "8e721c9f465f3392ec075a80e406613c873b0145", // Версия https://github.com/yumata/lampa/tree/8e721c9f465f3392ec075a80e406613c873b0145 - "appReplace": { - - // Расширенные закладки - "checkPremium\\(\\) \\{": "checkPremium() { return 1;", - - // Убираем кнопку добавить комментарий - "this.add = function \\(\\) \\{": "this.add = function () { return;", - - // Убираем подписки cub на озвучку/персону - "full-start__button selector button--subscribe": "full-start__button selector button--subscribe hide", - - // Загружаем локальный плагин vast - "\\[[^\n\r]+'/plugin/vast'": "['{localhost}/vast.js'", - } - }, - "online": { - "component": "huyampa", - "name": "HuYampa" - }, - "accsdb": { - "enable": true, - "maxip_hour": 15, - "maxrequest_hour": 300, - "maxlock_day": 3, - "blocked_hour": 36, - "denyGroupMesage": "У вас нет прав для просмотра этой страницы", - "expiresMesage": "Время доступа для {account_email} истекло в {expires}", // в {account_email} указан пароль/uid/token/cub_email - "users": [ - { - "id": "prodik.sun@gmail.com", - "expires": "2040-10-17T00:00:00", - "group": 1, - "params": { "имя": Prodik - "adult": true - } - }, - { - "id": "2222", - "expires": "2040-10-17T00:00:00", - "params": { "имя": Prodik-test - "adult": false - } - } - ], - "Filmix": { - "group": 1 // балансер доступен пользователю 123456 - } -} \ No newline at end of file diff --git a/configs/manifest.json b/configs/manifest.json deleted file mode 100644 index 5451ef5..0000000 --- a/configs/manifest.json +++ /dev/null @@ -1 +0,0 @@ -[{"enable":true,"dll":"Online.dll"},{"enable":true,"dll":"SISI.dll"},{"enable":false,"dll":"DLNA.dll"},{"enable":true,"initspace":"Tracks.ModInit","dll":"Tracks.dll"},{"enable":false,"initspace":"TorrServer.ModInit","dll":"TorrServer.dll"}] diff --git a/configs/sisi.js b/configs/sisi.js deleted file mode 100644 index fd43075..0000000 --- a/configs/sisi.js +++ /dev/null @@ -1,982 +0,0 @@ -(function() { - 'use strict'; - - var Defined = { - use_api: 'lampac', - localhost: '{localhost}/sisi', - vip_site: '', - framework: '' - }; - - var luid = Lampa.Storage.get('lampac_unic_id', ''); - if (!luid) { - luid = Lampa.Utils.uid(8).toLowerCase(); - Lampa.Storage.set('lampac_unic_id', luid); - } - - Lampa.Lang.add({ - lampac_sisiname: { - ru: 'Клубничка', - en: 'Strawberry', - uk: 'Полуничка', - zh: '草莓' - } - }); - - var network = new Lampa.Reguest(); - var preview_timer, preview_video; - - function sourceTitle(title) { - return Lampa.Utils.capitalizeFirstLetter(title.split('.')[0]); - } - - function isVIP(element) { - return /vip.mp4/.test(element.video); - } - - if (!window.rch) { - Lampa.Utils.putScript(["{localhost}/invc-rch.js"], function() {}, false, function() { - if (!window.rch.startTypeInvoke) - window.rch.typeInvoke('{localhost}', function() {}); - }, true); - } - - var hubConnection; - var hub_timer - - function rchInvoke(json, call) { - if (hubConnection) { - hubConnection.stop(); - hubConnection = null; - } - hubConnection = new signalR.HubConnectionBuilder().withUrl(json.ws).build(); - hubConnection.start().then(function() { - window.rch.Registry(json.result, hubConnection, function() { - call(); - }); - })["catch"](function(err) { - //return console.error(err.toString()); - }); - if (json.keepalive > 0) { - hub_timer = setTimeout(function() { - hubConnection.stop(); - hubConnection = null; - }, 1000 * json.keepalive); - } - } - - function rchRun(json, call) { - if (typeof signalR == 'undefined') { - Lampa.Utils.putScript(["{localhost}/signalr-6.0.25_es5.js"], function() {}, false, function() { - rchInvoke(json, call); - }, true); - } else { - rchInvoke(json, call); - } - } - - function modal() { - var id = Lampa.Storage.get('sisi_unic_id', '').toLowerCase(); - var controller = Lampa.Controller.enabled().name; - var content = "
\n
\u042D\u0442\u043E \u0432\u0438\u0434\u0435\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u0441 VIP \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u043E\u0439. \u0414\u043B\u044F \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F VIP \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0438, \u043F\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043D\u0430 \u0441\u0430\u0439\u0442 \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0443\u043A\u0430\u0437\u0430\u043D \u043D\u0438\u0436\u0435 \u0438 \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u0432\u0430\u0448 ID
\n
\n
\n \u0421\u0430\u0439\u0442
\n ".concat(Defined.vip_site, "\n
\n\n
\n \u0412\u0430\u0448 ID
\n ").concat(id, "\n
\n
\n
"); - Lampa.Modal.open({ - title: 'VIP Контент', - html: $(content), - size: 'medium', - onBack: function onBack() { - Lampa.Modal.close(); - Lampa.Controller.toggle(controller); - } - }); - } - - function qualityDefault(qualitys) { - var preferably = Lampa.Storage.get('video_quality_default', '1080') + 'p'; - var url; - - if (qualitys) { - for (var q in qualitys) { - if (q.indexOf(preferably) == 0) url = qualitys[q]; - } - - if (!url) url = qualitys[Lampa.Arrays.getKeys(qualitys)[0]]; - } - - return url; - } - - function play(element) { - var controller_enabled = Lampa.Controller.enabled().name; - - if (isVIP(element)) { - return modal(); - } - - if (element.json) { - Lampa.Loading.start(function() { - network.clear(); - Lampa.Loading.stop(); - }); - Api.account(element.video + '&json=true'); - Api.qualitys(element.video, function(data) { - if (data.error) { - Lampa.Noty.show(Lampa.Lang.translate('torrent_parser_nofiles')); - Lampa.Loading.stop(); - return; - } - - var qualitys = data.qualitys || data; - var recomends = data.recomends || []; - Lampa.Loading.stop(); - - for (var i in qualitys) { - qualitys[i] = Api.account(qualitys[i], true); - } - - var video = { - title: element.name, - url: Api.account(qualityDefault(qualitys), true), - url_reserve: data.qualitys_proxy ? Api.account(qualityDefault(data.qualitys_proxy), true) : false, - quality: qualitys - }; - Lampa.Player.play(video); - - if (recomends.length) { - recomends.forEach(function(a) { - a.title = Lampa.Utils.shortText(a.name, 50); - a.icon = ''; - a.template = 'selectbox_icon'; - - a.url = function(call) { - if (a.json) { - Api.qualitys(a.video, function(data) { - a.quality = data.qualitys; - a.url = Api.account(qualityDefault(data.qualitys), true); - if (data.qualitys_proxy) a.url_reserve = Api.account(qualityDefault(data.qualitys_proxy), true); - call(); - }); - } else { - a.url = a.video; - call(); - } - }; - }); - Lampa.Player.playlist(recomends); - } else { - Lampa.Player.playlist([video]); - } - - Lampa.Player.callback(function() { - Lampa.Controller.toggle(controller_enabled); - }); - }, function() { - Lampa.Noty.show(Lampa.Lang.translate('torrent_parser_nofiles')); - Lampa.Loading.stop(); - }); - } else { - if (element.qualitys) { - for (var i in element.qualitys) { - element.qualitys[i] = Api.account(element.qualitys[i], true); - } - } - - var video = { - title: element.name, - url: Api.account(qualityDefault(element.qualitys) || element.video, true), - url_reserve: Api.account(qualityDefault(element.qualitys_proxy) || element.video_reserve || '', true), - quality: element.qualitys - }; - Lampa.Player.play(video); - Lampa.Player.playlist([video]); - Lampa.Player.callback(function() { - Lampa.Controller.toggle(controller_enabled); - }); - } - } - - function fixCards(json) { - json.forEach(function(m) { - m.background_image = m.picture; - m.poster = m.picture; - m.img = m.picture; - m.name = Lampa.Utils.capitalizeFirstLetter(m.name).replace(/\&(.*?);/g, ''); - }); - } - - function hidePreview() { - clearTimeout(preview_timer); - - if (preview_video) { - preview_video.find('video').pause(); - preview_video.addClass('hide'); - preview_video = false; - } - } - - function preview(target, element) { - hidePreview(); - preview_timer = setTimeout(function() { - if (!element.preview || !Lampa.Storage.field('sisi_preview')) return; - var video = target.find('video'); - var container = target.find('.sisi-video-preview'); - - if (!video) { - video = document.createElement('video'); - container = document.createElement('div'); - container.addClass('sisi-video-preview'); - container.style.position = 'absolute'; - container.style.width = '100%'; - container.style.height = '100%'; - container.style.left = '0'; - container.style.top = '0'; - container.style.overflow = 'hidden'; - container.style.borderRadius = '1em'; - video.style.position = 'absolute'; - video.style.width = '100%'; - video.style.height = '100%'; - video.style.left = '0'; - video.style.top = '0'; - video.style.objectFit = 'cover'; - container.append(video); - target.find('.card__view').append(container); - video.src = element.preview; // 'https://thumb-v4.xhcdn.com/a/og0z25CtaTIZXgzkV7qJ8Q/023/463/094/526x298.44.t.webm' - - video.load(); - } - - preview_video = container; - video.play(); - container.removeClass('hide'); - }, 1500); - } - - function fixList(list) { - list.forEach(function(a) { - if (!a.quality && a.time) a.quality = a.time; - }); - return list; - } - - function menu$2(target, card_data) { - if (!card_data.bookmark) return; - var cm = [{ - title: !card_data.bookmark.uid ? 'В закладки' : 'Удалить из закладок' - }]; - - if (card_data.related) { - cm.push({ - title: 'Похожие', - related: true - }); - } - - if (card_data.model) { - cm.push({ - title: card_data.model.name, - model: true - }); - } - - Lampa.Select.show({ - title: 'Меню', - items: cm, - onSelect: function onSelect(m) { - if (m.model) { - Lampa.Activity.push({ - url: Defined.localhost.replace('/sisi', '') + '/' + card_data.model.uri, - title: 'Модель - ' + card_data.model.name, - component: 'sisi_view_' + Defined.use_api, - page: 1 - }); - } else if (m.related) { - Lampa.Activity.push({ - url: card_data.video + '&related=true', - title: 'Похожие - ' + card_data.title, - component: 'sisi_view_' + Defined.use_api, - page: 1 - }); - } else { - Api.bookmark(card_data, !card_data.bookmark.uid, function(status) { - Lampa.Noty.show('Успешно'); - }); - Lampa.Controller.toggle('content'); - } - }, - onBack: function onBack() { - Lampa.Controller.toggle('content'); - } - }); - } - - var Utils = { - sourceTitle: sourceTitle, - play: play, - fixCards: fixCards, - isVIP: isVIP, - preview: preview, - hidePreview: hidePreview, - fixList: fixList, - menu: menu$2 - }; - - var menu$1; - - function ApiPWA() { - var _this = this; - - var network = new Lampa.Reguest(); - - this.menu = function(success, error) { - if (menu$1) return success(menu$1); - DotNet.invokeMethodAsync("JinEnergy", 'sisi', '').then(function(data) { - if (data) { - menu$1 = data; - success(menu$1); - } else { - error(data.msg); - } - })["catch"](function() { - console.log('Sisi', 'no load menu'); - error(); - }); - }; - - this.view = function(params, success, error) { - var u = this.account(Lampa.Utils.addUrlComponent(params.url, 'pg=' + (params.page || 1))); - DotNet.invokeMethodAsync("JinEnergy", u.path, u.query).then(function(json) { - if (json.list) { - json.results = Utils.fixList(json.list); - json.collection = true; - json.total_pages = json.total_pages || 30; - Utils.fixCards(json.results); - delete json.list; - success(json); - } else { - error(); - } - })["catch"](function() { - console.log('Sisi', 'no load', u.path + '+' + u.query); - error(); - }); - }; - - this.bookmark = function(element, add, call) { - call(true); - }; - - this.account = function(u, join) { - if (join) { - if (Defined.use_api == 'lampac' && u.indexOf(Defined.localhost.replace('/sisi', '')) == -1) return u; - } - - var unic_id = Lampa.Storage.get('sisi_unic_id', ''); - var uid = Lampa.Storage.get('lampac_unic_id', ''); - var email = Lampa.Storage.get('account', {}).email; - - if (u.indexOf('box_mac=') == -1) u = Lampa.Utils.addUrlComponent(u, 'box_mac=' + unic_id); - - if (email) { - if (u.indexOf('account_email=') == -1) u = Lampa.Utils.addUrlComponent(u, 'account_email=' + encodeURIComponent(email)); - } - - if (uid) { - if (u.indexOf('uid=') == -1) u = Lampa.Utils.addUrlComponent(u, 'uid=' + encodeURIComponent(uid)); - } - - if (u.indexOf('token=') == -1) { - var token = '{token}'; - if (token != '') u = Lampa.Utils.addUrlComponent(u, 'token={token}'); - } - - if (join) return u; - return { - path: u.split('?')[0], - query: u.split('?')[1] - }; - }; - - this.playlist = function(add_url_query, oncomplite, error) { - var load = function load() { - var status = new Lampa.Status(menu$1.length); - - status.onComplite = function(data) { - var items = []; - menu$1.forEach(function(m) { - if (data[m.playlist_url] && data[m.playlist_url].results.length) items.push(data[m.playlist_url]); - }); - if (items.length) oncomplite(items); - else error(); - }; - - menu$1.forEach(function(m, i) { - var u = _this.account(m.playlist_url + add_url_query); - - var b = false; - var w = setTimeout(function() { - b = true; - status.error(); - }, 1000 * 8); - DotNet.invokeMethodAsync("JinEnergy", u.path, u.query).then(function(json) { - clearTimeout(w); - if (b) return; - - if (json.list) { - json.title = Utils.sourceTitle(m.title); - json.results = Utils.fixList(json.list); - json.url = m.playlist_url; - json.collection = true; - json.line_type = 'none'; - json.card_events = { - onMenu: Utils.menu, - onEnter: function onEnter(card, element) { - Utils.hidePreview(); - Utils.play(element); - } - }; - Utils.fixCards(json.results); - delete json.list; - status.append(m.playlist_url, json); - } else { - status.error(); - } - })["catch"](function() { - console.log('Sisi', 'no load', u.path + '+' + u.query); - clearTimeout(w); - status.error(); - }); - }); - }; - - if (menu$1) load(); - else { - _this.menu(load, error); - } - }; - - this.main = function(params, oncomplite, error) { - this.playlist('', oncomplite, error); - }; - - this.search = function(params, oncomplite, error) { - this.playlist('?search=' + encodeURIComponent(params.query), oncomplite, error); - }; - - this.qualitys = function(video_url, oncomplite, error) { - var u = this.account(video_url + '&json=true'); - DotNet.invokeMethodAsync("JinEnergy", u.path, u.query).then(oncomplite)["catch"](function(e) { - console.log('Sisi', 'no load', u.path + '+' + u.query); - error(); - }); - }; - - this.clear = function() { - network.clear(); - }; - } - - var ApiPWA$1 = new ApiPWA(); - - var menu; - - function ApiHttp() { - var _this = this; - - var network = new Lampa.Reguest(); - - this.menu = function(success, error) { - if (menu) return success(menu); - network.silent(this.account(Defined.localhost)+'&rchtype='+(window.rch ? window.rch.type : ''), function(data) { - if (data.channels) { - menu = data.channels; - success(menu); - } else { - error(data.msg); - } - }, error); - }; - - this.view = function(params, success, error) { - var u = Lampa.Utils.addUrlComponent(params.url, 'pg=' + (params.page || 1)); - network.silent(this.account(u), function(json) { - if (json.rch) { - rchRun(json, function() { - _this.view(params, success, error) - }) - } else if (json.list) { - json.results = Utils.fixList(json.list); - json.collection = true; - json.total_pages = json.total_pages || 30; - Utils.fixCards(json.results); - delete json.list; - success(json); - } else { - error(); - } - }, error); - }; - - this.bookmark = function(element, add, call) { - var u = Defined.localhost + '/bookmark/' + (add ? 'add' : 'remove?id=' + element.bookmark.uid); - network.silent(this.account(u), function(e) { - call(true); - }, function() { - call(false); - }, JSON.stringify(element), { - headers: { - 'Content-Type': 'application/json' - } - }); - }; - - this.account = function(u) { - if (Defined.use_api == 'lampac' && u.indexOf(Defined.localhost.replace('/sisi', '')) == -1 && window.location.hostname !== 'localhost') return u; - - var unic_id = Lampa.Storage.get('sisi_unic_id', ''); - var uid = Lampa.Storage.get('lampac_unic_id', ''); - var email = Lampa.Storage.get('account', {}).email; - - if (u.indexOf('box_mac=') == -1) u = Lampa.Utils.addUrlComponent(u, 'box_mac=' + unic_id); - else u = u.replace(/box_mac=[^&]+/, 'box_mac=' + unic_id); - - if (email) { - if (u.indexOf('account_email=') == -1) u = Lampa.Utils.addUrlComponent(u, 'account_email=' + encodeURIComponent(email)); - else u = u.replace(/account_email=[^&]+/, 'account_email=' + encodeURIComponent(email)); - } - - if (uid) { - if (u.indexOf('uid=') == -1) u = Lampa.Utils.addUrlComponent(u, 'uid=' + encodeURIComponent(uid)); - else u = u.replace(/uid=[^&]+/, 'uid=' + encodeURIComponent(uid)); - } - - if (u.indexOf('token=') == -1) { - var token = '{token}'; - if (token != '') u = Lampa.Utils.addUrlComponent(u, 'token={token}'); - } - - return u; - }; - - this.playlist = function(add_url_query, oncomplite, error) { - var load = function load() { - var status = new Lampa.Status(menu.length); - - status.onComplite = function(data) { - var items = []; - menu.forEach(function(m) { - if (data[m.playlist_url] && data[m.playlist_url].results.length) items.push(data[m.playlist_url]); - }); - if (items.length) oncomplite(items); - else error(); - }; - - menu.forEach(function(m) { - function loadThis() { - network.silent(_this.account(m.playlist_url + add_url_query), function(json) { - if (json.rch) { - rchRun(json, function() { - loadThis() - }) - } else if (json.list) { - json.title = Utils.sourceTitle(m.title); - json.results = Utils.fixList(json.list); - json.url = m.playlist_url; - json.collection = true; - json.line_type = 'none'; - json.card_events = { - onMenu: Utils.menu, - onEnter: function onEnter(card, element) { - Utils.hidePreview(); - Utils.play(element); - } - }; - Utils.fixCards(json.results); - delete json.list; - status.append(m.playlist_url, json); - } else { - status.error(); - } - }, status.error.bind(status)); - } - - loadThis() - }); - }; - - if (menu) load(); - else { - _this.menu(load, error); - } - }; - - this.main = function(params, oncomplite, error) { - this.playlist('', oncomplite, error); - }; - - this.search = function(params, oncomplite, error) { - this.playlist('?search=' + encodeURIComponent(params.query), oncomplite, error); - }; - - this.qualitys = function(video_url, oncomplite, error) { - network.silent(this.account(video_url + '&json=true'), function(json) { - if (json.rch) { - rchRun(json, function() { - _this.qualitys(video_url, oncomplite, error) - }) - } else oncomplite(json) - }, error); - }; - - this.clear = function() { - network.clear(); - }; - } - - var ApiHttp$1 = new ApiHttp(); - - var Api = ApiHttp$1; //Defined.use_api == 'pwa' ? ApiPWA$1 : ApiHttp$1; - - function Sisi(object) { - var comp = new Lampa.InteractionMain(object); - - comp.create = function() { - this.activity.loader(true); - Api.main(object, this.build.bind(this), this.empty.bind(this)); - return this.render(); - }; - - comp.empty = function(er) { - var _this = this; - - var empty = new Lampa.Empty({ - descr: typeof er == 'string' ? er : Lampa.Lang.translate('empty_text_two') - }); - Lampa.Activity.all().forEach(function(active) { - if (_this.activity == active.activity) active.activity.render().find('.activity__body > div')[0].appendChild(empty.render(true)); - }); - this.start = empty.start; - this.activity.loader(false); - this.activity.toggle(); - }; - - comp.onMore = function(data) { - Lampa.Activity.push({ - url: data.url, - title: data.title, - component: 'sisi_view_' + Defined.use_api, - page: 2 - }); - }; - - comp.onAppend = function(line, element) { - line.onAppend = function(card) { - var origFocus = card.onFocus; - - card.onFocus = function(target, card_data) { - origFocus(target, card_data); - Utils.preview(target, card_data); - }; - }; - }; - - return comp; - } - - function View(object) { - var comp = new Lampa.InteractionCategory(object); - var menu; - - comp.create = function() { - var _this = this; - - this.activity.loader(true); - Api.view(object, function(data) { - menu = data.menu; - - if (menu) { - menu.forEach(function(m) { - var spl = m.title.split(':'); - m.title = spl[0].trim(); - if (spl[1]) m.subtitle = Lampa.Utils.capitalizeFirstLetter(spl[1].trim().replace(/all/i, 'Любой')); - - if (m.submenu) { - m.submenu.forEach(function(s) { - s.title = Lampa.Utils.capitalizeFirstLetter(s.title.trim().replace(/all/i, 'Любой')); - }); - } - }); - } - - _this.build(data); - - if (!data.results.length && object.url.indexOf('/bookmarks')) { - Lampa.Noty.show('Удерживайте ОК на видео для добавления в закладки.', { - time: 10000 - }); - } - }, this.empty.bind(this)); - }; - - comp.nextPageReuest = function(object, resolve, reject) { - Api.view(object, resolve.bind(this), reject.bind(this)); - }; - - comp.cardRender = function(object, element, card) { - card.onMenu = function(target, card_data) { - return Utils.menu(target, card_data); - }; - - card.onEnter = function() { - Utils.hidePreview(); - Utils.play(element); - }; - - var origFocus = card.onFocus; - - card.onFocus = function(target, card_data) { - origFocus(target, card_data); - Utils.preview(target, element); - }; - }; - - comp.filter = function() { - if (menu) { - var items = menu.filter(function(m) { - return !m.search_on; - }); - var search = menu.find(function(m) { - return m.search_on; - }); - if (!search) search = object.search_start; - if (!items.length && !search) return; - - if (search) { - Lampa.Arrays.insert(items, 0, { - title: 'Найти', - onSelect: function onSelect() { - Lampa.Input.edit({ - title: 'Поиск', - value: '', - free: true, - nosave: true - }, function(value) { - Lampa.Controller.toggle('content'); - - if (value) { - Lampa.Activity.push({ - url: search.playlist_url + '?search=' + encodeURIComponent(value), - title: 'Поиск - ' + value, - component: 'sisi_view_' + Defined.use_api, - search_start: search, - page: 1 - }); - } - }); - } - }); - } - - Lampa.Select.show({ - title: 'Фильтр', - items: items, - onBack: function onBack() { - Lampa.Controller.toggle('content'); - }, - onSelect: function onSelect(a) { - menu.forEach(function(m) { - m.selected = m == a ? true : false; - }); - - if (a.submenu) { - Lampa.Select.show({ - title: a.title, - items: a.submenu, - onBack: function onBack() { - comp.filter(); - }, - onSelect: function onSelect(b) { - Lampa.Activity.push({ - title: object.title, - url: b.playlist_url, - component: 'sisi_view_' + Defined.use_api, - page: 1 - }); - } - }); - } else { - comp.filter(); - } - } - }); - } - }; - - comp.onRight = comp.filter.bind(comp); - return comp; - } - - function startPlugin() { - window['plugin_sisi_' + Defined.use_api + '_ready'] = true; - var unic_id = Lampa.Storage.get('sisi_unic_id', ''); - - if (!unic_id) { - unic_id = Lampa.Utils.uid(8).toLowerCase(); - Lampa.Storage.set('sisi_unic_id', unic_id); - } - - Lampa.Component.add('sisi_' + Defined.use_api, Sisi); - Lampa.Component.add('sisi_view_' + Defined.use_api, View); //Lampa.Search.addSource(Search) - - function addFilter() { - var activi; - var timer; - var button = $("
\n \n \n \n \n \n \n \n \n \n
"); - button.hide().on('hover:enter', function() { - if (activi) { - activi.activity.component().filter(); - } - }); - $('.head .open--search').after(button); - Lampa.Listener.follow('activity', function(e) { - if (e.type == 'start') activi = e.object; - clearTimeout(timer); - timer = setTimeout(function() { - if (activi) { - if (activi.component !== 'sisi_view_' + Defined.use_api) { - button.hide(); - activi = false; - } - } - }, 1000); - - if (e.type == 'start' && e.component == 'sisi_view_' + Defined.use_api) { - button.show(); - activi = e.object; - } - }); - } - - function addSettings() { - if (window.sisi_add_param_ready) return; - window.sisi_add_param_ready = true; - Lampa.SettingsApi.addComponent({ - component: 'sisi', - name: Lampa.Lang.translate('lampac_sisiname'), - icon: "" - }); - Lampa.SettingsApi.addParam({ - component: 'sisi', - param: { - name: 'sisi_preview', - type: 'trigger', - values: '', - "default": true - }, - field: { - name: 'Предпросмотр', - description: 'Показывать предпросмотр при наведение на карточку' - }, - onRender: function onRender(item) {} - }); - } - - function add() { - var button = $("
  • \n
    \n \n
    \n
    " + Lampa.Lang.translate('lampac_sisiname') + "
    \n
  • "); - - if (Defined.use_api == 'pwa') { - var pw = $('
    p
    '); - pw.css({ - position: 'absolute', - right: '-0.3em', - bottom: '-0.5em', - backgroundColor: '#fff', - color: '#000', - padding: '0.2em 0.4em', - fontSize: '0.6em', - borderRadius: '0.5em', - fontWeight: 900, - textTransform: 'uppercase' - }); - button.find('.menu__ico').css('position', 'relative').append(pw); - } - - button.on('hover:enter', function() { - Lampa.ParentalControl.query(function() { - Api.menu(function(data) { - // let items = [{ - // title: 'Все' - // }] - var items = []; - - if ({push_all} && (Defined.use_api == 'lampac' || Lampa.Platform.is('android'))) { - items.push({ - title: 'Все' - }); - } - - data.forEach(function(a) { - a.title = Utils.sourceTitle(a.title); - }); - items = items.concat(data); - Lampa.Select.show({ - title: 'Сайты', - items: items, - onSelect: function onSelect(a) { - if (a.playlist_url) { - Lampa.Activity.push({ - url: a.playlist_url, - title: a.title, - component: 'sisi_view_' + Defined.use_api, - page: 1 - }); - } else { - Lampa.Activity.push({ - url: '', - title: Lampa.Lang.translate('lampac_sisiname'), - component: 'sisi_' + Defined.use_api, - page: 1 - }); - } - }, - onBack: function onBack() { - Lampa.Controller.toggle('menu'); - } - }); - }, function() {}); - }, function() {}) - }); - $('.menu .menu__list').eq(0).append(button); - addFilter(); - addSettings(); - } - - if (window.appready) add(); - else { - Lampa.Listener.follow('app', function(e) { - if (e.type == 'ready') add(); - }); - } - } - - if (!window['plugin_sisi_' + Defined.use_api + '_ready']) { - startPlugin(); - /* - if(Defined.use_api == 'pwa'){ - let s = document.createElement('script') - s.onload = function(){ - Blazor.start({ - loadBootResource: function (type, name, defaultUri, integrity) { - return Defined.framework+'/_framework/' + name - } - }) - startPlugin() - } - s.setAttribute('autostart', 'false') - s.setAttribute('src', Defined.framework+'/_framework/blazor.webassembly.js') - - document.body.appendChild(s) - } - else startPlugin() - */ - } - -})(); \ No newline at end of file diff --git a/docker-compose-syn.yml b/docker-compose-syn.yml deleted file mode 100644 index b4dcda0..0000000 --- a/docker-compose-syn.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- -services: - - lampac: - image: immisterio/lampac:latest - container_name: lampac - restart: always - ports: - - 9118:9118 - volumes: - - /volume4/Torrents:/home/dlna - - /volume1/docker/lampac/plugins/extensions.json:/home/plugins/extensions.json - - /volume1/docker/lampac/sisi.js:/home/plugins/sisi.js - # - /volume1/docker/lampac/manifest.json:/home/module/manifest.json - - type: bind - source: /volume1/docker/lampac/configs/init.conf - target: /home/init.conf - read_only: true - \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..cf710c9 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,25 @@ +--- +name: lampac + +services: + lampac: + image: ghcr.io/lampac-nextgen/lampac:latest + container_name: lampac + ports: + - 9118:9118 + restart: unless-stopped + shm_size: 1024mb + logging: + options: + tag: "{{.Name}}" + volumes: + - ./config/passwd:/lampac/passwd + - ./config/init.conf:/lampac/init.conf + - ./cache:/lampac/cache + - ./database:/lampac/database + - ./modules/Tracks/manifest.json:/lampac/module/Tracks/manifest.json:ro + - ./modules/Music/manifest.json:/lampac/module/Music/manifest.json:ro + - ./modules/Tg-notify.bot/manifest.json:/lampac/module/Tg-notify.bot/manifest.json:ro + - ./modules/AdminPanel/manifest.json:/lampac/module/AdminPanel/manifest.json:ro + - ./modules/LampaWeb/plugins/extensions.json:/lampac/module/LampaWeb/plugins/extensions.json:ro + - ./dlna:/lampac/data/dlna diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 946ad49..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -services: - - lampac: - image: immisterio/lampac:latest - container_name: lampac - restart: always - ports: - - 9118:9118 - volumes: - # - /volume4/Torrents:/home/dlna - # - /volume1/docker/lampac/cache:/home/cache - - ./plugins/extensions.json:/home/plugins/extensions.json - - ./plugins/lampainit.my.js:/home/plugins/lampainit.my.js - - ./configs/sisi.js:/home/plugins/sisi.js - # - ./manifest.json:/home/module/manifest.json - - type: bind - source: ./configs/init.conf - target: /home/init.conf - read_only: true - \ No newline at end of file diff --git a/modules/AdminPanel/manifest.json b/modules/AdminPanel/manifest.json new file mode 100644 index 0000000..f7f0034 --- /dev/null +++ b/modules/AdminPanel/manifest.json @@ -0,0 +1,9 @@ +{ + "enable": true, + "dynamic": true, + "tree": [ + "AdminPanelController.cs", + "ConfigSectionGroups.cs", + "ModInit.cs" + ] +} diff --git a/modules/LampaWeb/plugins/extensions.json b/modules/LampaWeb/plugins/extensions.json new file mode 100644 index 0000000..b9745c6 --- /dev/null +++ b/modules/LampaWeb/plugins/extensions.json @@ -0,0 +1,355 @@ +{ + "secuses": true, + "results": [ + { + "title": "Lampac", + "results": [ + { + "name": "DLNA", + "author": "lampac", + "link": "{localhost}/dlna.js", + "descr": "Каталог раздач и стриминг на DLNA-устройства (модуль Lampac)", + "available_lampa": 1 + } + ] + }, + { + "title": "Популярные", + "results": [ + { + "name": "BwaRC", + "author": "bwa.ad", + "link": "http://bwa.ad/rc", + "descr": "Фильмы и сериалы в онлайн", + "available_lampa": 1 + }, + { + "name": "Онлайн Мод", + "author": "@t_anton", + "link": "https://nb557.github.io/plugins/online_mod.js", + "descr": "Фильмы и сериалы в онлайн.", + "available_lampa": 1 + }, + { + "name": "Телевидение by Skaz ", + "author": "@helpiptv", + "link": "http://skaz.tv/tv.js", + "descr": "Бесплатные каналы и 1500+ каналов по подписке, IPTV плейлисты @skaztv_bot", + "available_lampa": 1 + }, + { + "name": "MODS's", + "author": "@modss_group", + "link": "http://lampa.stream/modss", + "descr": "Фильмы и сериалы в онлайн. Плюс различные дополнения через меню настроек Modss", + "available_lampa": 1 + }, + { + "name": "Showy", + "author": "Showy", + "link": "http://showy.online/m.js", + "descr": "Фильмы и сериалы в онлайн", + "available_lampa": 1 + } + ], + "hpu": "best" + }, + { + "title": "Видео", + "results": [ + { + "name": "BwaRC", + "author": "bwa.ad", + "link": "http://bwa.ad/rc", + "descr": "Фильмы и сериалы в онлайн", + "available_lampa": 1 + }, + { + "name": "Онлайн Мод", + "author": "@t_anton", + "link": "https://nb557.github.io/plugins/online_mod.js", + "descr": "Фильмы и сериалы в онлайн", + "available_lampa": 1 + }, + { + "name": "Клубничка 18+", + "author": "bwa.ad", + "link": "http://bwa.ad/re", + "descr": "Онлайн просмотр контента для взрослых, больше 30 сайтов", + "available_lampa": 1 + }, + { + "name": "Xsena 18+", + "author": "xsena", + "link": "http://e.xsena.red", + "descr": "Онлайн просмотр контента для взрослых, больше 40 сайтов", + "available_lampa": 1 + }, + { + "name": "Filmix", + "author": "@lampa_land", + "link": "https://lampaplugins.github.io/store/fx.js", + "descr": "Фильмы и сериалы в онлайн", + "available_lampa": 1 + }, + { + "name": "Showy", + "author": "Showy", + "link": "http://showy.online/m.js", + "descr": "Фильмы и сериалы в онлайн", + "available_lampa": 1 + }, + { + "name": "MODS's", + "author": "@modss_group", + "link": "http://lampa.stream/modss", + "descr": "Фильмы и сериалы в онлайн. Плюс различные дополнения через меню настроек Modss", + "available_lampa": 1 + }, + { + "name": "Онлайн Stream", + "author": "", + "link": "http://arkmv.ru/vod", + "descr": "Онлайн", + "available_lampa": 1 + }, + { + "name": "Онлайн Stream 2", + "author": "", + "link": "http://llpp.in/v/vod.js", + "descr": "Онлайн", + "available_lampa": 1 + } + ], + "hpu": "video" + }, + { + "title": "Управление", + "results": [ + { + "name": "Подборки", + "author": "@lampa_land", + "link": "https://lampaplugins.github.io/store/p.js", + "descr": "Подборки от онлайн кинотеатров, мультсериалы и мультфильмы.", + "available_lampa": 1 + }, + { + "name": "Добавляет пункт \"Парсер\" в меню", + "author": "@lampa", + "link": "http://cub.best/plugin/etor", + "descr": "Плагин для ТВ, на которых Lampa установлена через официальные магазины LG Store и Tizen App Store. Включает в настройках отображение пунктов Парсер и Torrserver", + "available_lampa": 1 + }, + { + "name": "Публичные парсеры", + "author": "@lme", + "link": "{localhost}/plugins/pubtorr.js", + "descr": "Сборник публичных парсеров отображением статуса доступности", + "available_lampa": 1 + }, + { + "name": "Вторая кнопка Торренты", + "author": "@VitalikPVA", + "link": "{localhost}/plugins/torrents.js", + "descr": "Плагин добавляет вторую кнопку Торренты", + "available_lampa": 1 + }, + { + "name": "Горячие кнопки", + "author": "@nnmd", + "link": "{localhost}/plugins/hotkeys.js", + "descr": "Плагин вызывает меню плеера лампы по кнопкам пульта: 5 - плейлист, 8 - аудиодорожки, 0 - субтитры, channel+/- следующий/предыдущий файл в плейлисте", + "available_lampa": 1 + }, + { + "name": "Золотая Тема", + "author": "@BazZziliuS", + "link": "{localhost}/plugins/gold_theme.js", + "descr": "Плагин включает золотую тему", + "available_lampa": 1 + }, + { + "name": "Дополнительные категории", + "author": "@lme", + "link": "{localhost}/plugins/nc.js", + "descr": "Добавление категорий Мультфильмы, Netflix, Концерты, и прочее", + "available_lampa": 1 + }, + { + "name": "Тип управления", + "author": "@nemiroff", + "link": "{localhost}/plugins/select_weapon.js", + "descr": "Позволяет выбрать тип управления (Пульт без мышки, Пульт с мышью, Тачскрин), а так же сбросить тип управления выбранный ранее", + "available_lampa": 1 + }, + { + "name": "Старый стиль (Закладки, Нравится, Позже)", + "author": "@VitalikPVA", + "link": "{localhost}/plugins/want.js", + "descr": "Возвращает в главное меню старый стиль отображения пунктов (Закладки, Нравится, Позже)", + "available_lampa": 1 + }, + { + "name": "Сброс настроек субтитров", + "author": "@t_anton", + "link": "{localhost}/plugins/reset_subs.js", + "descr": "Сбрасывает настройки субтитров по умолчанию", + "available_lampa": 1 + }, + { + "name": "Мультфильмы", + "author": "@AndreyURL54", + "link": "{localhost}/plugins/mult.js", + "descr": "Заменяет пункт Аниме на Мульт", + "available_lampa": 1 + }, + { + "name": "Выключение тача", + "author": "@t_anton", + "link": "{localhost}/plugins/not_mobile.js", + "descr": "Выключает сенсорное управление, если оно было включено по ошибке", + "available_lampa": 1 + } + ], + "hpu": "control" + }, + { + "title": "Телевидение", + "results": [ + { + "name": "ТВ by skaz", + "author": "@helpiptv", + "link": "http://skaz.tv/tv.js", + "descr": "Бесплатные каналы и 1500+ каналов по подписке, IPTV плейлисты @skaztv_bot", + "available_lampa": 1 + }, + { + "name": "Kulik", + "author": "@SawamuraRen", + "link": "http://cdn.kulik.uz/cors", + "descr": "Просмотр IPTV каналов, отсортированных по различным категориям. Есть возможность поменять стиль плагина, сервер вещания, а также добавить каналы в избранное", + "available_lampa": 1 + }, + { + "name": "ТВ by skaz 2.0", + "author": "@helpiptv", + "link": "http://skaz.tv/tv2.js", + "descr": "Версия ТВ by skaz плагина на основе IPTV", + "available_lampa": 1 + }, + { + "name": "Дизель ТВ", + "author": "@AndreyURL54", + "link": "https://andreyurl54.github.io/diesel5/diesel.js", + "descr": "Бесплатный просмотр телеканалов и коммерческих плейлистов с телепрограммой и записью архива", + "available_lampa": 1 + } + ], + "hpu": "tv" + }, + { + "title": "Разное", + "results": [ + { + "name": "Логотипы вместо названий", + "author": "@lampa_land", + "link": "https://lampaplugins.github.io/store/logo.js", + "descr": "Отображает логотипы фильмов, вместо названий в карточках", + "available_lampa": 1 + }, + { + "name": "Кинопоиск", + "author": "and7ey", + "link": "https://and7ey.github.io/lampa/kinopoisk.js", + "descr": "Отображает в приложении список фильмов из папки Буду смотреть на Кинопоиске", + "available_lampa": 1 + }, + { + "name": "SomaFM", + "author": "@tsynik", + "link": "https://tsynik.github.io/lampa/soma.js", + "descr": "Радио для Lampa", + "available_lampa": 1 + }, + { + "name": "Оригинальные названия", + "author": "@BDV_Burik", + "link": "https://bdvburik.github.io/title.js", + "descr": "Добавляет оригинальные названия к фильмам, сериалам.", + "available_lampa": 1 + }, + { + "name": "Импорт/Экспорт закладок, истории", + "author": "@lampa_land", + "link": "https://skaz.tv/export.js", + "descr": "Плагин для импорта экспорта закладок, истории", + "available_lampa": 1 + }, + { + "name": "Shikimori - Каталог аниме", + "author": "@lme", + "link": "{localhost}/plugins/shikimori.js", + "descr": "Отображает информацию по аниме с Shikimori, так же пытается найти по оригинальному названию на ТМДБ, если найдено множество результато в то покажет меню с выбором", + "available_lampa": 1 + }, + { + "name": "Радио Рекорд (мод плагина от @Tw1cker)", + "author": "@elenatv99", + "link": "https://lampaplugins.github.io/store/record.js", + "descr": "Радио Рекорд + Радио Вера)))", + "available_lampa": 1 + }, + { + "name": "Радио Records", + "author": "@nemiroff", + "link": "https://nemiroff.github.io/lampa/rr.js", + "descr": "Радио Records", + "available_lampa": 1 + }, + { + "name": "Отзывы и рецензии", + "author": "@elenatv99", + "link": "https://lampaplugins.github.io/store/o.js", + "descr": "Добавляет кнопку чтения отзывов с КиноПоиск в карточку фильма или сериала", + "available_lampa": 1 + }, + { + "name": "Комментарии с HDRezka", + "author": "@BDV_Burik", + "link": "{localhost}/plugins/rezkacomment.js", + "descr": "Добавляет кнопку чтения отзывов с rezka.ag в карточку фильма или сериала", + "available_lampa": 1 + }, + { + "name": "Рейтинг КиноПоиск и IMDB", + "author": "@t_anton", + "link": "{localhost}/plugins/rating.js", + "descr": "Показ рейтинга КиноПоиск и IMDB в карточке. Функционал аналогичен части из MODSs, так что их не следует использовать вместе", + "available_lampa": 1 + }, + { + "name": "Предзагрузка ts", + "author": "@rootu", + "link": "{localhost}/plugins/ts-preload.js", + "descr": "Плагин визуализации предзагрузки торрентов для встроенного клиента TorrServer", + "available_lampa": 1 + }, + { + "name": "Отключение Websocket", + "author": "@rootu", + "link": "http://plugin.rootu.top/wsoff.js", + "descr": "Плагин отключает протокол Websocket, помогает при ошибках на некоторых устройствах", + "available_lampa": 1 + }, + { + "name": "Поиск локального TorrServer", + "author": "@AndreyURL54", + "link": "{localhost}/plugins/checker.js", + "descr": "Плагин позволяет произвести поиск вашего локального TorrServer", + "available_lampa": 1 + } + ], + "hpu": "other" + } + ] +} diff --git a/modules/Music/manifest.json b/modules/Music/manifest.json new file mode 100644 index 0000000..be20c26 --- /dev/null +++ b/modules/Music/manifest.json @@ -0,0 +1,17 @@ +{ + "enable": true, + "dynamic": true, + "references": [ + "YoutubeExplode" + ], + "tree": [ + "Controllers", + "Models", + "Providers", + "SQL", + "Services", + "GlobalUsings.cs", + "ModInit.cs", + "ModuleConf.cs" + ] +} diff --git a/modules/Tg-notify.bot/manifest.json b/modules/Tg-notify.bot/manifest.json new file mode 100644 index 0000000..e3974f5 --- /dev/null +++ b/modules/Tg-notify.bot/manifest.json @@ -0,0 +1,12 @@ +{ + "enable": true, + "dynamic": true, + "references": [ + "references/" + ], + "tree": [ + "Models", + "Controllers", + "ModInit.cs" + ] +} diff --git a/modules/Tracks/manifest.json b/modules/Tracks/manifest.json new file mode 100644 index 0000000..909561d --- /dev/null +++ b/modules/Tracks/manifest.json @@ -0,0 +1,9 @@ +{ + "enable": true, + "dynamic": true, + "tree": [ + "Controller.cs", + "ModInit.cs", + "ModuleConf.cs" + ] +} diff --git a/plugins/extensions.json b/plugins/extensions.json deleted file mode 100644 index f2b3a20..0000000 --- a/plugins/extensions.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "secuses": true, - "results": [ - { - "title": "Рекомендуем", - "results": [ - { - "name": "MODS's", - "author": "@modss_group", - "link": "http://lampa.stream/modss", - "descr": "Фильмы и сериалы в онлайн. Плюс различные дополнения через меню настроек Modss", - "available_lampa": 1 - }, - { - "name": "Showy", - "author": "@Showy", - "link": "http://showwwy.com/m.js", - "descr": "Фильмы и сериалы в онлайн.", - "available_lampa": 1 - }, - { - "name": "Клубничка 18+", - "author": "bwa.to", - "link": "http://bwa.to/re", - "descr": "Онлайн просмотр контента для взрослых, больше 30 сайтов", - "available_lampa": 1 - }, - { - "name": "Добавляет пункт \"Парсер\" в меню", - "author": "@lampa", - "link": "{localhost}/plugins/etor.js", - "descr": "Плагин для ТВ, на которых Lampa установлена через официальные магазины LG Store и Tizen App Store. Включает в настройках отображение пунктов Парсер и Torrserver", - "available_lampa": 1 - }, - { - "name": "Публичные парсеры", - "author": "@lme", - "link": "{localhost}/plugins/pubtorr.js", - "descr": "Сборник публичных парсеров отображением статуса доступности", - "available_lampa": 1 - }, - { - "name": "Вторая кнопка Торренты", - "author": "@VitalikPVA", - "link": "{localhost}/plugins/torrents.js", - "descr": "Плагин добавляет вторую кнопку Торренты", - "available_lampa": 1 - }, - { - "name": "Кинопоиск", - "author": "and7ey", - "link": "https://and7ey.github.io/lampa/kinopoisk.js", - "descr": "Отображает в приложении список фильмов из папки Буду смотреть на Кинопоиске", - "available_lampa": 1 - }, - { - "name": "Оригинальные названия", - "author": "@BDV_Burik", - "link": "https://bdvburik.github.io/title.js", - "descr": "Добавляет оригинальные названия к фильмам, сериалам.", - "available_lampa": 1 - }, - { - "name": "Отзывы и рецензии", - "author": "@elenatv99", - "link": "https://lampaplugins.github.io/store/o.js", - "descr": "Добавляет кнопку чтения отзывов с КиноПоиск в карточку фильма или сериала", - "available_lampa": 1 - }, - { - "name": "Отзывы с HDRezka", - "author": "@BDV_Burik", - "link": "{localhost}/plugins/rezkacomment.js", - "descr": "Добавляет кнопку чтения отзывов с rezka.ag в карточку фильма или сериала", - "available_lampa": 1 - }, - { - "name": "Рейтинг КиноПоиск и IMDB", - "author": "@t_anton", - "link": "{localhost}/plugins/rating.js", - "descr": "Показ рейтинга КиноПоиск и IMDB в карточке. Функционал аналогичен части из MODSs, так что их не следует использовать вместе", - "available_lampa": 1 - }, - { - "name": "Предзагрузка ts", - "author": "@rootu", - "link": "{localhost}/plugins/ts-preload.js", - "descr": "Плагин визуализации предзагрузки торрентов для встроенного клиента TorrServer", - "available_lampa": 1 - }, - { - "name": "LME Torrent Manager", - "author": "@rootu", - "link": "https://lampame.github.io/main/torrentmanager.js", - "descr": "Плагин управления торрентами", - "available_lampa": 1 - }, - { - "name": "Torrent downloader", - "author": "@rootu", - "link": "https://lampame.github.io/td/td.js", - "descr": "Плагин управления торрентами", - "available_lampa": 1 - }, - { - "name": "Поиск локального TorrServer", - "author": "@AndreyURL54", - "link": "{localhost}/plugins/checker.js", - "descr": "Плагин позволяет произвести поиск вашего локального TorrServer", - "available_lampa": 1 - } - ], - "hpu": "best" - } - ] -} \ No newline at end of file diff --git a/plugins/lampainit.my.js b/plugins/lampainit.my.js deleted file mode 100644 index 3f1ccda..0000000 --- a/plugins/lampainit.my.js +++ /dev/null @@ -1,154 +0,0 @@ -(function() { - 'use strict'; - - // Не предлагать выбор языка при первом запуске лампы - if (!localStorage.getItem('language')) { - localStorage.setItem('language', 'ru'); - localStorage.setItem('tmdb_lang', 'ru'); - } - - // Первоначальная сортировка меню - if (!localStorage.getItem('menu_sort')) - localStorage.setItem('menu_sort', '["Главная","Фильмы","Сериалы","Избранное","История","Релизы","Каталог","Фильтр","Расписание","Торренты","Клубничка","Аниме"]'); - - if ('{country}' == 'RU') - localStorage.setItem('cub_domain', 'mirror-kurwa.men'); - else - localStorage.setItem('cub_domain', 'cub.red'); - - window.lampa_settings = { - torrents_use: true, // кнопка торренты включена - demo: false, // demo off - read_only: false, // demo off - socket_use: false, // cub - account_use: true, // сохраним ради расширенных закладок - account_sync: true, // cub синхронизация - plugins_store: false, // cub магазин - feed: false, // cub лента - white_use: false, // cub - push_state: false, // адрес в url /?card=1241982&media=movie - lang_use: false, // выбор языка в настройках - plugins_use: true // настройки, расширения - } - - window.lampa_settings.disable_features = { - dmca: true, // шлет нахер правообладателей - on - reactions: false, // cub реакции - on - discuss: false, // cub комментарии - on - ai: false, // cub AI-поиск - on - install_proxy: true, // cub tmdb proxy - off - subscribe: true, // cub подписки - off - blacklist: true, // off - persons: true // off - } - - {lampainit-invc} - - var timer = setInterval(function() { - if (typeof Lampa !== 'undefined') { - clearInterval(timer); - - if (window.lampainit_invc) - window.lampainit_invc.appload(); - - if ({btn_priority_forced}) - Lampa.Storage.set('full_btn_priority', '{full_btn_priority_hash}'); - - var unic_id = Lampa.Storage.get('lampac_unic_id', ''); - if (!unic_id) { - unic_id = Lampa.Utils.uid(8).toLowerCase(); - Lampa.Storage.set('lampac_unic_id', unic_id); - } - - Lampa.Utils.putScriptAsync(["{localhost}/cubproxy.js", "{localhost}/privateinit.js?account_email=" + encodeURIComponent(Lampa.Storage.get('account_email', '')) + "&uid=" + encodeURIComponent(Lampa.Storage.get('lampac_unic_id', ''))], function() {}); - - if (!Lampa.Storage.get('lampac_initiale', 'false')) { - if (window.appready) { - if (window.lampainit_invc) window.lampainit_invc.appready(); - start(); - } - else { - Lampa.Listener.follow('app', function(e) { - if (e.type == 'ready') { - if (window.lampainit_invc) window.lampainit_invc.appready(); - start(); - } - }) - } - } - - {deny} - {pirate_store} - } - }, 200); - - function start() { - Lampa.Storage.set('lampac_initiale', 'true'); - Lampa.Storage.set('source', 'cub'); - Lampa.Storage.set('video_quality_default', '2160'); - Lampa.Storage.set('full_btn_priority', '{full_btn_priority_hash}'); - Lampa.Storage.set('proxy_tmdb_auto', '{country}' == 'RU'); // Для RU включить tmdb proxy - Lampa.Storage.set('proxy_tmdb', '{country}' == 'RU'); - Lampa.Storage.set('poster_size', 'w300'); - Lampa.Storage.set('animation', 'false'); // Анимация отключена - - Lampa.Storage.set('parser_use', 'true'); - Lampa.Storage.set('jackett_url', '{jachost}'); - Lampa.Storage.set('jackett_key', '1'); - Lampa.Storage.set('parser_torrent_type', 'jackett'); - - var plugins = Lampa.Plugins.get(); - - var plugins_add = [{initiale}]; - - var plugins_push = [] - - plugins_add.forEach(function(plugin) { - if (!plugins.find(function(a) { - return a.url == plugin.url - })) { - Lampa.Plugins.add(plugin); - Lampa.Plugins.save(); - - plugins_push.push(plugin.url) - } - }); - - if (plugins_push.length) Lampa.Utils.putScript(plugins_push, function() {}, function() {}, function() {}, true); - - if (window.lampainit_invc) - window.lampainit_invc.first_initiale(); - - // Загружаем tmdbproxy, cubproxy - Lampa.Utils.putScriptAsync(["{localhost}/tmdbproxy.js", "{localhost}/cubproxy.js"], function() {}); - - // Скрыть меню в настройках - Синхронизация, Парсер, TorrServer, IPTV, Расширения, TMDB - // $(['account', 'parser', 'server', 'iptv', 'plugins'].map(function(c) { - Lampa.Settings.listener.follow('open', function(e) { - $(['interface', 'parental_control', 'iptv', 'plugins'].map(function(c) { - return '[data-component="' + c + '"]'; - }).join(','), e.body).remove(); - }); - - Lampa.Listener.follow('full', (e) => { - if (e.type == 'complite') { - e.object.activity.render().find('.button--subscribe').remove(); // cub подписка на озвучку - $('.open--broadcast').remove(); // открыть на другом устройстве (не работает если отключен cub socket) - } - }); - - // Скрыть разделы в меню - Lampa.Listener.follow('app', (e) => { - if (e.type === 'ready') { - $("[data-action=feed]").hide(); // лента - $("[data-action=myperson]").hide(); // cub подписка на актеров - $("[data-action=subscribes]").hide(); - $("[data-action=mytorrents]").hide(); - $("[data-action=about]").hide(); - $("[data-action=console]").hide(); - $("[data-action=timetable]").hide(); - $("[data-action=anime]").hide(); - } - }); - } -})(); \ No newline at end of file diff --git a/update.sh b/update.sh deleted file mode 100755 index 05e5d99..0000000 --- a/update.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -cd /root/Lampac -docker compose pull -docker compose up -d --remove-orphans -docker image prune -f