mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
Update update-guides.js
This commit is contained in:
parent
122b666e11
commit
074f4c9357
7 changed files with 88 additions and 106 deletions
|
@ -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() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue