mirror of
https://github.com/iptv-org/epg
synced 2025-12-16 02:16:40 -05:00
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { Collection, Logger } from '@freearhey/core'
|
|
import epgGrabber, { EPGGrabber } from 'epg-grabber'
|
|
import { generateChannelsXML } from '../../core'
|
|
import { Storage } from '@freearhey/storage-js'
|
|
import { SITES_DIR } from '../../constants'
|
|
import { data, loadData } from '../../api'
|
|
import { Channel } from '../../models'
|
|
import { program } from 'commander'
|
|
|
|
program.argument('[filepath...]', 'Path to file to format').parse(process.argv)
|
|
|
|
async function main() {
|
|
const logger = new Logger()
|
|
|
|
logger.info('loading data from api...')
|
|
await loadData()
|
|
|
|
logger.info('loading *.channels.xml files...')
|
|
const storage = new Storage()
|
|
const files = program.args.length
|
|
? program.args
|
|
: await storage.list(`${SITES_DIR}/**/*.channels.xml`)
|
|
|
|
logger.info(`found ${files.length} file(s)`)
|
|
|
|
logger.info('formating...')
|
|
for (const filepath of files) {
|
|
if (!storage.existsSync(filepath)) continue
|
|
|
|
const xml = await storage.load(filepath)
|
|
const parsedChannels = EPGGrabber.parseChannelsXML(xml)
|
|
const channelsFromXML = new Collection(parsedChannels).map(
|
|
(channel: epgGrabber.Channel) => new Channel(channel.toObject())
|
|
)
|
|
|
|
channelsFromXML.forEach((channel: Channel) => {
|
|
if (!channel.xmltv_id) return
|
|
if (data.feedsKeyByStreamId.get(channel.xmltv_id)) return
|
|
|
|
const channelData = data.channelsKeyById.get(channel.xmltv_id)
|
|
if (channelData) {
|
|
const mainFeed = channelData.getMainFeed()
|
|
if (mainFeed) {
|
|
channel.xmltv_id = mainFeed.getStreamId()
|
|
return
|
|
}
|
|
}
|
|
|
|
channel.xmltv_id = ''
|
|
})
|
|
|
|
channelsFromXML.sortBy((channel: Channel) => channel.site_id)
|
|
|
|
const output = generateChannelsXML(channelsFromXML)
|
|
|
|
await storage.save(filepath, output)
|
|
}
|
|
}
|
|
|
|
main()
|