const parser = require('epg-parser') const markdownInclude = require('markdown-include') const countries = require('./countries.json') const file = require('./file') async function main() { console.log('Starting...') file .list('.gh-pages/guides/**/*.xml') .then(files => { let data = [] files.forEach(filename => { const countryCode = filename.match(/\.gh\-pages\/guides\/(.*)\/.*/i)[1] const country = countries.find(c => c.code === countryCode) const epg = file.read(filename) const parsed = parser.parse(epg) data.push({ countryFlag: country.flag, countryName: country.name, guideUrl: filename.replace('.gh-pages', 'https://iptv-org.github.io/epg'), channelCount: parsed.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 }) console.log(data) console.log('Generating table...') const table = generateTable(data, ['Country', 'Channels', 'EPG']) file.write('.readme/_table.md', table) console.log('Updating README.md...') markdownInclude.compileFiles('.readme/config.json') }) .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 } main()