diff --git a/helpers/update-readme.js b/helpers/update-readme.js
index 516e1d653..868321fe1 100644
--- a/helpers/update-readme.js
+++ b/helpers/update-readme.js
@@ -3,154 +3,125 @@ const ISO6391 = require('iso-639-1')
const markdownInclude = require('markdown-include')
const path = require('path')
-
-let languageBuffer = {
- undefined: []
-}
-
-let categories = util.supportedCategories.map(c => c.toLowerCase())
-let categoryBuffer = {}
-categories.push('other')
-categories.forEach(category => {
- categoryBuffer[category] = []
-})
-
-let repo = {
- categories: {},
- countries: {},
- languages: {}
+function main() {
+ console.log(`Generating countries table...`)
+ generateCountriesTable()
+ console.log(`Generating languages table...`)
+ generateLanguagesTable()
+ console.log(`Generating categories table...`)
+ generateCategoriesTable()
+ console.log(`Generating README.md...`)
+ generateReadme()
+ console.log(`Done.`)
}
-function main() {
- console.log(`Parsing 'index.m3u'...`)
- const playlist = util.parsePlaylist('index.m3u')
- let countries = playlist.items
-
- for(let category of categories) {
- const filename = `categories/${category}.m3u`
- const categoryName = util.supportedCategories.find(c => c.toLowerCase() === category) || 'Other'
- repo.categories[category] = {
- category: categoryName,
- channels: 0,
- playlist: `https://iptv-org.github.io/iptv/${filename}
`
- }
- }
+function generateCountriesTable() {
+ const root = util.parsePlaylist('index.m3u')
- for(let country of countries) {
- console.log(`Parsing '${country.url}'...`)
- const playlist = util.parsePlaylist(country.url)
+ let countries = []
+ for(let item of root.items) {
+ const playlist = util.parsePlaylist(item.url)
+ const countryCode = util.getBasename(item.url).toUpperCase()
+ const epg = playlist.header.attrs['x-tvg-url'] ? `${playlist.header.attrs['x-tvg-url']}
` : ''
- const countryCode = util.getBasename(country.url).toUpperCase()
- repo.countries[countryCode] = {
- country: country.name,
+ countries.push({
+ country: item.name,
channels: playlist.items.length,
- playlist: `https://iptv-org.github.io/iptv/${country.url}
`,
- epg: playlist.header.attrs['x-tvg-url'] ? `${playlist.header.attrs['x-tvg-url']}
` : ''
- }
-
- for(let item of playlist.items) {
-
- let channel = util.createChannel(item)
-
- let category = channel.group.toLowerCase()
- if(categoryBuffer[category]) {
- categoryBuffer[category].push(channel)
- } else {
- categoryBuffer['other'].push(channel)
- }
+ playlist: `https://iptv-org.github.io/iptv/${item.url}
`,
+ epg
+ })
+ }
- let languageCode = ISO6391.getCode(channel.language)
- if(languageCode) {
- if(!languageBuffer[languageCode]) {
- languageBuffer[languageCode] = []
- }
+ const table = util.generateTable(countries, {
+ columns: [
+ { name: 'Country', align: 'left' },
+ { name: 'Channels', align: 'right' },
+ { name: 'Playlist', align: 'left', nowrap: true },
+ { name: 'EPG', align: 'left' }
+ ]
+ })
- languageBuffer[languageCode].push(channel)
- } else {
- languageBuffer['undefined'].push(channel)
- }
- }
- }
+ util.createFile('./helpers/countries.md', table)
+}
- for(const languageCode in languageBuffer) {
- let languageName = ISO6391.getName(languageCode)
- if(languageName) {
- repo.languages[languageCode] = {
+function generateLanguagesTable() {
+ const playlist = util.parsePlaylist('index.language.m3u')
+
+ let languages = {}
+ for(let item of playlist.items) {
+ const languageName = item.group.title || 'Undefined'
+ const languageCode = ISO6391.getCode(languageName) || 'undefined'
+ if(languages[languageCode]) {
+ languages[languageCode].channels++
+ } else {
+ languages[languageCode] = {
language: languageName,
- channels: 0,
+ channels: 1,
playlist: `https://iptv-org.github.io/iptv/languages/${languageCode}.m3u
`
}
}
}
- repo.languages['undefined'] = {
- language: 'Undefined',
- channels: 0,
- playlist: `https://iptv-org.github.io/iptv/languages/undefined.m3u
`
- }
-
- util.clearCache()
- for(const languageCode in languageBuffer) {
- let channels = util.sortByTitleAndUrl(languageBuffer[languageCode])
- for(const channel of channels) {
- if(!util.checkCache(channel.url)) {
- util.addToCache(channel.url)
- repo.languages[languageCode].channels++
- }
- }
- }
-
- util.clearCache()
- for(const category in categoryBuffer) {
- let channels = util.sortByTitleAndUrl(categoryBuffer[category])
- for(const channel of channels) {
- if(!util.checkCache(channel.url)) {
- util.addToCache(channel.url)
- repo.categories[category].channels++
- }
- }
- }
-
- const languages = Object.values(repo.languages)
- const lastRow = languages.splice(languages.length - 1, 1)[0]
+ languages = Object.values(languages)
languages.sort((a, b) => {
+ if(a.language === 'Undefined') { return 1 }
+ if(b.language === 'Undefined') { return -1 }
if(a.language < b.language) { return -1 }
if(a.language > b.language) { return 1 }
return 0
})
- languages.push(lastRow)
- const languagesTable = util.generateTable(languages, {
+ const table = util.generateTable(languages, {
columns: [
{ name: 'Language', align: 'left' },
{ name: 'Channels', align: 'right' },
{ name: 'Playlist', align: 'left' }
]
})
- util.createFile('./helpers/languages.md', languagesTable)
- const categoriesTable = util.generateTable(Object.values(repo.categories), {
+ util.createFile('./helpers/languages.md', table)
+}
+
+function generateCategoriesTable() {
+ const playlist = util.parsePlaylist('index.content.m3u')
+
+ let categories = {}
+ for(let item of playlist.items) {
+ const categoryName = util.supportedCategories.find(c => c === item.group.title) || 'Other'
+ const categoryCode = categoryName.toLowerCase()
+ if(categories[categoryCode]) {
+ categories[categoryCode].channels++
+ } else {
+ categories[categoryCode] = {
+ category: categoryName,
+ channels: 1,
+ playlist: `https://iptv-org.github.io/iptv/categories/${categoryCode}.m3u
`
+ }
+ }
+ }
+
+ categories = Object.values(categories)
+ categories.sort((a, b) => {
+ if(a.category === 'Other') { return 1 }
+ if(b.category === 'Other') { return -1 }
+ if(a.category < b.category) { return -1 }
+ if(a.category > b.category) { return 1 }
+ return 0
+ })
+
+ const table = util.generateTable(categories, {
columns: [
{ name: 'Category', align: 'left' },
{ name: 'Channels', align: 'right' },
{ name: 'Playlist', align: 'left' }
]
})
- util.createFile('./helpers/categories.md', categoriesTable)
- const countriesTable = util.generateTable(Object.values(repo.countries), {
- columns: [
- { name: 'Country', align: 'left' },
- { name: 'Channels', align: 'right' },
- { name: 'Playlist', align: 'left', nowrap: true },
- { name: 'EPG', align: 'left' }
- ]
- })
- util.createFile('./helpers/countries.md', countriesTable)
+ util.createFile('./helpers/categories.md', table)
+}
+function generateReadme() {
markdownInclude.compileFiles(path.resolve(__dirname, './markdown.json'))
}
main()
-
-console.log(`Done.`)