Update utils.js

This commit is contained in:
Aleksandr Statciuk 2021-10-06 00:38:38 +03:00
parent b498d24815
commit c74b87f8dc
1 changed files with 10 additions and 26 deletions

View File

@ -22,10 +22,6 @@ utils.loadConfig = function (options) {
const configPath = path.resolve(file) const configPath = path.resolve(file)
const config = require(configPath) const config = require(configPath)
if (options.channels) config.channels = options.channels
else if (config.channels) config.channels = path.join(path.dirname(file), config.channels)
else throw new Error("The required 'channels' property is missing")
if (!config.site) throw new Error("The required 'site' property is missing") if (!config.site) throw new Error("The required 'site' property is missing")
if (!config.url) throw new Error("The required 'url' property is missing") if (!config.url) throw new Error("The required 'url' property is missing")
if (typeof config.url !== 'function' && typeof config.url !== 'string') if (typeof config.url !== 'function' && typeof config.url !== 'string')
@ -60,8 +56,7 @@ utils.parseChannels = function (filename) {
const xml = fs.readFileSync(path.resolve(filename), { encoding: 'utf-8' }) const xml = fs.readFileSync(path.resolve(filename), { encoding: 'utf-8' })
const result = convert.xml2js(xml) const result = convert.xml2js(xml)
const site = result.elements.find(el => el.name === 'site') const channels = result.elements.find(el => el.name === 'channels')
const channels = site.elements.find(el => el.name === 'channels')
return channels.elements return channels.elements
.filter(el => el.name === 'channel') .filter(el => el.name === 'channel')
@ -69,16 +64,13 @@ utils.parseChannels = function (filename) {
const channel = el.attributes const channel = el.attributes
if (!el.elements) throw new Error(`Channel '${channel.xmltv_id}' has no valid name`) if (!el.elements) throw new Error(`Channel '${channel.xmltv_id}' has no valid name`)
channel.name = el.elements.find(el => el.type === 'text').text channel.name = el.elements.find(el => el.type === 'text').text
channel.site = channel.site || site.attributes.site
return channel return channel
}) })
} }
utils.sleep = function (ms) { utils.sleep = function (ms) {
return function (x) { return new Promise(resolve => setTimeout(resolve, ms))
return new Promise(resolve => setTimeout(() => resolve(x), ms))
}
} }
utils.escapeString = function (string, defaultValue = '') { utils.escapeString = function (string, defaultValue = '') {
@ -199,7 +191,7 @@ utils.getRequestHeaders = async function (item, config) {
} }
return headers return headers
} }
return config.request.headers return config.request.headers || null
} }
utils.getRequestData = async function (item, config) { utils.getRequestData = async function (item, config) {
@ -210,7 +202,7 @@ utils.getRequestData = async function (item, config) {
} }
return data return data
} }
return config.request.data return config.request.data || null
} }
utils.getRequestUrl = async function (item, config) { utils.getRequestUrl = async function (item, config) {
@ -229,28 +221,20 @@ utils.getUTCDate = function () {
} }
utils.parseResponse = async (item, response, config) => { utils.parseResponse = async (item, response, config) => {
const options = merge(item, config, { const data = merge(item, config, {
content: response.data.toString(), content: response.data.toString(),
buffer: response.data buffer: response.data
}) })
if (!item.channel.logo && config.logo) { if (!item.channel.logo && config.logo) {
item.channel.logo = await utils.loadLogo(options, config) item.channel.logo = await utils.loadLogo(data, config)
} }
const parsed = await utils.parsePrograms(options, config) return await utils.parsePrograms(data, config)
console.log(
` ${config.site} - ${item.channel.xmltv_id} - ${item.date.format('MMM D, YYYY')} (${
parsed.length
} programs)`
)
return parsed
} }
utils.parsePrograms = async function (options, config) { utils.parsePrograms = async function (data, config) {
let programs = config.parser(options) let programs = config.parser(data)
if (this.isPromise(programs)) { if (this.isPromise(programs)) {
programs = await programs programs = await programs
@ -260,7 +244,7 @@ utils.parsePrograms = async function (options, config) {
throw new Error('Parser should return an array') throw new Error('Parser should return an array')
} }
const channel = options.channel const channel = data.channel
return programs return programs
.filter(i => i) .filter(i => i)
.map(program => { .map(program => {