Update update-guides.js

This commit is contained in:
Aleksandr Statciuk 2022-01-21 22:40:25 +03:00
parent 122b666e11
commit 074f4c9357
7 changed files with 88 additions and 106 deletions

View file

@ -17,75 +17,57 @@ main()
async function generateGuides() {
logger.info(`Generating guides/...`)
const channels = await loadChannels()
const programs = await loadPrograms()
const grouped = groupByGroup(await loadChannels())
const grouped = _.groupBy(programs, i => `${i.gid}_${i.site}`)
for (let key in grouped) {
const [gid, site] = key.split('_') || [null, null]
const filepath = `${PUBLIC_DIR}/guides/${gid}/${site}.epg.xml`
const groupProgs = grouped[key]
const groupChannels = Object.keys(_.groupBy(groupProgs, i => `${i.site}_${i.channel}`)).map(
key => {
let [site, channel] = key.split('_')
logger.info('Loading "database/programs.db"...')
await db.programs.load()
return channels.find(i => i.xmltv_id === channel && i.site === site)
}
)
const output = grabber.convertToXMLTV({ channels: groupChannels, programs: groupProgs })
for (const key in grouped) {
const filepath = `${PUBLIC_DIR}/guides/${key}.epg.xml`
const channels = grouped[key]
const programs = await loadProgramsForChannels(channels)
const output = grabber.convertToXMLTV({ channels, programs })
logger.info(`Creating "${filepath}"...`)
await file.create(filepath, output)
await log({
gid,
site,
count: groupChannels.length,
status: 1
group: key,
count: programs.length
})
}
logger.info(`Done`)
}
function groupByGroup(channels = []) {
const groups = {}
channels.forEach(channel => {
channel.groups.forEach(key => {
if (!groups[key]) {
groups[key] = []
}
groups[key].push(channel)
})
})
return groups
}
async function loadChannels() {
logger.info('Loading channels...')
await db.channels.load()
return await db.channels.find({}).sort({ xmltv_id: 1 })
return await db.channels.find({ programCount: { $gt: 0 } }).sort({ xmltv_id: 1 })
}
async function loadPrograms() {
logger.info('Loading programs...')
async function loadProgramsForChannels(channels = []) {
const cids = channels.map(c => c._id)
logger.info('Loading "database/programs.db"...')
await db.programs.load()
logger.info('Loading programs from "database/programs.db"...')
let programs = await db.programs.find({}).sort({ channel: 1, start: 1 })
programs = programs.map(program => {
return {
title: program.title,
description: program.description,
category: program.category,
icon: program.icon,
channel: program.channel,
lang: program.lang,
start: program.start,
stop: program.stop,
site: program.site,
country: program.country,
season: program.season,
episode: program.episode,
gid: program.gid,
_id: program._id
}
})
return programs
return await db.programs.find({ _cid: { $in: cids } }).sort({ channel: 1, start: 1 })
}
async function setUp() {