From d5ed0a35ee8252ec9399d68585c1abf5967c6108 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 12 May 2023 00:18:58 +0300 Subject: [PATCH] Renamed channel.id to channel.xmltv_id --- src/Channel.js | 30 +++---- src/Program.js | 190 +++++++++++++++++++++--------------------- src/xmltv.js | 2 +- tests/Channel.test.js | 23 +---- tests/bin.test.js | 2 +- 5 files changed, 113 insertions(+), 134 deletions(-) diff --git a/src/Channel.js b/src/Channel.js index e73e744..55a6e6a 100644 --- a/src/Channel.js +++ b/src/Channel.js @@ -1,23 +1,23 @@ class Channel { - constructor(c) { - const data = { - id: c.id || c.xmltv_id, - name: c.name, - site: c.site || '', - site_id: c.site_id, - lang: c.lang || '', - logo: c.logo || '', - url: c.url || toURL(c.site) - } + constructor(c) { + const data = { + xmltv_id: c.xmltv_id, + name: c.name, + site: c.site || '', + site_id: c.site_id, + lang: c.lang || '', + logo: c.logo || '', + url: c.url || toURL(c.site) + } - for (let key in data) { - this[key] = data[key] - } - } + for (let key in data) { + this[key] = data[key] + } + } } module.exports = Channel function toURL(site) { - return site ? `https://${site}` : '' + return site ? `https://${site}` : '' } diff --git a/src/Program.js b/src/Program.js index 09c2dcf..7932a76 100644 --- a/src/Program.js +++ b/src/Program.js @@ -3,140 +3,140 @@ const { toArray, toUnix, parseNumber } = require('./utils') const Channel = require('./Channel') class Program { - constructor(p, c) { - if (!(c instanceof Channel)) { - throw new Error('The second argument in the constructor must be the "Channel" class') - } + constructor(p, c) { + if (!(c instanceof Channel)) { + throw new Error('The second argument in the constructor must be the "Channel" class') + } - const data = { - site: c.site || '', - channel: c.id || '', - titles: toArray(p.titles || p.title).map(text => toTextObject(text, c.lang)), - sub_titles: toArray(p.sub_titles || p.sub_title).map(text => toTextObject(text, c.lang)), - descriptions: toArray(p.descriptions || p.description || p.desc).map(text => - toTextObject(text, c.lang) - ), - icon: toIconObject(p.icon), - episodeNumbers: p.episodeNum || p.episodeNumbers || getEpisodeNumbers(p.season, p.episode), - date: p.date ? toUnix(p.date) : null, - start: p.start ? toUnix(p.start) : null, - stop: p.stop ? toUnix(p.stop) : null, - urls: toArray(p.urls || p.url).map(toUrlObject), - ratings: toArray(p.ratings || p.rating).map(toRatingObject), - categories: toArray(p.categories || p.category).map(text => toTextObject(text, c.lang)), - directors: toArray(p.directors || p.director).map(toPersonObject), - actors: toArray(p.actors || p.actor).map(toPersonObject), - writers: toArray(p.writers || p.writer).map(toPersonObject), - adapters: toArray(p.adapters || p.adapter).map(toPersonObject), - producers: toArray(p.producers || p.producer).map(toPersonObject), - composers: toArray(p.composers || p.composer).map(toPersonObject), - editors: toArray(p.editors || p.editor).map(toPersonObject), - presenters: toArray(p.presenters || p.presenter).map(toPersonObject), - commentators: toArray(p.commentators || p.commentator).map(toPersonObject), - guests: toArray(p.guests || p.guest).map(toPersonObject) - } + const data = { + site: c.site || '', + channel: c.xmltv_id || '', + titles: toArray(p.titles || p.title).map(text => toTextObject(text, c.lang)), + sub_titles: toArray(p.sub_titles || p.sub_title).map(text => toTextObject(text, c.lang)), + descriptions: toArray(p.descriptions || p.description || p.desc).map(text => + toTextObject(text, c.lang) + ), + icon: toIconObject(p.icon), + episodeNumbers: p.episodeNum || p.episodeNumbers || getEpisodeNumbers(p.season, p.episode), + date: p.date ? toUnix(p.date) : null, + start: p.start ? toUnix(p.start) : null, + stop: p.stop ? toUnix(p.stop) : null, + urls: toArray(p.urls || p.url).map(toUrlObject), + ratings: toArray(p.ratings || p.rating).map(toRatingObject), + categories: toArray(p.categories || p.category).map(text => toTextObject(text, c.lang)), + directors: toArray(p.directors || p.director).map(toPersonObject), + actors: toArray(p.actors || p.actor).map(toPersonObject), + writers: toArray(p.writers || p.writer).map(toPersonObject), + adapters: toArray(p.adapters || p.adapter).map(toPersonObject), + producers: toArray(p.producers || p.producer).map(toPersonObject), + composers: toArray(p.composers || p.composer).map(toPersonObject), + editors: toArray(p.editors || p.editor).map(toPersonObject), + presenters: toArray(p.presenters || p.presenter).map(toPersonObject), + commentators: toArray(p.commentators || p.commentator).map(toPersonObject), + guests: toArray(p.guests || p.guest).map(toPersonObject) + } - for (let key in data) { - this[key] = data[key] - } - } + for (let key in data) { + this[key] = data[key] + } + } } module.exports = Program function toTextObject(text, lang) { - if (typeof text === 'string') { - return { value: text, lang } - } + if (typeof text === 'string') { + return { value: text, lang } + } - return { - value: text.value, - lang: text.lang - } + return { + value: text.value, + lang: text.lang + } } function toPersonObject(person) { - if (typeof person === 'string') { - return { - value: person, - url: [], - image: [] - } - } + if (typeof person === 'string') { + return { + value: person, + url: [], + image: [] + } + } - return { - value: person.value, - url: toArray(person.url).map(toUrlObject), - image: toArray(person.image).map(toImageObject) - } + return { + value: person.value, + url: toArray(person.url).map(toUrlObject), + image: toArray(person.image).map(toImageObject) + } } function toImageObject(image) { - if (typeof image === 'string') return { type: '', size: '', orient: '', system: '', value: image } + if (typeof image === 'string') return { type: '', size: '', orient: '', system: '', value: image } - return { - type: image.type || '', - size: image.size || '', - orient: image.orient || '', - system: image.system || '', - value: image.value - } + return { + type: image.type || '', + size: image.size || '', + orient: image.orient || '', + system: image.system || '', + value: image.value + } } function toRatingObject(rating) { - if (typeof rating === 'string') return { system: '', icon: '', value: rating } + if (typeof rating === 'string') return { system: '', icon: '', value: rating } - return { - system: rating.system || '', - icon: rating.icon || '', - value: rating.value || '' - } + return { + system: rating.system || '', + icon: rating.icon || '', + value: rating.value || '' + } } function toUrlObject(url) { - if (typeof url === 'string') return { system: '', value: url } + if (typeof url === 'string') return { system: '', value: url } - return { - system: url.system || '', - value: url.value || '' - } + return { + system: url.system || '', + value: url.value || '' + } } function toIconObject(icon) { - if (!icon) return { src: '' } - if (typeof icon === 'string') return { src: icon } + if (!icon) return { src: '' } + if (typeof icon === 'string') return { src: icon } - return { - src: icon.src || '' - } + return { + src: icon.src || '' + } } function getEpisodeNumbers(s, e) { - s = parseNumber(s) - e = parseNumber(e) + s = parseNumber(s) + e = parseNumber(e) - return [createXMLTVNS(s, e), createOnScreen(s, e)].filter(Boolean) + return [createXMLTVNS(s, e), createOnScreen(s, e)].filter(Boolean) } function createXMLTVNS(s, e) { - if (!e) return null - s = s || 1 + if (!e) return null + s = s || 1 - return { - system: 'xmltv_ns', - value: `${s - 1}.${e - 1}.0/1` - } + return { + system: 'xmltv_ns', + value: `${s - 1}.${e - 1}.0/1` + } } function createOnScreen(s, e) { - if (!e) return null - s = s || 1 + if (!e) return null + s = s || 1 - s = padStart(s, 2, '0') - e = padStart(e, 2, '0') + s = padStart(s, 2, '0') + e = padStart(e, 2, '0') - return { - system: 'onscreen', - value: `S${s}E${e}` - } + return { + system: 'onscreen', + value: `S${s}E${e}` + } } diff --git a/src/xmltv.js b/src/xmltv.js index 6415f12..c28d393 100644 --- a/src/xmltv.js +++ b/src/xmltv.js @@ -29,7 +29,7 @@ function createElements(channels, programs, date) { ...channels.map(channel => { return ( '\r\n' + - el('channel', { id: channel.id }, [ + el('channel', { id: channel.xmltv_id }, [ el('display-name', {}, [escapeString(channel.name)]), el('icon', { src: channel.logo }), el('url', {}, [channel.url]) diff --git a/tests/Channel.test.js b/tests/Channel.test.js index dfd7c36..5b24d35 100644 --- a/tests/Channel.test.js +++ b/tests/Channel.test.js @@ -12,28 +12,7 @@ it('can create new Channel', () => { expect(channel).toMatchObject({ name: '1 TV', - id: '1TV.com', - site_id: '1', - site: 'example.com', - url: 'https://example.com', - lang: 'fr', - logo: 'https://example.com/logos/1TV.png' - }) -}) - -it('can create channel from exist object', () => { - const channel = new Channel({ - name: '1 TV', - id: '1TV.com', - site_id: '1', - site: 'example.com', - lang: 'fr', - logo: 'https://example.com/logos/1TV.png' - }) - - expect(channel).toMatchObject({ - name: '1 TV', - id: '1TV.com', + xmltv_id: '1TV.com', site_id: '1', site: 'example.com', url: 'https://example.com', diff --git a/tests/bin.test.js b/tests/bin.test.js index b67b290..c86c3cc 100644 --- a/tests/bin.test.js +++ b/tests/bin.test.js @@ -71,7 +71,7 @@ it('can produce multiple outputs', () => { `node ${pwd}/bin/epg-grabber.js \ --config=tests/__data__/input/mini.config.js \ --channels=tests/__data__/input/example.channels.xml \ - --output=tests/__data__/output/{lang}/{id}.xml`, + --output=tests/__data__/output/{lang}/{xmltv_id}.xml`, { encoding: 'utf8' }