diff --git a/scripts/commands/readme/update.js b/scripts/commands/readme/update.js index 157ed92d..b327325a 100644 --- a/scripts/commands/readme/update.js +++ b/scripts/commands/readme/update.js @@ -12,20 +12,79 @@ const options = program async function main() { await api.countries.load().catch(console.error) const logPath = `${LOGS_DIR}/guides/update.log` - let results = await parser.parseLogs(logPath) - let files = results.reduce((acc, curr) => { - if (acc[curr.filename]) { - acc[curr.filename].channels++ - } else { - acc[curr.filename] = { - country: curr.country, - channels: 1, - filename: curr.filename - } - } + let log = await parser.parseLogs(logPath) - return acc - }, {}) + await createCountriesTable(log) + await createSourcesTable(log) + + await updateReadme() +} + +main() + +async function createSourcesTable(log) { + let files = log + .filter(c => c.groupedBy === 'site+lang') + .reduce((acc, curr) => { + if (!acc[curr.filename]) { + acc[curr.filename] = { + site: curr.site, + lang: curr.lang, + channels: 0, + filename: curr.filename + } + } + + acc[curr.filename].channels++ + + return acc + }, {}) + + let data = [] + for (const filename in files) { + const item = files[filename] + + data.push([ + item.site, + item.lang, + item.channels, + `https://iptv-org.github.io/epg/guides/${filename}.xml` + ]) + } + + data = _.orderBy( + data, + [item => item[0], item => (item[1] === 'en' ? Infinity : item[2])], + ['asc', 'desc'] + ) + data = data.map(i => { + i.splice(1, 1) + return i + }) + data = Object.values(_.groupBy(data, item => item[0])) + + const output = table.create(data, ['Site', 'Channels', 'EPG']) + + await file.create('./.readme/_sources.md', output) +} + +async function createCountriesTable(log) { + let files = log + .filter(c => c.groupedBy === 'country') + .reduce((acc, curr) => { + if (!acc[curr.filename]) { + acc[curr.filename] = { + country: curr.country, + lang: curr.lang, + channels: 0, + filename: curr.filename + } + } + + acc[curr.filename].channels++ + + return acc + }, {}) let data = [] for (const filename in files) { @@ -35,6 +94,7 @@ async function main() { data.push([ country.name, + item.lang, `${country.flag} ${country.name}`, item.channels, `https://iptv-org.github.io/epg/guides/${filename}.xml` @@ -43,11 +103,11 @@ async function main() { data = _.orderBy( data, - [item => item[0], item => (item[3].includes('_en') ? Infinity : item[2])], + [item => item[0], item => (item[1] === 'en' ? Infinity : item[3])], ['asc', 'desc'] ) data = data.map(i => { - i.shift() + i.splice(0, 2) return i }) data = Object.values(_.groupBy(data, item => item[0])) @@ -55,12 +115,8 @@ async function main() { const output = table.create(data, ['Country', 'Channels', 'EPG']) await file.create('./.readme/_countries.md', output) - - await updateReadme() } -main() - async function updateReadme() { logger.info('updating readme.md...')