Skip to content

Commit f1fb732

Browse files
committed
Updated date tag added length
1 parent 1d9a836 commit f1fb732

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

src/xmltv.ts

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,16 +106,45 @@ export function buildProgramsXml(data: GridApiResponse): string {
106106
xml += ` <desc>${escapeXml(event.program.shortDesc)}</desc>\n`;
107107
}
108108

109+
// Date logic: releaseYear first, else current date from startTime (America/New_York)
110+
if (event.program.releaseYear) {
111+
xml += ` <date>${escapeXml(event.program.releaseYear)}</date>
112+
`;
113+
} else {
114+
const nyFormatter = new Intl.DateTimeFormat("en-US", {
115+
timeZone: "America/New_York",
116+
year: "numeric",
117+
month: "2-digit",
118+
day: "2-digit"
119+
});
120+
const parts = nyFormatter.formatToParts(new Date(event.startTime));
121+
const year = parseInt(parts.find(p => p.type === "year")?.value || "1970", 10);
122+
const mm = parts.find(p => p.type === "month")?.value || "01";
123+
const dd = parts.find(p => p.type === "day")?.value || "01";
124+
xml += ` <date>${year}${mm}${dd}</date>
125+
`;
126+
}
127+
128+
109129
const genreSet = new Set(event.program.genres?.map(g => g.toLowerCase()) || []);
110130

111131
if (event.program.genres && event.program.genres.length > 0) {
112132
const sortedGenres = [...event.program.genres].sort((a, b) => a.localeCompare(b));
113133
for (const genre of sortedGenres) {
114134
const capitalizedGenre = genre.charAt(0).toUpperCase() + genre.slice(1);
115-
xml += ` <category lang="en">${escapeXml(capitalizedGenre)}</category>\n`;
135+
xml += ` <category lang="en">${escapeXml(capitalizedGenre)}</category>
136+
`;
137+
116138
}
117139
}
118140

141+
// add <length> after categories
142+
if (event.duration) {
143+
xml += ` <length units="minutes">${escapeXml(event.duration)}</length>
144+
`;
145+
}
146+
147+
119148
if (event.rating) {
120149
xml += ` <rating system="MPAA"><value>${escapeXml(
121150
event.rating,
@@ -184,8 +213,6 @@ export function buildProgramsXml(data: GridApiResponse): string {
184213
});
185214
const parts = nyFormatter.formatToParts(new Date(event.startTime));
186215
const year = parseInt(parts.find(p => p.type === "year")?.value || "1970", 10);
187-
const mm = parts.find(p => p.type === "month")?.value || "01";
188-
const dd = parts.find(p => p.type === "day")?.value || "01";
189216
const episodeIdx = parseInt(event.program.episode, 10);
190217
if (!isNaN(episodeIdx)) {
191218
const xmltvNsTag = ` <episode-num system="xmltv_ns">${year - 1}.${episodeIdx - 1}.0/1</episode-num>\n`;
@@ -195,8 +222,7 @@ export function buildProgramsXml(data: GridApiResponse): string {
195222
episodeNumTags.push(xmltvNsTag);
196223
}
197224
}
198-
const dateStr = `${year}${mm}${dd}`;
199-
xml += ` <date>${dateStr}</date>\n`;
225+
200226
} else if (!event.program.episode && event.program.id) {
201227
const match = event.program.id.match(/^(..\d{8})(\d{4})/);
202228
if (match) {
@@ -214,8 +240,6 @@ export function buildProgramsXml(data: GridApiResponse): string {
214240
const year = parseInt(parts.find(p => p.type === "year")?.value || "1970", 10);
215241
const mm = parts.find(p => p.type === "month")?.value || "01";
216242
const dd = parts.find(p => p.type === "day")?.value || "01";
217-
const dateStr = `${year}${mm}${dd}`;
218-
xml += ` <date>${dateStr}</date>\n`;
219243

220244
if (!skipXmltvNs) {
221245
const mmddNum = parseInt(`${mm}${dd}`, 10);
@@ -234,8 +258,7 @@ export function buildProgramsXml(data: GridApiResponse): string {
234258
if (event.program.originalAirDate || event.program.episodeAirDate) {
235259
const airDate = new Date(event.program.episodeAirDate || event.program.originalAirDate || '');
236260
if (!isNaN(airDate.getTime())) {
237-
const dateStr = airDate.toISOString().slice(0, 10).replace(/-/g, "");
238-
xml += ` <date>${dateStr}</date>\n`;
261+
239262
xml += ` <episode-num system="original-air-date">${airDate.toISOString().replace("T", " ").split(".")[0]}</episode-num>\n`;
240263
}
241264
}

0 commit comments

Comments
 (0)