From 399c5abc932a59db589217bd0e9f6604f311ee73 Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 31 Oct 2019 14:58:34 +0300 Subject: [PATCH 1/4] Added playlist generation for different languages --- helpers/generate.js | 72 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 10 deletions(-) diff --git a/helpers/generate.js b/helpers/generate.js index 8e32277d10..aa8ff4b7c0 100644 --- a/helpers/generate.js +++ b/helpers/generate.js @@ -1,22 +1,28 @@ const util = require('./util') +const ISO6391 = require('iso-639-1') const debug = false -const types = ['full', 'country', 'content'] +const types = ['full', 'country', 'content', 'language'] const categories = util.supportedCategories.map(c => c.toLowerCase()) let stats = { countries: 0, channels: 0 } -let buffer = {} +let languageBuffer = { + undefined: [] +} + +let categoryBuffer = {} categories.push('other') categories.forEach(category => { - buffer[category] = [] + categoryBuffer[category] = [] }) let repo = { categories: {}, - countries: {} + countries: {}, + languages: {} } function main() { @@ -59,12 +65,13 @@ function main() { let channel = util.createChannel(item) let group = channel.group - for(const type of types) { if(type === 'full') { channel.group = [ c.name, channel.group ].filter(i => i).join(';') } else if(type === 'country') { channel.group = c.name + } else if(type === 'language') { + channel.group = channel.language } else { channel.group = group } @@ -73,10 +80,21 @@ function main() { } let category = channel.group.toLowerCase() - if(buffer[category]) { - buffer[category].push(channel) + if(categoryBuffer[category]) { + categoryBuffer[category].push(channel) } else { - buffer['other'].push(channel) + categoryBuffer['other'].push(channel) + } + + let languageCode = ISO6391.getCode(channel.language) + if(languageCode) { + if(!languageBuffer[languageCode]) { + languageBuffer[languageCode] = [] + } + + languageBuffer[languageCode].push(channel) + } else { + languageBuffer['undefined'].push(channel) } stats.channels++ @@ -85,8 +103,32 @@ function main() { stats.countries++ } - for(const category in buffer) { - let channels = util.sortByTitleAndUrl(buffer[category]) + for(const languageCode in languageBuffer) { + let languageName = ISO6391.getName(languageCode) + if(languageName) { + repo.languages[languageCode] = { language: languageName, channels: 0, 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) { + const filename = `languages/${languageCode}.m3u` + util.createFile(filename, '#EXTM3U\n') + + let channels = util.sortByTitleAndUrl(languageBuffer[languageCode]) + for(const channel of channels) { + if(!util.checkCache(channel.url)) { + util.appendToFile(filename, channel.toString()) + 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.appendToFile(`categories/${category}.m3u`, channel.toString()) @@ -96,6 +138,15 @@ function main() { } } + const languagesTable = util.generateTable(Object.values(repo.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), { columns: [ { name: 'Category', align: 'left' }, @@ -104,6 +155,7 @@ function main() { ] }) util.createFile('./helpers/categories.md', categoriesTable) + const countriesTable = util.generateTable(Object.values(repo.countries), { columns: [ { name: 'Country', align: 'left' }, From 8354700b7f6f8be71a1d2f5bb0d1426b498b57f0 Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 31 Oct 2019 14:59:08 +0300 Subject: [PATCH 2/4] Added link to language index and table --- helpers/_readme.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/helpers/_readme.md b/helpers/_readme.md index 987f215c3a..b1d06187b1 100644 --- a/helpers/_readme.md +++ b/helpers/_readme.md @@ -15,6 +15,7 @@ If your application does not support nested playlists, you can instead use one o - `https://iptv-org.github.io/iptv/index.full.m3u` (grouped by country and content) - `https://iptv-org.github.io/iptv/index.country.m3u` (grouped by country) - `https://iptv-org.github.io/iptv/index.content.m3u` (grouped by content) +- `https://iptv-org.github.io/iptv/index.language.m3u` (grouped by language) Or select one of the playlists from the list below. @@ -22,6 +23,10 @@ Or select one of the playlists from the list below. #include "./helpers/categories.md" +## Playlists by language + +#include "./helpers/languages.md" + ## Playlists by country #include "./helpers/countries.md" From 4ffdc5c880d47ec286369be5a8258ca107f1d408 Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 31 Oct 2019 15:01:56 +0300 Subject: [PATCH 3/4] Create undefined.m3u --- languages/undefined.m3u | 1 + 1 file changed, 1 insertion(+) create mode 100644 languages/undefined.m3u diff --git a/languages/undefined.m3u b/languages/undefined.m3u new file mode 100644 index 0000000000..fcd718794a --- /dev/null +++ b/languages/undefined.m3u @@ -0,0 +1 @@ +#EXTM3U From f264e093423a67a80dd51c562b5a002801103192 Mon Sep 17 00:00:00 2001 From: freearhey Date: Thu, 31 Oct 2019 15:21:08 +0300 Subject: [PATCH 4/4] Update generate.js --- helpers/generate.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/helpers/generate.js b/helpers/generate.js index aa8ff4b7c0..d49359501b 100644 --- a/helpers/generate.js +++ b/helpers/generate.js @@ -64,21 +64,6 @@ function main() { let channel = util.createChannel(item) - let group = channel.group - for(const type of types) { - if(type === 'full') { - channel.group = [ c.name, channel.group ].filter(i => i).join(';') - } else if(type === 'country') { - channel.group = c.name - } else if(type === 'language') { - channel.group = channel.language - } else { - channel.group = group - } - - util.appendToFile(`index.${type}.m3u`, channel.toString()) - } - let category = channel.group.toLowerCase() if(categoryBuffer[category]) { categoryBuffer[category].push(channel) @@ -97,6 +82,21 @@ function main() { languageBuffer['undefined'].push(channel) } + let group = channel.group + for(const type of types) { + if(type === 'full') { + channel.group = [ c.name, channel.group ].filter(i => i).join(';') + } else if(type === 'country') { + channel.group = c.name + } else if(type === 'language') { + channel.group = channel.language + } else { + channel.group = group + } + + util.appendToFile(`index.${type}.m3u`, channel.toString()) + } + stats.channels++ }