Синхронизация с main: Docker-развёртывание Lampac NextGen

Содержимое ветки заменено на актуальное из 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) удалён.
This commit is contained in:
2026-10-01 16:30:15 +03:00
parent 20cfe276d3
commit 95db691a0d
18 changed files with 801 additions and 1363 deletions
+12 -3
View File
@@ -1,3 +1,12 @@
lampac.code-workspace
cache
configs/sisi_bkp.js
# Секреты
config/passwd
# Локальные данные и кеш
cache/
database/
# Медиа DLNA (том ./dlna -> /lampac/data/dlna)
dlna/
# Системное
.DS_Store
+83
View File
@@ -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/<Name>/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/<Name>/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.<name>` в `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/<bucket>/` — после правки удалить соответствующий файл (`grep -rl secuses cache/static/`) или весь каталог static, затем перезапросить.
5. Новые пользовательские модули класть в `mods/<Name>/` (монтировать в `/lampac/mods/<Name>`), переопределения плагинов — `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 (новые ключи добавляются в стартовый конфиг).
+225
View File
@@ -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/<Name>/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
+54
View File
@@ -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
}
}
}
-62
View File
@@ -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
}
}
-1
View File
@@ -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"}]
-982
View File
@@ -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 = "<div class=\"about\">\n <div>\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</div>\n <div class=\"about__contacts\">\n <div>\n <small>\u0421\u0430\u0439\u0442</small><br>\n ".concat(Defined.vip_site, "\n </div>\n\n <div>\n <small>\u0412\u0430\u0448 ID</small><br>\n ").concat(id, "\n </div>\n </div>\n </div>");
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 = '<img class="size-youtube" src="' + a.picture + '" />';
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 = $("<div class=\"head__action head__settings selector\">\n <svg height=\"36\" viewBox=\"0 0 38 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1.5\" y=\"1.5\" width=\"35\" height=\"33\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"3\"></rect>\n <rect x=\"7\" y=\"8\" width=\"24\" height=\"3\" rx=\"1.5\" fill=\"currentColor\"></rect>\n <rect x=\"7\" y=\"16\" width=\"24\" height=\"3\" rx=\"1.5\" fill=\"currentColor\"></rect>\n <rect x=\"7\" y=\"25\" width=\"24\" height=\"3\" rx=\"1.5\" fill=\"currentColor\"></rect>\n <circle cx=\"13.5\" cy=\"17.5\" r=\"3.5\" fill=\"currentColor\"></circle>\n <circle cx=\"23.5\" cy=\"26.5\" r=\"3.5\" fill=\"currentColor\"></circle>\n <circle cx=\"21.5\" cy=\"9.5\" r=\"3.5\" fill=\"currentColor\"></circle>\n </svg>\n </div>");
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: "<svg width=\"200\" height=\"243\" viewBox=\"0 0 200 243\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M187.714 130.727C206.862 90.1515 158.991 64.2019 100.983 64.2019C42.9759 64.2019 -4.33044 91.5669 10.875 130.727C26.0805 169.888 63.2501 235.469 100.983 234.997C138.716 234.526 168.566 171.303 187.714 130.727Z\" stroke=\"currentColor\" stroke-width=\"15\"/><path d=\"M102.11 62.3146C109.995 39.6677 127.46 28.816 169.692 24.0979C172.514 56.1811 135.338 64.2018 102.11 62.3146Z\" stroke=\"currentColor\" stroke-width=\"15\"/><path d=\"M90.8467 62.7863C90.2285 34.5178 66.0667 25.0419 31.7127 33.063C28.8904 65.1461 68.8826 62.7863 90.8467 62.7863Z\" stroke=\"currentColor\" stroke-width=\"15\"/><path d=\"M100.421 58.5402C115.627 39.6677 127.447 13.7181 85.2149 9C82.3926 41.0832 83.5258 35.4214 100.421 58.5402Z\" stroke=\"currentColor\" stroke-width=\"15\"/><rect x=\"39.0341\" y=\"98.644\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"90.8467\" y=\"92.0388\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"140.407\" y=\"98.644\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"116.753\" y=\"139.22\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"64.9404\" y=\"139.22\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"93.0994\" y=\"176.021\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/></svg>"
});
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 = $("<li class=\"menu__item selector\" data-action=\"sisi\">\n <div class=\"menu__ico\">\n <svg width=\"200\" height=\"243\" viewBox=\"0 0 200 243\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M187.714 130.727C206.862 90.1515 158.991 64.2019 100.983 64.2019C42.9759 64.2019 -4.33044 91.5669 10.875 130.727C26.0805 169.888 63.2501 235.469 100.983 234.997C138.716 234.526 168.566 171.303 187.714 130.727Z\" stroke=\"currentColor\" stroke-width=\"15\"/><path d=\"M102.11 62.3146C109.995 39.6677 127.46 28.816 169.692 24.0979C172.514 56.1811 135.338 64.2018 102.11 62.3146Z\" stroke=\"currentColor\" stroke-width=\"15\"/><path d=\"M90.8467 62.7863C90.2285 34.5178 66.0667 25.0419 31.7127 33.063C28.8904 65.1461 68.8826 62.7863 90.8467 62.7863Z\" stroke=\"currentColor\" stroke-width=\"15\"/><path d=\"M100.421 58.5402C115.627 39.6677 127.447 13.7181 85.2149 9C82.3926 41.0832 83.5258 35.4214 100.421 58.5402Z\" stroke=\"currentColor\" stroke-width=\"15\"/><rect x=\"39.0341\" y=\"98.644\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"90.8467\" y=\"92.0388\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"140.407\" y=\"98.644\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"116.753\" y=\"139.22\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"64.9404\" y=\"139.22\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/><rect x=\"93.0994\" y=\"176.021\" width=\"19.1481\" height=\"30.1959\" rx=\"9.57407\" fill=\"currentColor\"/></svg>\n </div>\n <div class=\"menu__text\">" + Lampa.Lang.translate('lampac_sisiname') + "</div>\n </li>");
if (Defined.use_api == 'pwa') {
var pw = $('<div>p</div>');
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()
*/
}
})();
-19
View File
@@ -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
+25
View File
@@ -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
-21
View File
@@ -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
+9
View File
@@ -0,0 +1,9 @@
{
"enable": true,
"dynamic": true,
"tree": [
"AdminPanelController.cs",
"ConfigSectionGroups.cs",
"ModInit.cs"
]
}
+355
View File
@@ -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"
}
]
}
+17
View File
@@ -0,0 +1,17 @@
{
"enable": true,
"dynamic": true,
"references": [
"YoutubeExplode"
],
"tree": [
"Controllers",
"Models",
"Providers",
"SQL",
"Services",
"GlobalUsings.cs",
"ModInit.cs",
"ModuleConf.cs"
]
}
+12
View File
@@ -0,0 +1,12 @@
{
"enable": true,
"dynamic": true,
"references": [
"references/"
],
"tree": [
"Models",
"Controllers",
"ModInit.cs"
]
}
+9
View File
@@ -0,0 +1,9 @@
{
"enable": true,
"dynamic": true,
"tree": [
"Controller.cs",
"ModInit.cs",
"ModuleConf.cs"
]
}
-116
View File
@@ -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"
}
]
}
-154
View File
@@ -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();
}
});
}
})();
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
cd /root/Lampac
docker compose pull
docker compose up -d --remove-orphans
docker image prune -f