diff --git a/README.md b/README.md index 663c13f..122d7be 100644 --- a/README.md +++ b/README.md @@ -29,4 +29,4 @@ make live Исходный код и готовая документация распространяется на условиях лицензии MIT. См. файл [LICENSE](LICENSE) для подробностей. -Стороннее ПО и ресурсы используются в соответствии лицензиями, указанными в файле [content/legal/foss.md](content/legal/foss.md). +Стороннее ПО и ресурсы используются в соответствии лицензиями, указанными в файле [content/legal/foss.md](content/extra/legal/foss.md). diff --git a/content/_assets/css/extra.css b/content/_assets/css/extra.css index 4ef7e53..661c8f6 100644 --- a/content/_assets/css/extra.css +++ b/content/_assets/css/extra.css @@ -5,6 +5,8 @@ --md-admonition-icon--yoomoney: url('data:image/svg+xml;charset=utf-8,'); /* Boosty logo */ --md-admonition-icon--boosty: url('data:image/svg+xml;charset=utf-8,'); + /* CloudTips logo */ + --md-admonition-icon--cloudtips: url('data:image/svg+xml;charset=utf-8,'); } /* Image admonition styling */ @@ -24,11 +26,11 @@ .md-typeset .admonition.yoomoney, .md-typeset details.yoomoney { - border-color: rgba(113, 47, 244, 1); + background-color: rgb(113 47 244 / 10%); } .md-typeset .yoomoney > .admonition-title::before, .md-typeset .yoomoney > summary::before { - background-color: rgb(113, 47, 244); + background-color: rgb(113 47 244); -webkit-mask-image: var(--md-admonition-icon--yoomoney); mask-image: var(--md-admonition-icon--yoomoney); } @@ -37,15 +39,28 @@ .md-typeset .admonition.boosty, .md-typeset details.boosty { - border-color: rgb(241, 95, 44); + background-color: rgb(241 95 44 / 10%) } .md-typeset .boosty > .admonition-title::before, .md-typeset .boosty > summary::before { - background-color: rgb(241, 95, 44); + background-color: rgb(241 95 44); -webkit-mask-image: var(--md-admonition-icon--boosty); mask-image: var(--md-admonition-icon--boosty); } +/* CloudTips admonition styling */ + +.md-typeset .admonition.cloudtips, +.md-typeset details.cloudtips { + border-color: rgb(241, 95, 44); +} +.md-typeset .cloudtips > .admonition-title::before, +.md-typeset .cloudtips > summary::before { + /* background-color: rgb(241, 95, 44); */ + -webkit-mask-image: var(--md-admonition-icon--cloudtips); + mask-image: var(--md-admonition-icon--cloudtips); +} + .badge { border-bottom-left-radius: 6px; diff --git a/content/aggregator/faq.md b/content/aggregator/faq.md index ad25714..19b0792 100644 --- a/content/aggregator/faq.md +++ b/content/aggregator/faq.md @@ -46,8 +46,8 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", ## Откуда берутся логотипы каналов и программы передач? -Всё это (не) [указывается](../common/formats/m3u.md#tvg-logo) внутри плейлиста его авторами. -Но в некоторых [плеерах](../common/players.md) можно вручную указывать программу передач (см. ниже). +Всё это (не) [указывается](../ref/formats/m3u.md#tvg-logo) внутри плейлиста его авторами. +Но в некоторых [плеерах](../ref/players.md) можно вручную указывать программу передач (см. ниже). ## У канала нет логотипа! @@ -55,7 +55,7 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", ## У **канала** нет программы передач (EPG), что делать? -Фига в том, что EPG может быть и [указан](../common/formats/m3u.md#url-tvg) в плейлисте, но у конкретного канала могут быть указаны некорректные [`tvg-id`](../common/formats/m3u.md#tvg-id) или [`tvg-name`](../common/formats/m3u.md#tvg-name). +Фига в том, что EPG может быть и [указан](../ref/formats/m3u.md#url-tvg) в плейлисте, но у конкретного канала могут быть указаны некорректные [`tvg-id`](../ref/formats/m3u.md#tvg-id) или [`tvg-name`](../ref/formats/m3u.md#tvg-name). Может, его дёрнули из другого листа и не подогнали под другую EPG. Так что вариантов масса: @@ -74,17 +74,17 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", * не все плееры вообще поддерживают работу с телепрограммой; * в плейлисте она просто может не быть указана. -Но если [плеер](../common/players.md) позволяет, можно указать ссылку на сторонную телепрограмму. +Но если [плеер](../ref/players.md) позволяет, можно указать ссылку на сторонную телепрограмму. И это целое дело. -Надо чтобы совпадали [`tvg-id`](../common/formats/m3u.md#tvg-id) или [`tvg-name`](../common/formats/m3u.md#tvg-name) каналов с теми, которые указываются в EPG. +Надо чтобы совпадали [`tvg-id`](../ref/formats/m3u.md#tvg-id) или [`tvg-name`](../ref/formats/m3u.md#tvg-name) каналов с теми, которые указываются в EPG. Так что не всякая телепрограмма подойдёт, не ко всякому плейлисту и не ко всем каналам. Надо подбирать и то, и то. ## А где взять программу передач (EPG)? { id="epg" } 1. Из самого плейлиста. - Часто в атрибут [`url-tvg`](../common/formats/m3u.md#url-tvg) тега `#EXTM3U` указывают одну или две ссылки на EPG, разделяя их `;`. + Часто в атрибут [`url-tvg`](../ref/formats/m3u.md#url-tvg) тега `#EXTM3U` указывают одну или две ссылки на EPG, разделяя их `;`. Их можно использовать отдельно, например, если плеер не может корректно обработать такое значение. 2. Взять одну из этих ссылок: @@ -114,7 +114,7 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", ## Почему на сайте плейлист онлайн, но в нём 0 каналов? -[Тебе сюда](checks.md#playlists). +[Тебе сюда](../iptvc/site/checks.md#playlists). ## Почему на сайте плейлист онлайн, но у меня он не работает? @@ -133,7 +133,7 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", Но вообще, это зависит от: * автора плейлиста (дохлые каналы почти всегда есть даже в свежайших листах, но если лист не обновлялся год, что ты вряд-ли узнаешь, то рабочих каналов там не ищи); -* твоего [плеера](../common/players.md) (видеотрансляции могут использовать кодек, который просто не поддерживается плеером); +* твоего [плеера](../ref/players.md) (видеотрансляции могут использовать кодек, который просто не поддерживается плеером); * ширины твоего интернет-канала (не надо пытаться врубать FHD/4K трансляции с мобильного интернета на самом дешёвом тарифе в лесу); * ретроградности Меркурия и магнитных бурь (а вдруг); * настроек твоей сети, твоего интернет-провайдера, VPN (подумай хорошенько, хочешь ли ты смотреть российские каналы из РФ через Уганду или США); @@ -153,13 +153,13 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", Короткие коды плейлистов могут меняться, поэтому вполне может произойти внезапная подмена одного другим, однако это происходит крайне редко. -Плюс читай про доверие [результатам проверки](checks.md). +Плюс читай про доверие [результатам проверки](../iptvc/site/checks.md). ## В плейлистах порнуха! Да, в плейлистах порнуха. -Это [явно помечается](checks.md#adult) везде, где это технически возможно. +Это [явно помечается](../iptvc/site/checks.md#adult) везде, где это технически возможно. Смотри с удовольствием сколько хочешь, всё для тебя. Или без удовольствия. @@ -190,7 +190,7 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", Например, ты на своём компе: * открываешь любой текстовый редактор; -* оформляешь текст в формате [m3u](../common/formats/m3u.md); +* оформляешь текст в формате [m3u](../ref/formats/m3u.md); * сохраняешь в файл `pls.m3u`. Получился плейлист `pls.m3u`. @@ -251,7 +251,7 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", Нет, и не планируется. -Ищи [плеер](../common/players.md) и добавляй плейлист туда по ссылке. +Ищи [плеер](../ref/players.md) и добавляй плейлист туда по ссылке. ## На канале отображается заглушка { id="заглушка" } @@ -308,7 +308,7 @@ tags: ["сайт", "каналы", "плейлисты", "epg", "плееры", **Решение 3:** если IP не российский, то сделать его российским (любыми способами). -**Решение 4:** использовать [плеер](../common/players.md), который позволяет указать **User-Agent**, и вставить туда какой-нибудь из этих: +**Решение 4:** использовать [плеер](../ref/players.md), который позволяет указать **User-Agent**, и вставить туда какой-нибудь из этих: ``` Mozilla/5.0 WINK/1.28.2 (AndroidTV/9) HlsWinkPlayer diff --git a/content/aggregator/overview.md b/content/aggregator/overview.md index 4713eec..69cbab1 100644 --- a/content/aggregator/overview.md +++ b/content/aggregator/overview.md @@ -61,7 +61,7 @@ hide: [toc] Автор не зарабатывает на проекте и не собирается. Всё, что отображается на сайте, сделано бесплатно и на энтузиазме. -Но ты можешь сделать [добровольное пожертвование](../common/support.md), которое поможет мне компенсировать затраты на поддержку и техническое развитие проекта. +Но ты можешь сделать [добровольное пожертвование](../extra/support.md), которое поможет мне компенсировать затраты на поддержку и техническое развитие проекта. ## Условия, гарантии, обязательства и последствия diff --git a/content/common/index.md b/content/common/index.md index 129d4e6..fee5965 100644 --- a/content/common/index.md +++ b/content/common/index.md @@ -8,9 +8,9 @@ hide: [toc]
- [:material-cogs: Как работает сервис](../aggregator/overview.md) - [:material-file-eye-outline: Как отбираются плейлисты](../aggregator/selection.md) -- [:material-file-refresh-outline: Проверки и статусы](../aggregator/checks.md) +- [:material-file-refresh-outline: Проверки и статусы](../iptvc/site/checks.md) - [:fontawesome-solid-list-check: Список плейлистов](../iptvc/site/list.md) - [:material-table-eye: Страница плейлиста](../iptvc/site/details.md) - [:material-television-play: Как подключить плейлист](../iptvc/site/connect.md) -- [:material-multimedia: IPTV плееры](players.md) +- [:material-multimedia: IPTV плееры](../ref/players.md)
diff --git a/content/common/_assets/players/iptv-web-player/add.jpg b/content/extra/_assets/players/iptv-web-player/add.jpg similarity index 100% rename from content/common/_assets/players/iptv-web-player/add.jpg rename to content/extra/_assets/players/iptv-web-player/add.jpg diff --git a/content/common/_assets/players/iptv-web-player/main.jpg b/content/extra/_assets/players/iptv-web-player/main.jpg similarity index 100% rename from content/common/_assets/players/iptv-web-player/main.jpg rename to content/extra/_assets/players/iptv-web-player/main.jpg diff --git a/content/common/_assets/players/iptvnator/add1.jpg b/content/extra/_assets/players/iptvnator/add1.jpg similarity index 100% rename from content/common/_assets/players/iptvnator/add1.jpg rename to content/extra/_assets/players/iptvnator/add1.jpg diff --git a/content/common/_assets/players/iptvnator/add2.jpg b/content/extra/_assets/players/iptvnator/add2.jpg similarity index 100% rename from content/common/_assets/players/iptvnator/add2.jpg rename to content/extra/_assets/players/iptvnator/add2.jpg diff --git a/content/common/_assets/players/iptvnator/main.jpg b/content/extra/_assets/players/iptvnator/main.jpg similarity index 100% rename from content/common/_assets/players/iptvnator/main.jpg rename to content/extra/_assets/players/iptvnator/main.jpg diff --git a/content/common/_assets/players/m3u/add1.jpg b/content/extra/_assets/players/m3u/add1.jpg similarity index 100% rename from content/common/_assets/players/m3u/add1.jpg rename to content/extra/_assets/players/m3u/add1.jpg diff --git a/content/common/_assets/players/m3u/add2.jpg b/content/extra/_assets/players/m3u/add2.jpg similarity index 100% rename from content/common/_assets/players/m3u/add2.jpg rename to content/extra/_assets/players/m3u/add2.jpg diff --git a/content/common/_assets/players/m3u/main.jpg b/content/extra/_assets/players/m3u/main.jpg similarity index 100% rename from content/common/_assets/players/m3u/main.jpg rename to content/extra/_assets/players/m3u/main.jpg diff --git a/content/common/_assets/players/m3u/ua1.jpg b/content/extra/_assets/players/m3u/ua1.jpg similarity index 100% rename from content/common/_assets/players/m3u/ua1.jpg rename to content/extra/_assets/players/m3u/ua1.jpg diff --git a/content/common/_assets/players/m3u/ua2.jpg b/content/extra/_assets/players/m3u/ua2.jpg similarity index 100% rename from content/common/_assets/players/m3u/ua2.jpg rename to content/extra/_assets/players/m3u/ua2.jpg diff --git a/content/common/_assets/players/televizo/add1.jpg b/content/extra/_assets/players/televizo/add1.jpg similarity index 100% rename from content/common/_assets/players/televizo/add1.jpg rename to content/extra/_assets/players/televizo/add1.jpg diff --git a/content/common/_assets/players/televizo/add2.jpg b/content/extra/_assets/players/televizo/add2.jpg similarity index 100% rename from content/common/_assets/players/televizo/add2.jpg rename to content/extra/_assets/players/televizo/add2.jpg diff --git a/content/common/_assets/players/televizo/add21.jpg b/content/extra/_assets/players/televizo/add21.jpg similarity index 100% rename from content/common/_assets/players/televizo/add21.jpg rename to content/extra/_assets/players/televizo/add21.jpg diff --git a/content/common/_assets/players/televizo/add22.jpg b/content/extra/_assets/players/televizo/add22.jpg similarity index 100% rename from content/common/_assets/players/televizo/add22.jpg rename to content/extra/_assets/players/televizo/add22.jpg diff --git a/content/common/_assets/players/televizo/main1.jpg b/content/extra/_assets/players/televizo/main1.jpg similarity index 100% rename from content/common/_assets/players/televizo/main1.jpg rename to content/extra/_assets/players/televizo/main1.jpg diff --git a/content/common/_assets/players/televizo/main2.jpg b/content/extra/_assets/players/televizo/main2.jpg similarity index 100% rename from content/common/_assets/players/televizo/main2.jpg rename to content/extra/_assets/players/televizo/main2.jpg diff --git a/content/common/_assets/players/vlc/add1-mob.jpg b/content/extra/_assets/players/vlc/add1-mob.jpg similarity index 100% rename from content/common/_assets/players/vlc/add1-mob.jpg rename to content/extra/_assets/players/vlc/add1-mob.jpg diff --git a/content/common/_assets/players/vlc/add1.jpg b/content/extra/_assets/players/vlc/add1.jpg similarity index 100% rename from content/common/_assets/players/vlc/add1.jpg rename to content/extra/_assets/players/vlc/add1.jpg diff --git a/content/common/_assets/players/vlc/add2-mob.jpg b/content/extra/_assets/players/vlc/add2-mob.jpg similarity index 100% rename from content/common/_assets/players/vlc/add2-mob.jpg rename to content/extra/_assets/players/vlc/add2-mob.jpg diff --git a/content/common/_assets/players/vlc/add2.jpg b/content/extra/_assets/players/vlc/add2.jpg similarity index 100% rename from content/common/_assets/players/vlc/add2.jpg rename to content/extra/_assets/players/vlc/add2.jpg diff --git a/content/common/_assets/players/vlc/main.jpg b/content/extra/_assets/players/vlc/main.jpg similarity index 100% rename from content/common/_assets/players/vlc/main.jpg rename to content/extra/_assets/players/vlc/main.jpg diff --git a/content/common/_assets/players/yuki-iptv/add.jpg b/content/extra/_assets/players/yuki-iptv/add.jpg similarity index 100% rename from content/common/_assets/players/yuki-iptv/add.jpg rename to content/extra/_assets/players/yuki-iptv/add.jpg diff --git a/content/common/_assets/players/yuki-iptv/main.jpg b/content/extra/_assets/players/yuki-iptv/main.jpg similarity index 100% rename from content/common/_assets/players/yuki-iptv/main.jpg rename to content/extra/_assets/players/yuki-iptv/main.jpg diff --git a/content/common/docs.md b/content/extra/docs.md similarity index 96% rename from content/common/docs.md rename to content/extra/docs.md index 959da43..21c6a09 100644 --- a/content/common/docs.md +++ b/content/extra/docs.md @@ -29,5 +29,5 @@ icon: material/book-open-page-variant-outline 4. справа — содержание конкретной страницы. ??? info end "На мобильниках содержание страницы спрятано за этой кнопкой в боковом меню:" - ![Скриншот бокового меню с мобильной версии](_assets/mobile-toc-btn.jpg) + ![Скриншот бокового меню с мобильной версии](../common/_assets/mobile-toc-btn.jpg) diff --git a/content/legal/copyrights.md b/content/extra/legal/copyrights.md similarity index 98% rename from content/legal/copyrights.md rename to content/extra/legal/copyrights.md index 528c3df..b2a1d0a 100644 --- a/content/legal/copyrights.md +++ b/content/extra/legal/copyrights.md @@ -5,7 +5,7 @@ icon: material/wallet-outline # :material-wallet-outline: Правообладателям Данные, представленные на сайте https://m3u.su, получены автоматически из открыто доступных в интернете IPTV-плейлистов, опубликованных третьими лицами. -При наличии технической возможности, источник плейлиста может быть указан на вкладке [«Основные данные»](../iptvc/site/details.md). +При наличии технической возможности, источник плейлиста может быть указан на вкладке [«Основные данные»](../../iptvc/site/details.md). Сервис https://m3u.su не размещает и не транслирует медиаконтент, не создаёт, не призывает использовать и распространять плейлисты третьих лиц, а также не оказывает услуг по ретрансляции телепрограмм. diff --git a/content/legal/foss.md b/content/extra/legal/foss.md similarity index 100% rename from content/legal/foss.md rename to content/extra/legal/foss.md diff --git a/content/legal/license.md b/content/extra/legal/license.md similarity index 100% rename from content/legal/license.md rename to content/extra/legal/license.md diff --git a/content/common/support.md b/content/extra/support.md similarity index 74% rename from content/common/support.md rename to content/extra/support.md index 0d49dd1..2c41c4c 100644 --- a/content/common/support.md +++ b/content/extra/support.md @@ -16,23 +16,23 @@ icon: material/hand-heart-outline Там можно ставить **платные реакции** к постам и/или **дарить голоса** (бусты): * канал: [@iptv_aggregator](https://t.me/iptv_aggregator) ([boost](https://t.me/iptv_aggregator?boost)) — в нём новости о проекте (общие объявления и проведённые доработки); -* чат: [@iptv_aggregator_chat](../tg/chat.md) ([boost](https://t.me/iptv_aggregator_chat?boost)) — комментарии к каналу, общение по теме проекта и IPTV. +* чат: [@iptv_aggregator_chat](../tg/chat.md) — комментарии к каналу, общение по теме проекта и IPTV. ## :material-wallet: Внести пожертвование -Вы можете внести прямое денежное **пожертвование** с банковской карты на виртуальный кошелёк ЮMoney: +Пожертвования добровольны и безвозмездны. +Вы не получите ничего взамен, кроме чека. + +Для вас пожертвования в мой адрес — способ сказать мне "Спасибо". +Для меня — способ компенсировать малую долю затрат на содержание проекта. + +Вы можете внести прямое денежное пожертвование с банковской карты: !!! yoomoney "[yoomoney.ru/to/41001685237530](https://yoomoney.ru/to/41001685237530)" - Разовый платёж, без подписок, на любую сумму. -Также вы можете оформить подписку на Boosty: +!!! cloudtips "[pay.cloudtips.ru/p/16167fc3](https://pay.cloudtips.ru/p/16167fc3)" !!! boosty "[boosty.to/anthonyaxenov](https://boosty.to/anthonyaxenov)" - Разовый платёж или платная подписка. - -Пожертвования добровольны. -Они не дают права на эксклюзивный доступ к чему-либо и не рассматриваются как способ обогащения. -Это лишь попытка компенсировать затраты на содержание проекта. На пожертвования [был приобретён](https://t.me/iptv_aggregator/30) домен `m3u.su`, который сейчас используется в качестве основного адреса. @@ -42,7 +42,10 @@ icon: material/hand-heart-outline Чтобы принять участие в разработке, необходимо [зарегистрироваться на сайте git.axenov.dev](https://git.axenov.dev/user/sign_up) и **активировать** учётную запись по e-mail. -!!! info "Это бесплатно, но неактивированные учётки периодически удаляются." +!!! info "Это бесплатно" + От вас не потребуется никаких персональных данных. + Сервер расположен в РФ. + Неактивированные учётки периодически удаляются. ### :octicons-issue-opened-16: Создать задачу diff --git a/content/index.md b/content/index.md index 89301a9..34c93eb 100644 --- a/content/index.md +++ b/content/index.md @@ -50,7 +50,7 @@ hero: Полное описание `config.yml`, переменных окружения и CLI-флагов - [Подробнее :octicons-arrow-right-24:](common/config/config.md){ .md-button .md-button--primary } + [Подробнее :octicons-arrow-right-24:](ref/config.md){ .md-button .md-button--primary } - :material-book-open-page-variant-outline:{ .lg .middle } **Об этой документации** @@ -58,7 +58,7 @@ hero: Подборка плееров для всех платформ — найдите и настройте плеер для себя - [Подробнее :octicons-arrow-right-24:](common/players.md){ .md-button .md-button--primary } + [Подробнее :octicons-arrow-right-24:](ref/players.md){ .md-button .md-button--primary } - :material-hand-heart:{ .lg .middle } **Поддержка проекта** @@ -66,6 +66,6 @@ hero: Проекту важна поддержка, и вот как вы можете принять участие - [Подробнее :octicons-arrow-right-24:](common/support.md){ .md-button .md-button--primary } + [Подробнее :octicons-arrow-right-24:](extra/support.md){ .md-button .md-button--primary } diff --git a/content/iptvc/commands/check.md b/content/iptvc/commands/check.md index 4b11e66..f97f7b5 100644 --- a/content/iptvc/commands/check.md +++ b/content/iptvc/commands/check.md @@ -13,7 +13,7 @@ tags: [iptvc] ## `-i`, `--ini` { id=ini } -Указывает путь к локальному [ini-файлу](../../common/formats/playlists.md) с описанием плейлистов. +Указывает путь к локальному [ini-файлу](../../ref/formats/playlists.md) с описанием плейлистов. Можно указать только однажды. @@ -27,7 +27,7 @@ tags: [iptvc] ## `-t`, `--tags` { id=tags } -Указывает путь к локальному [json-файлу](../../common/formats/channels.md) с описанием тегов каналов. +Указывает путь к локальному [json-файлу](../../ref/formats/channels.md) с описанием тегов каналов. Можно указать только однажды. @@ -64,7 +64,7 @@ tags: [iptvc] ## `-c`, `--code` { id=code } -Указывает код плейлиста из файла [playlists.ini](../../common/formats/playlists.md). +Указывает код плейлиста из файла [playlists.ini](../../ref/formats/playlists.md). Можно указать несколько разных. @@ -87,14 +87,14 @@ tags: [iptvc] Если указано `0`, тогда: * повторение будет бесконечным; - + * если переданы [`--url`](#url), [`--file`](#file) или [`--code`](#code), то на каждой итерации будут проверяться только указанные плейлисты; - -* если не переданы [`--url`](#url), [`--file`](#file) или [`--code`](#code), то на каждой итерации список плейлистов будет подготавливаться заново. + +* если не переданы [`--url`](#url), [`--file`](#file) или [`--code`](#code), то на каждой итерации список плейлистов будет подготавливаться заново. Если при этом используется кеширование, то проверенные плейлисты (результаты проверки которых ещё находятся в кеше) проверяться не будут. ```shell title="Пример" -# проверить 5 раз плейлисты с кодами xx и yy из my.ini +# проверить 5 раз плейлисты с кодами xx и yy из my.ini ./iptvc check -i ~/my.ini -c xx --code yy --repeat 5 # бесконечно проверять все плейлисты из my.ini, без учёта проверенных ./iptvc check -i ~/my.ini --repeat 0 @@ -151,18 +151,20 @@ tags: [iptvc] ./iptvc check -i ~/my.ini --random 10 --quiet --json ``` -## `-v`, `--verbose` { id=verbose } - -Включает подробное логирование. - -```shell title="Пример" -./iptvc check --random 10 --verbose -``` - ## Глобальные флаги { id=global } Эти флаги доступны для всех команд и переопределяют значения из `config.yml`. +### `--config` { id=config } + +Путь к файлу конфигурации `config.yml`. + +Значение по умолчанию: `config.yml` + +```shell title="Пример" +./iptvc check --config /etc/iptvc/config.yml +``` + ### `--debug` { id=debug } Включает режим отладки. Переопределяет `app.debug` из `config.yml` и переменную `APP_DEBUG`. @@ -181,6 +183,14 @@ tags: [iptvc] ./iptvc check -i ~/my.ini --log-level debug ``` +### `-v`, `--verbose` { id=verbose } + +Включает подробное логирование. + +```shell title="Пример" +./iptvc check --random 10 --verbose +``` + ## Флаги проверки плейлистов { id=check-playlists } Эти флаги переопределяют параметры секции `check.playlists` из `config.yml`. Доступны для команд `check` и `serve`. diff --git a/content/iptvc/commands/serve.md b/content/iptvc/commands/serve.md index a12f329..07d57cc 100644 --- a/content/iptvc/commands/serve.md +++ b/content/iptvc/commands/serve.md @@ -53,7 +53,7 @@ iptvc serve --check ### `-i`, `--ini` { id="ini" } -Путь к локальному [ini-файлу](../../common/formats/playlists.md) с описанием плейлистов. +Путь к локальному [ini-файлу](../../ref/formats/playlists.md) с описанием плейлистов. Значение по умолчанию: `./playlists.ini` @@ -63,7 +63,7 @@ iptvc serve --check -i ~/my.ini ### `-t`, `--tags` { id="tags" } -Путь к [json-файлу](../../common/formats/channels.md) с описанием тегов каналов. +Путь к [json-файлу](../../ref/formats/channels.md) с описанием тегов каналов. Значение по умолчанию: `./channels.json` @@ -365,19 +365,20 @@ iptvc serve --check --debug \ ## Веб-маршруты -| Метод | Путь | Описание | -| --- | --- | --- | -| GET | `/` | Главная страница со списком плейлистов | -| GET | `/page/{N}` | Страница N списка плейлистов | -| GET | `/{code}` | Редирект на прямую ссылку плейлиста | -| GET | `/{code}.m3u[8]` | Редирект на прямую ссылку плейлиста | -| GET | `/{code}/details` | Страница с описанием плейлиста | -| GET | `/api` | Редирект на `/api/` (Swagger UI) | -| GET | `/api/` | Swagger UI с описанием REST API | -| GET | `/api/openapi.json` | OpenAPI-схема в формате JSON | -| GET | `/api/playlists` | JSON: массив всех плейлистов | -| GET | `/api/playlists/{code}` | JSON: информация о плейлисте | -| GET | `/api/playlists/{code}/channels` | JSON: список каналов плейлиста | -| GET | `/api/version` | JSON: версии компонентов | -| GET | `/api/health` | JSON: состояние сервиса | -| GET | `/api/stats` | JSON: статистика по плейлистам и каналам | +| Метод | Путь | Описание | +| ----- | -------------------------------- | ---------------------------------------- | +| GET | `/` | Главная страница со списком плейлистов | +| GET | `/page/{N}` | Страница N списка плейлистов | +| GET | `/{code}` | Редирект на прямую ссылку плейлиста | +| GET | `/{code}.m3u` | Редирект на прямую ссылку плейлиста | +| GET | `/{code}.m3u8` | Редирект на прямую ссылку плейлиста | +| GET | `/{code}/details` | Страница с описанием плейлиста | +| GET | `/api` | Редирект на `/api/` (Swagger UI) | +| GET | `/api/` | Swagger UI с описанием REST API | +| GET | `/api/openapi.json` | OpenAPI-схема в формате JSON | +| GET | `/api/playlists` | JSON: массив всех плейлистов | +| GET | `/api/playlists/{code}` | JSON: информация о плейлисте | +| GET | `/api/playlists/{code}/channels` | JSON: список каналов плейлиста | +| GET | `/api/version` | JSON: версии компонентов | +| GET | `/api/health` | JSON: состояние сервиса | +| GET | `/api/stats` | JSON: статистика по плейлистам и каналам | diff --git a/content/iptvc/dev/arch.md b/content/iptvc/dev/arch.md index b45a3cd..7093e9d 100644 --- a/content/iptvc/dev/arch.md +++ b/content/iptvc/dev/arch.md @@ -30,11 +30,13 @@ iptvc/ │ ├── check.go # команда check │ ├── serve.go # команда serve │ ├── flags.go # общие флаги check/serve +│ ├── flags_test.go # тесты применения CLI-переопределений │ └── version.go # команда version ├── app/ │ ├── app.go # глобальные переменные: Args, Config, Cache │ ├── config/ -│ │ └── config.go # Config, Init(), validate(), IntRange, UserAgents +│ │ ├── config.go # Config, Init(), validate(), IntRange, UserAgents +│ │ └── config_test.go # тесты конфигурации │ ├── checker/ │ │ └── checker.go # CheckPlaylists(), CheckChannels(), OnPlaylistChecked │ ├── playlist/ @@ -52,7 +54,16 @@ iptvc/ │ └── web/ │ ├── server.go # Server, Start(), StartBackgroundChecker() │ ├── handlers.go # HTTP-обработчики +│ ├── views.go # PlaylistView, ChannelView, PageData +│ ├── views_test.go # тесты представлений │ ├── templates.go # TemplateManager, //go:embed +│ ├── templates_test.go # тесты шаблонов +│ ├── openapi.go # OpenAPI-спецификация, Swagger UI +│ ├── openapi_test.go # тесты OpenAPI +│ ├── details_test.go # тесты страницы деталей плейлиста +│ ├── testdata/ # тестовые фикстуры +│ ├── swagger/ # встроенные файлы Swagger UI +│ ├── static/ # встроенные статические файлы (CSS, JS) │ └── views/ # HTML-шаблоны │ ├── base.html │ ├── list.html @@ -66,7 +77,8 @@ iptvc/ ### `app` Глобальный контейнер: `Args` (CLI-флаги), `Config` (конфигурация), `Cache` (Redis-клиент). -`Init()` загружает конфигурацию, инициализирует логгер и подключение к кешу. +`Init()` загружает конфигурацию и инициализирует логгер. +`InitCache()` подключается к KeyDB/Redis, если кеш включён. ### `app.config` @@ -86,8 +98,8 @@ iptvc/ Содержит логику проверки: - **`PrepareListsToCheck(files, urls, codes)`** — формирует список плейлистов из файлов, URL и кодов ini-файла. -- **`CheckPlaylists(lists)`** — параллельная проверка плейлистов (семфор `per-routine`), загрузка, парсинг, вызов `CheckChannels` для каждого. -- **`CheckChannels(pls)`** — параллельная проверка каналов (семфор `per-routine`), HTTP-запрос с `Range` header. +- **`CheckPlaylists(lists)`** — параллельная проверка плейлистов (семфор `max-routines`), загрузка, парсинг, вызов `CheckChannels` для каждого. +- **`CheckChannels(pls)`** — параллельная проверка каналов (семфор `max-routines`), HTTP-запрос с `Range` header. - **`OnPlaylistChecked`** — глобальный callback, вызывается после проверки каждого плейлиста. Используется веб-сервером для обновления in-memory кеша. - **`cachePlaylist(pls)`** — сохранение результата в Redis (если включён). @@ -108,7 +120,7 @@ iptvc/ - **`Server`** — структура: конфиг, кеш, шаблоны, in-memory кеш (`memCache` с `sync.RWMutex`). - **`Start()`** — запуск HTTP-сервера. - **`StartBackgroundChecker(opts)`** — фоновая проверка в отдельной горутине. -- **`CheckOptions`** — параметры: Every, Repeat, Random, Files, Urls, Codes. +- **`CheckOptions`** — параметры: Repeat, Random, Files, Urls, Codes. Маршруты (Go 1.22 patterns): @@ -152,9 +164,8 @@ StartBackgroundChecker: → check status + content type → OnPlaylistChecked(pls) → memCache update → one-cooldown sleep - → all-cooldown sleep - sleep(every) - if repeat > 0 && iteration >= repeat: stop + → all-cooldown sleep + if repeat > 0 && iteration >= repeat: stop ``` ## CLI-флаги @@ -191,14 +202,16 @@ StartBackgroundChecker: ### Глобальные (`cmd/root.go`) -| Флаг | Поле | Описание | -| --------------- | ----------------- | ----------------- | -| `--config` | `Args.ConfigPath` | Путь к config.yml | -| `-v, --verbose` | `Args.Verbose` | Подробный лог | +| Флаг | Поле | Описание | +| --------------- | ----------------- | ------------------- | +| `--config` | `Args.ConfigPath` | Путь к config.yml | +| `-v, --verbose` | `Args.Verbose` | Подробный лог | +| `--debug` | `Args.Debug` | Режим отладки | +| `--log-level` | `Args.LogLevel` | Уровень логирования | ## Конфигурация -Подробное описание параметров — в разделе [config.yml](../../common/config/config.md). +Подробное описание параметров — в разделе [config.yml](../../ref/config.md). Приоритет: Defaults < `config.yml` < Env < CLI-флаги. diff --git a/content/iptvc/dev/compile.md b/content/iptvc/dev/compile.md index e56fd9d..0679129 100644 --- a/content/iptvc/dev/compile.md +++ b/content/iptvc/dev/compile.md @@ -17,14 +17,17 @@ make linux ## Доступные рецепты Makefile -| Команда | Назначение | -| -------------- | ------------------------------------------------------------- | -| `make linux` | Сборка под Linux (amd64 по умолчанию) | -| `make win` | Сборка под Windows | -| `make darwin` | Сборка под macOS | -| `make release` | Сборка под все платформы (linux/windows/darwin × amd64/arm64) | -| `make clean` | Удаление скомпилированных бинарников | -| `make help` | Вывод списка доступных рецептов | +| Команда | Назначение | +| ---------------- | ------------------------------------------------------------- | +| `make linux` | Сборка под Linux (amd64 по умолчанию) | +| `make win` | Сборка под Windows | +| `make darwin` | Сборка под macOS | +| `make release` | Сборка под все платформы (linux/windows/darwin × amd64/arm64) | +| `make test` | Запуск всех тестов | +| `make clear` | Удаление скомпилированных бинарников | +| `make image` | Сборка Docker-образа для текущей платформы | +| `make image-all` | Сборка и отправка multi-arch манифеста в registry | +| `make help` | Вывод списка доступных рецептов | ## Управление архитектурой diff --git a/content/iptvc/dev/docker.md b/content/iptvc/dev/docker.md index 43f8197..c3373a1 100644 --- a/content/iptvc/dev/docker.md +++ b/content/iptvc/dev/docker.md @@ -8,22 +8,32 @@ tags: ["iptvc", "docker"] ## Сборка -Образ собирается из [Dockerfile](https://git.axenov.dev/IPTV/iptvc/src/branch/master/Dockerfile) — multi-stage сборка на базе `golang:1.25-alpine` с финальным образом `alpine:3.22`. +Образ собирается из [Dockerfile](https://git.axenov.dev/IPTV/iptvc/src/branch/master/Dockerfile) на базе `alpine:3.22.5`. + +Бинарный файл должен быть предварительно собран через `make linux` — Dockerfile берёт уже готовый бинарь из `bin/linux_${TARGETARCH}/iptvc`. ```bash -docker build -t iptvc ./iptvc +# Сборка бинарного файла и образа +make image + +# Сборка с указанием архитектуры +make image GOARCH=arm64 + +# Сборка с указанием тега +make image IMAGE_TAG=v1.1.3 ``` -Можно передать версию через build-arg: +Целевая архитектура задаётся через `GOARCH`: ```bash -docker build --build-arg IPTVC_VERSION=1.1.3 -t iptvc:v1.1.3 ./iptvc +make linux GOARCH=arm64 +make image GOARCH=arm64 ``` -Целевая платформа и архитектура задаются через `GOOS` и `GOARCH`: +Для публикации multi-arch манифеста в registry: ```bash -docker build --build-arg GOOS=linux --build-arg GOARCH=arm64 -t iptvc:linux-arm64 ./iptvc +make image-all ``` ## Запуск @@ -33,13 +43,13 @@ docker build --build-arg GOOS=linux --build-arg GOARCH=arm64 -t iptvc:linux-arm6 docker run --rm \ -v ./playlists.ini:/app/playlists.ini \ -v ./channels.json:/app/channels.json \ - iptvc check -i playlists.ini --repeat 0 --playlists-all-cooldown 60 + git.axenov.dev/iptv/iptvc:latest check -i playlists.ini --repeat 0 --playlists-all-cooldown 60 # Веб-сервер с фоновой проверкой docker run --rm -p 8800:8800 \ -v ./playlists.ini:/app/playlists.ini \ -v ./channels.json:/app/channels.json \ - iptvc serve -i playlists.ini -p 8800 --check + git.axenov.dev/iptv/iptvc:latest serve -i playlists.ini -p 8800 --check ``` ## Использование в compose diff --git a/content/iptvc/dev/docs/codicons.md b/content/iptvc/dev/docs/codicons.md index bdde406..0174464 100644 --- a/content/iptvc/dev/docs/codicons.md +++ b/content/iptvc/dev/docs/codicons.md @@ -1,4 +1,6 @@ -Информацию о лицензии см. на странице [Свободное ПО](../../../legal/license.md) +# Иконки codicons + +Информацию о лицензии см. на странице [Свободное ПО](../../../extra/legal/license.md) | Иконка | Код для вставки в текст | Код для вставки в frontmatter | | ------------------------------------------------ | -------------------------------------------------- | ------------------------------------------------ | diff --git a/content/iptvc/dev/local-dev.md b/content/iptvc/dev/local-dev.md index f0da736..e3b987d 100644 --- a/content/iptvc/dev/local-dev.md +++ b/content/iptvc/dev/local-dev.md @@ -53,9 +53,9 @@ make release Для работы `iptvc` нужны два файла рядом с бинарником: -- `playlists.ini` — список плейлистов. Формат описан в [справочнике форматов](../../common/formats/playlists.md). -- `channels.json` — правила тегов каналов. Формат описан в [справочнике форматов](../../common/formats/channels.md). -- `config.yml` — конфигурация программы. Описание — в [разделе config.yml](../../common/config/config.md). +- `playlists.ini` — список плейлистов. Формат описан в [справочнике форматов](../../ref/formats/playlists.md). +- `channels.json` — правила тегов каналов. Формат описан в [справочнике форматов](../../ref/formats/channels.md). +- `config.yml` — конфигурация программы. Описание — в [разделе config.yml](../../ref/config.md). ## Полное Docker-окружение diff --git a/content/iptvc/install.md b/content/iptvc/install.md index fe95519..f83a3a0 100644 --- a/content/iptvc/install.md +++ b/content/iptvc/install.md @@ -25,7 +25,7 @@ tags: ["iptvc"] ## Запуск релизного образа -Релизные docker-образы строятся для платформы `linux` и архитектуры `amd64`. +Релизные docker-образы строятся для платформы `linux` и архитектур `amd64` и `arm64`. Найти их можно здесь: diff --git a/content/iptvc/overview.md b/content/iptvc/overview.md index 060d7f4..6d0c9c2 100644 --- a/content/iptvc/overview.md +++ b/content/iptvc/overview.md @@ -49,7 +49,7 @@ hide: [toc] [start]: quickstart.md "Перейти к разделу" [site]: site/first-steps.md "Перейти к разделу" [cli]: commands/index.md "Перейти к разделу" -[cfg]: ../common/config/config.md "Перейти к разделу" +[cfg]: ../ref/config.md "Перейти к разделу" -Путь к локальному [ini-файлу](../../common/formats/playlists.md) с описанием плейлистов. +Путь к локальному [ini-файлу](formats/playlists.md) с описанием плейлистов. !!! info "Аргумент работает только для команд `check` и `serve --check`." @@ -145,7 +144,7 @@ cache: -Путь к локальному [json-файлу](../../common/formats/channels.md) с описанием тегов каналов. +Путь к локальному [json-файлу](formats/channels.md) с описанием тегов каналов. !!! info "Аргумент работает только для команд `check` и `serve --check`." @@ -224,10 +223,10 @@ cache: Мета-теги `` и `` для HTML-шаблонов. -| Поле | Переменная окружения | Описание | -| --- | --- | --- | -| `description` | `SITE_META_DESCRIPTION` | Описание сайта в meta-тегах | -| `keywords` | `SITE_META_KEYWORDS` | Ключевые слова через запятую | +| Поле | Переменная окружения | Описание | +| ------------- | ----------------------- | ---------------------------- | +| `description` | `SITE_META_DESCRIPTION` | Описание сайта в meta-тегах | +| `keywords` | `SITE_META_KEYWORDS` | Ключевые слова через запятую | --- @@ -240,15 +239,6 @@ cache: --- -### `site.header.title` { id=site-header-title } - - - -Заголовок сайта, отображается в `` и в navbar. -Переопределяется переменной окружения `SITE_TITLE` (см. [`site.title`](#site-title)). - ---- - ### `site.header.menu` { id=site-header-menu } Массив элементов [`Link`](#link) в шапке сайта. @@ -297,7 +287,7 @@ HTML-контент вкладки «Юридическая информация | `icon` | string | Имя иконки | | `children` | Link[] | Дочерние ссылки (выпадающее меню, один уровень вложенности) | ---8<-- "icons.md" +--8<-- "../common/config/icons.md" ```yaml title="Пример" site: diff --git a/content/common/formats/channels.md b/content/ref/formats/channels.md similarity index 100% rename from content/common/formats/channels.md rename to content/ref/formats/channels.md diff --git a/content/common/formats/m3u.md b/content/ref/formats/m3u.md similarity index 100% rename from content/common/formats/m3u.md rename to content/ref/formats/m3u.md diff --git a/content/common/formats/overview.md b/content/ref/formats/overview.md similarity index 100% rename from content/common/formats/overview.md rename to content/ref/formats/overview.md diff --git a/content/common/formats/playlists.md b/content/ref/formats/playlists.md similarity index 100% rename from content/common/formats/playlists.md rename to content/ref/formats/playlists.md diff --git a/content/common/players.md b/content/ref/players.md similarity index 88% rename from content/common/players.md rename to content/ref/players.md index d2af423..fca047f 100644 --- a/content/common/players.md +++ b/content/ref/players.md @@ -15,7 +15,7 @@ tags: ["плееры"] Обращайся к содержанию справа для быстрой навигации. !!! info "Здесь не хватает очень много подробностей" - Если ты имел дело с каким-то плеером, знаешь как его настроить или какие-то другие детали, я прошу тебя помочь [актуализировать эту страницу](support.md#participate), чтобы через это помочь другим пользователям с выбором и настройкой плеера под свои цели. + Если ты имел дело с каким-то плеером, знаешь как его настроить или какие-то другие детали, я прошу тебя помочь [актуализировать эту страницу](../extra/support.md#participate), чтобы через это помочь другим пользователям с выбором и настройкой плеера под свои цели. ## Кроссплатформенные @@ -33,17 +33,17 @@ tags: ["плееры"] Универсальный плеер практически для любого мультимедиа-контента. ??? image "Главное окно" - ![](_assets/players/vlc/main.jpg) + ![](../extra/_assets/players/vlc/main.jpg) ??? image "Добавление плейлиста на десктопе" !!! warning "Указание протокола `https://` обязательно!" - ![](_assets/players/vlc/add1.jpg) - ![](_assets/players/vlc/add2.jpg) + ![](../extra/_assets/players/vlc/add1.jpg) + ![](../extra/_assets/players/vlc/add2.jpg) ??? image "Добавление плейлиста на андроиде" !!! warning "Указание протокола `https://` обязательно!" - ![](_assets/players/vlc/add1-mob.jpg) - ![](_assets/players/vlc/add2-mob.jpg) + ![](../extra/_assets/players/vlc/add1-mob.jpg) + ![](../extra/_assets/players/vlc/add2-mob.jpg) ### :thumbsup: IPTVnator @@ -58,12 +58,12 @@ tags: ["плееры"] Если использовать веб-версию, то настройки сохраняются в браузере. ??? image "Главное окно" - ![](_assets/players/iptvnator/main.jpg) + ![](../extra/_assets/players/iptvnator/main.jpg) ??? image "Добавление плейлиста" !!! warning "Указание протокола `https://` обязательно!" - ![](_assets/players/iptvnator/add1.jpg) - ![](_assets/players/iptvnator/add2.jpg) + ![](../extra/_assets/players/iptvnator/add1.jpg) + ![](../extra/_assets/players/iptvnator/add2.jpg) ### IPTV Web Player @@ -75,11 +75,11 @@ tags: ["плееры"] Подгрузка и отображение телепрограммы (используется https://cdn.epg.one/epg2.xml). ??? image "Главное окно" - ![](_assets/players/iptv-web-player/main.jpg) + ![](../extra/_assets/players/iptv-web-player/main.jpg) ??? image "Добавление плейлиста" !!! success "Указание протокола `https://` необязательно!" - ![](_assets/players/iptv-web-player/add.jpg) + ![](../extra/_assets/players/iptv-web-player/add.jpg) ### Kodi @@ -136,11 +136,11 @@ tags: ["плееры"] Поддерживает плейлисты по ссылкам, сторонние телепрограммы, группировку каналов, изменение плейлистов и многое другое. ??? image "Главное окно" - ![](_assets/players/yuki-iptv/main.jpg) + ![](../extra/_assets/players/yuki-iptv/main.jpg) ??? image "Добавление плейлиста" !!! warning "Указание протокола `https://` обязательно!" - ![](_assets/players/yuki-iptv/add.jpg) + ![](../extra/_assets/players/yuki-iptv/add.jpg) --- @@ -174,18 +174,18 @@ tags: ["плееры"] * Скачать: [play.google.com](https://play.google.com/store/apps/details?id=com.ottplay.ottplay) ??? image "Главный экран" - ![](_assets/players/televizo/main1.jpg) - ![](_assets/players/televizo/main2.jpg) + ![](../extra/_assets/players/televizo/main1.jpg) + ![](../extra/_assets/players/televizo/main2.jpg) ??? image "Добавление плейлиста" !!! warning "Указание протокола `https://` обязательно!" - ![](_assets/players/televizo/add1.jpg) - ![](_assets/players/televizo/add2.jpg) + ![](../extra/_assets/players/televizo/add1.jpg) + ![](../extra/_assets/players/televizo/add2.jpg) Из настроек: - ![](_assets/players/televizo/add21.jpg) - ![](_assets/players/televizo/add22.jpg) + ![](../extra/_assets/players/televizo/add21.jpg) + ![](../extra/_assets/players/televizo/add22.jpg) И дальше те же шаги 3-5 на скриншотах выше. @@ -202,16 +202,16 @@ tags: ["плееры"] Программу передач нужно [подключать отдельной ссылкой](../aggregator/faq.md#epg), из плейлиста не тянет. ??? image "Главный экран" - ![](_assets/players/m3u/main.jpg) + ![](../extra/_assets/players/m3u/main.jpg) ??? image "Добавление плейлиста" !!! warning "Указание протокола `https://` обязательно!" - ![](_assets/players/m3u/add1.jpg) - ![](_assets/players/m3u/add2.jpg) + ![](../extra/_assets/players/m3u/add1.jpg) + ![](../extra/_assets/players/m3u/add2.jpg) ??? image "Установка User-Agent" - ![](_assets/players/m3u/ua1.jpg) - ![](_assets/players/m3u/ua2.jpg) + ![](../extra/_assets/players/m3u/ua1.jpg) + ![](../extra/_assets/players/m3u/ua2.jpg) #### IPTV (Александр Софронов) diff --git a/inline_badges.py b/inline_badges.py index 6e27cc5..9af0945 100644 --- a/inline_badges.py +++ b/inline_badges.py @@ -15,7 +15,7 @@ SHORTCODE_RE = re.compile(r"<!--\s*md:(env|arg|config|version|default|beta)\s*(. # нет страницы `/iptvc/config` — соответствующий раздел живёт в # `content/common/config/config.md`. С `use_directory_urls = false` конечные # ссылки должны включать `.html`. -CONFIG_PAGE = "/common/config/config.html" +CONFIG_PAGE = "/ref/config.html" class BadgePreprocessor(Preprocessor): diff --git a/zensical.toml b/zensical.toml index 9554b70..69decdf 100644 --- a/zensical.toml +++ b/zensical.toml @@ -24,7 +24,6 @@ nav = [ {"Агрегатор" = [ "aggregator/overview.md", "aggregator/selection.md", - "aggregator/checks.md", "aggregator/statuspage.md", "aggregator/faq.md", ]}, @@ -35,6 +34,7 @@ nav = [ "iptvc/site/first-steps.md", "iptvc/site/list.md", "iptvc/site/details.md", + "iptvc/site/checks.md", "iptvc/site/connect.md", "iptvc/site/deploy.md", ]}, @@ -57,27 +57,25 @@ nav = [ ]}, ]}, {"Справочник" = [ - "common/players.md", - {"Конфигурация iptvc" = [ - "common/config/config.md", - ]}, + "ref/config.md", + "ref/players.md", # {"Для документации" = [ # "iptvc/dev/docs/components.md", # "iptvc/dev/docs/codicons.md", # ]}, {"Форматы файлов" = [ - "common/formats/playlists.md", - "common/formats/channels.md", - "common/formats/m3u.md", + "ref/formats/playlists.md", + "ref/formats/channels.md", + "ref/formats/m3u.md", ]}, ]}, {"Дополнительно" = [ - "common/docs.md", - "common/support.md", + "extra/docs.md", + "extra/support.md", {"Правовая информация" = [ - "legal/copyrights.md", - "legal/license.md", - "legal/foss.md", + "extra/legal/copyrights.md", + "extra/legal/license.md", + "extra/legal/foss.md", ]}, ]}, ]