Добавлено процентное отношение (не)рабочих каналов на страницу плейлиста

This commit is contained in:
2025-10-21 12:26:19 +08:00
parent 1f0337768e
commit 3eb29a169d
2 changed files with 17 additions and 10 deletions

View File

@@ -60,14 +60,19 @@ class IniFile
'attributes' => [],
'groups' => [],
'channels' => [],
'onlineCount' => 0,
'offlineCount' => 0,
'checkedAt' => null,
];
} elseif (!isset($data['attributes'])) {
$data['attributes'] = [];
}
$data['onlinePercent'] = 0;
$data['offlinePercent'] = 0;
if ($data['isOnline'] === true && count($data['channels'] ?? []) > 0) {
$data['onlinePercent'] = round($data['onlineCount'] / count($data['channels'] ?? []) * 100);
$data['offlinePercent'] = round($data['offlineCount'] / count($data['channels'] ?? []) * 100);
}
$data['hasCatchup'] = str_contains($data['content'] ?? '', 'catchup');
$data['hasTvg'] = !empty($data['attributes']['url-tvg'])
|| !empty($data['attributes']['x-tvg-url']);

View File

@@ -82,10 +82,10 @@
<th class="text-break">
{% if playlist.isOnline is same as(true) %}
<span class="font-monospace text-success">{{ playlist.code }}</span>
<span class="badge small text-dark bg-success">онлайн</span>
<span class="badge small text-dark bg-success">online</span>
{% elseif playlist.isOnline is same as(false) %}
<span class="font-monospace text-danger">{{ playlist.code }}</span>
<span class="badge small text-dark bg-danger">оффлайн</span>
<span class="badge small text-dark bg-danger">offline</span>
{% elseif playlist.isOnline is same as(null) %}
<span class="font-monospace">{{ playlist.code }}</span>
<span class="badge small text-dark bg-secondary" title="Не проверялся">unknown</span>
@@ -116,16 +116,18 @@
<tr>
<th scope="row">Наполнение</th>
<td class="text-break">
<ion-icon name="folder-open-outline"></ion-icon>&nbsp;группы:&nbsp;{{ playlist.groups|length }},
<ion-icon name="videocam-outline"></ion-icon>&nbsp;каналы:&nbsp;{{ playlist.channels|length }}
(<span class="text-success">{{ playlist.onlineCount }}</span>&nbsp;+&nbsp;<span class="text-danger">{{ playlist.offlineCount }}</span>)
<ion-icon name="folder-open-outline"></ion-icon>&nbsp;группы:&nbsp;{{ playlist.groups|length }}<br>
<ion-icon name="videocam-outline"></ion-icon>&nbsp;каналы:&nbsp;{{ playlist.channels|length }}:
<span class="text-success"
>{{ playlist.onlineCount }} ({{ playlist.onlinePercent }}%)</span>&nbsp;+&nbsp;<span class="text-danger"
>{{ playlist.offlineCount }} ({{ playlist.offlinePercent }}%)</span>
</td>
</tr>
<tr>
<th scope="row">Возможности</th>
<td class="text-break">
<ion-icon name="newspaper-outline"></ion-icon>&nbsp;Программа передач:&nbsp;{{ playlist.hasTvg ? 'есть' : 'нет' }}<br>
<ion-icon name="play-back"></ion-icon>&nbsp;Перемотка (архив):&nbsp;{{ playlist.hasCatchup ? 'есть' : 'нет' }}
<ion-icon name="play-back"></ion-icon>&nbsp;Перемотка&nbsp;(архив):&nbsp;{{ playlist.hasCatchup ? 'есть' : 'нет' }}
</td>
</tr>
<tr class="text-secondary">
@@ -315,7 +317,7 @@
for="chfOnline"
title="Выбрать только онлайн каналы"
>
<ion-icon name="radio-button-on-outline"></ion-icon>
<ion-icon name="radio-button-on-outline"></ion-icon>{{ playlist.onlineCount }}
</label>
<input type="radio"
@@ -329,7 +331,7 @@
for="chfOffline"
title="Выбрать только оффлайн каналы"
>
<ion-icon name="radio-button-on-outline"></ion-icon>
<ion-icon name="radio-button-on-outline"></ion-icon>{{ playlist.offlineCount }}
</label>
<button type="button"