Feat: Added support for new tags in XMLTV

This commit is contained in:
Johnnybegood90
2026-03-14 13:36:12 +01:00
parent fc608ee0e0
commit 674c13ae26
6 changed files with 72 additions and 8 deletions
+33 -1
View File
@@ -106,6 +106,34 @@ function fmtEpisode(season, episode) {
return null;
}
function parseCategories(p) {
const seen = new Set();
const categories = [];
p.querySelectorAll('category').forEach(cat => {
const value = (cat.textContent || '').trim();
const key = value.toLowerCase();
if (!value || seen.has(key)) return;
seen.add(key);
categories.push(value);
});
return categories;
}
function formatCategories(categories) {
return Array.isArray(categories) && categories.length ? categories.join(' · ') : '';
}
function parseAirDate(value) {
if (!value) return null;
const match = String(value).trim().match(/^(\d{4})/);
return match ? match[1] : null;
}
function parseRatingValue(p) {
const rating = p.querySelector('rating > value')?.textContent || '';
return rating.trim() || null;
}
function parseAndRender(doc) {
channels = []; programs = {};
doc.querySelectorAll('channel').forEach(ch => {
@@ -124,9 +152,13 @@ function parseAndRender(doc) {
const start = parseXMLTVDate(p.getAttribute('start'));
const stop = parseXMLTVDate(p.getAttribute('stop'));
const title = p.querySelector('title')?.textContent || '';
const subtitle = p.querySelector('sub-title')?.textContent || '';
const desc = p.querySelector('desc')?.textContent || '';
const categories = parseCategories(p);
const airDate = parseAirDate(p.querySelector('date')?.textContent || '');
const rating = parseRatingValue(p);
const epInfo = parseEpisode(p);
if (start && stop) programs[chId].push({ start, stop, title, desc, ...epInfo });
if (start && stop) programs[chId].push({ start, stop, title, subtitle, desc, categories, airDate, rating, ...epInfo });
});
Object.keys(programs).forEach(id => programs[id].sort((a,b) => a.start - b.start));