Программа передач¶
Программа передач в Catena приходит файлами XMLTV: оператор заводит источник, сервер скачивает файл по расписанию и хранит передачи тех каналов, которые привязаны к стримам. Дальше сетка расходится всем потребителям сразу — витрине зрителя, карточке канала в консоли и выгрузке XMLTV для сторонних плееров.
Раздел консоли — Программа передач.
Заведите источник¶
Нажмите Добавить источник и заполните поля:
- Имя — как источник зовётся в консоли; должно быть уникальным в установке.
- Адрес файла — откуда качать выгрузку XMLTV. Годится и сжатый gzip'ом файл: сжатие определяется по содержимому, а не по расширению адреса.
- Обновлять раз в, часов — период планового обновления.
- Хранить историю, суток — сколько прошедших передач держать в базе.

Один источник обычно покрывает много каналов: у провайдера это один файл на весь пакет.
Привяжите стримы к каналам файла¶
Пока ни один стрим не привязан, импорт сохраняет каталог каналов файла, но не сами передачи: хранить расписание четырёх тысяч каналов, из которых вещается двести, незачем.
Привязка живёт в настройках стрима, блок Программа передач:
- Источник программы — из какого источника берётся расписание. Источник у стрима один.
- EPG-канал — идентификатор канала внутри этого файла.

Один EPG-канал можно привязать ко многим стримам: у SD- и HD-версии одного вещания расписание общее. Обратного не бывает — двух расписаний у стрима нет, и слияния сеток из разных источников тоже нет.
Если канал исчез из свежего файла, привязка остаётся и помечается как Этого EPG-канала нет в каталоге источника. Это витринное состояние, а не поломка: чинится либо выбором другого канала, либо возвращением прежнего в выгрузку.
Новая привязка не ждёт планового захода — сервер переимпортирует источник сам, объединяя подряд идущие правки в один заход. Для переимпорта берётся сохранённый файл, повторной загрузки по сети не происходит.
Каталог каналов файла¶
Вкладка Каталог каналов показывает всё, что объявил файл, включая каналы, которыми ещё не пользуется ни один стрим: идентификатор, названия, число передач и привязанные вещания. Поиск идёт по названию и по идентификатору сразу — провайдеры дают по нескольку псевдонимов на канал.

Массовое назначение¶
Кнопка Подобрать по названию сопоставляет стримы каналам каталога и показывает предложение. Предложение — не решение: записывается только отмеченное, и каждую строку можно исправить до нажатия Назначить.

Это основной способ завести сетку на существующей установке: руками привязывать две сотни стримов никто не будет.
Что происходит при импорте¶
Кнопка Обновить сейчас запускает загрузку немедленно. Плановое и ручное обновление всегда качают файл заново — «обновить» не подсунет вчерашнее.
Импорт заменяет окно: содержимое интервала, который описывает файл, приводится в точное соответствие файлу. Сдвинутая передача переезжает, отменённая исчезает, а история за пределами окна остаётся нетронутой. Читатель при этом видит либо прежнюю сетку, либо новую, но не смесь.
Дефектный элемент файла пропускается с предупреждением и не рушит заход целиком; прерывает разбор только непарсимый XML — например, страница ошибки провайдера вместо выгрузки. В этом случае ранее сохранённая сетка не меняется.
Второй запуск импорта того же источника, пока идёт первый, отклоняется — идущий заход не прерывается и не дублируется.
История загрузок¶
У каждого источника видна Последняя загрузка, а вкладка История загрузок хранит предыдущие. Статусы:
- ещё не качали — источник только что заведён;
- идёт — заход в работе, сообщение называет текущий этап;
- успешно — файл разобран и записан;
- ошибка — сообщение объясняет причину.
Рядом со статусом стоят счётчики: Передач (найдено в файле), Сохранено, Каналов в файле, Привязано. Это и есть ответ на вопрос «почему сетка пустая»: успешный заход с сотнями каналов и нулём привязанных означает, что файл в порядке, а привязок нет.
Где сетка видна¶
- Витрина зрителя — сетка по жёлтой кнопке и догон передач из архива (Витрина).
- Карточка канала в консоли — блок Программа передач с ближайшими сутками.
- Выгрузка XMLTV — тот же каталог для стороннего плеера (Плейлист и XMLTV).
Сетка всегда читается окном: обе границы обязательны, а пролёт и длина списка ограничены сверху — не больше 7 суток и 200 вещаний на запрос. Слишком широкий запрос отклоняется с указанием предела, а не молча урезается.
Зритель получает только свои каналы: формула доступа применяется до чтения сетки, и канал вне его пакетов не появится в ответе, даже если назвать его явно.
Логотипы каналов¶
Выгрузка объявляет для канала не только название, но и значок. Catena скачивает его сама и хранит байтами: адрес провайдера в ответе не появляется, иначе за картинкой в чужую сеть ходил бы каждый зритель, в том числе телевизор, у которого выхода наружу нет.
В карточке канала логотип и название предлагаются, а не применяются сами — своё название и своя картинка оператора не затираются импортом. Если у канала не назначен стрим, предлагать нечего: логотип берётся по цепочке «стрим → привязка → канал файла».
Разбор пустой сетки¶
По порядку, сверху вниз:
- Заход в ошибке — читайте сообщение: чаще всего по адресу отдаётся не выгрузка, а страница ошибки или требование авторизации.
- Заход успешен, привязано ноль — привяжите стримы, вручную или массовым назначением.
- Привязка есть, передач нет — проверьте, что у канала в каталоге ненулевое число передач: провайдер мог отдать файл без этого канала.
- Передачи есть, а витрина пуста — проверьте, что канал катены ссылается на этот стрим: сетка адресуется вещанием, и канал без стрима расписания не имеет.
Что дальше¶
- Витрина — как сетку видит зритель.
- Плейлист и XMLTV — выгрузка сетки для сторонних плееров.
- Каналы — связь канала катены со стримом.