diff --git a/scripts/commands/guides/validate.js b/scripts/commands/guides/validate.js index bfd045eb..bad9d188 100644 --- a/scripts/commands/guides/validate.js +++ b/scripts/commands/guides/validate.js @@ -1,41 +1,43 @@ -const { db, logger, api } = require('../../core') +const { db, logger, api, parser } = require('../../core') const chalk = require('chalk') +const _ = require('lodash') + +const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs' async function main() { - await api.channels.load() - await api.guides.load() - logger.info('loading database/programs.db...') - await db.programs.load() - let db_programs = await db.programs.find({}) - logger.info(`found ${db_programs.length} programs`) + logger.info('loading data/channels.json...') + await api.channels.load() - const stats = { - files: 0, - errors: 0 + const logPath = `${LOGS_DIR}/guides/update.log` + logger.info(`loading ${logPath}...`) + const guides = await parser.parseLogs(logPath) + + logger.info('loading database/programs.db...') + await db.programs.load() + let db_programs = await db.programs.find({}) + logger.info(`found ${db_programs.length} programs`) + + const errors = [] + + let programs = db_programs.map(p => ({ + site: p.site, + xmltv_id: p.channel, + lang: p.titles[0].lang + })) + programs = _.uniqBy(programs, p => p.site + p.xmltv_id) + for (let program of programs) { + if (!guides.find(g => g.channel === program.xmltv_id)) { + const channel = await api.channels.find({ id: program.xmltv_id }) + errors.push({ type: 'no_guide', ...program, ...channel }) } - const errors = [] - let api_channels = await api.channels.all() + } - api_channels.forEach(channel => { - let programs = db_programs.filter(p => p.channel == channel.id) - if (programs.length > 0) { - if (!api.guides.find({ channel: channel.id })) { - errors.push({ type: 'no_guide', xmltv_id: channel.id, ...channel }) - stats.errors++ - } - } - }) + if (errors.length) { + console.table(errors, ['type', 'site', 'lang', 'xmltv_id', 'broadcast_area', 'languages']) + console.log() - if (errors.length) { - console.table(errors, ['type', 'xmltv_id', 'name', 'country']) - console.log() - stats.files++ - } - - if (stats.errors > 0) { - logger.error(chalk.red(`${stats.errors} error(s)`)) - process.exit(1) - } + logger.error(chalk.red(`${errors.length} error(s)`)) + } } main()