const markdownInclude = require('markdown-include') const path = require('path') const fs = require('fs') const countries = require('./countries.json') const parser = require('./parser') const file = require('./file') async function main() { console.log('Starting...') file .list('sites/*.channels.xml') .then(files => { let data = [] files.forEach(filename => { const channelsFile = file.read(filename) const parsed = parser.parseChannels(channelsFile) parsed.groups.forEach(group => { const country = countries.find(c => c.code === group.country.toLowerCase()) data.push({ countryFlag: country.flag, countryName: country.name, guideUrl: `https://iptv-org.github.io/epg/guides/${country.code}/${parsed.site}.epg.xml`, channelCount: group.channels.length }) }) }) data = data.sort((a, b) => { var nameA = a.countryName.toLowerCase() var nameB = b.countryName.toLowerCase() if (nameA < nameB) return -1 if (nameA > nameB) return 1 return b.channelCount - a.channelCount }) const table = generateTable(data, ['Country', 'Channels', 'EPG']) file.write('./.readme/_table.md', table) generateReadme() }) .finally(() => { console.log('Finish') }) } function generateTable(data, header) { let output = '\n' output += '\t\n\t\t' for (let column of header) { output += `` } output += '\n\t\n' output += '\t\n' for (let item of data) { const size = data.filter(i => i.countryName === item.countryName).length let root = output.indexOf(item.countryName) === -1 const rowspan = root && size > 1 ? ` rowspan="${size}"` : '' const cell1 = root ? `` : '' output += `\t\t${cell1}\n` } output += '\t\n' output += '
${column}
${item.countryFlag} ${item.countryName}
${item.channelCount}${item.guideUrl}
' return output } function generateReadme() { console.log('Generating README.md...') markdownInclude.compileFiles(path.resolve('.readme/config.json')) } main()