From 46deb7f004dc120f7e24b82e00cbf31ff0b72261 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sat, 5 Feb 2022 07:25:56 +0300 Subject: [PATCH] Update create-database.js --- scripts/commands/create-database.js | 2 +- scripts/core/cid.js | 24 +++--------------------- scripts/core/parser.js | 19 +++++++++++++++++++ scripts/store/setters/index.js | 1 + scripts/store/setters/title.js | 5 +++++ tests/__data__/expected/channels.db | 2 -- tests/__data__/expected/streams.db | 2 ++ tests/commands/create-database.test.js | 6 +++--- 8 files changed, 34 insertions(+), 27 deletions(-) create mode 100644 scripts/store/setters/title.js delete mode 100644 tests/__data__/expected/channels.db create mode 100644 tests/__data__/expected/streams.db diff --git a/scripts/commands/create-database.js b/scripts/commands/create-database.js index abb63a8ab..f9927cbb8 100644 --- a/scripts/commands/create-database.js +++ b/scripts/commands/create-database.js @@ -50,7 +50,7 @@ async function saveToDatabase() { for (const item of chunk) { const stream = store.create() stream.set('id', { id: item.tvg.id }) - stream.set('display_name', { display_name: item.name }) + stream.set('title', { title: item.name }) stream.set('filepath', { filepath: item.filepath }) stream.set('resolution', { title: item.name }) stream.set('status', { title: item.name }) diff --git a/scripts/core/cid.js b/scripts/core/cid.js index 7be12caf3..11ab5fae3 100644 --- a/scripts/core/cid.js +++ b/scripts/core/cid.js @@ -1,11 +1,12 @@ const file = require('./file') +const parser = require('./parser') const transliteration = require('transliteration') const cid = {} cid.generate = function (title, filepath) { - const name = parseChannelName(title) - const code = parseCountryCode(filepath) + const name = parser.parseChannelName(title) + const code = parser.parseCountryCode(filepath) if (name && code) { const slug = transliteration @@ -20,22 +21,3 @@ cid.generate = function (title, filepath) { } module.exports = cid - -function parseCountryCode(filepath) { - if (!filepath) return null - const basename = file.basename(filepath) - const [code] = basename.split('_') || [null] - - return code -} - -function parseChannelName(title) { - return title - .trim() - .split(' ') - .map(s => s.trim()) - .filter(s => { - return !/\[|\]/i.test(s) && !/\((\d+)P\)/i.test(s) - }) - .join(' ') -} diff --git a/scripts/core/parser.js b/scripts/core/parser.js index b54fd8f5a..5af0eb85b 100644 --- a/scripts/core/parser.js +++ b/scripts/core/parser.js @@ -28,4 +28,23 @@ parser.parseNumber = function (string) { return parsed } +parser.parseChannelName = function (string) { + return string + .trim() + .split(' ') + .map(s => s.trim()) + .filter(s => { + return !/\[|\]/i.test(s) && !/\((\d+)P\)/i.test(s) + }) + .join(' ') +} + +parser.parseCountryCode = function (filepath) { + if (!filepath) return null + const basename = file.basename(filepath) + const [code] = basename.split('_') || [null] + + return code +} + module.exports = parser diff --git a/scripts/store/setters/index.js b/scripts/store/setters/index.js index 4a5aaef82..273dc0710 100644 --- a/scripts/store/setters/index.js +++ b/scripts/store/setters/index.js @@ -2,3 +2,4 @@ exports.is_broken = require('./is_broken') exports.resolution = require('./resolution') exports.status = require('./status') exports.url = require('./url') +exports.title = require('./title') diff --git a/scripts/store/setters/title.js b/scripts/store/setters/title.js new file mode 100644 index 000000000..4a6612554 --- /dev/null +++ b/scripts/store/setters/title.js @@ -0,0 +1,5 @@ +const { parser } = require('../../core') + +module.exports = function ({ title }) { + return parser.parseChannelName(title) +} diff --git a/tests/__data__/expected/channels.db b/tests/__data__/expected/channels.db deleted file mode 100644 index 3aa99e683..000000000 --- a/tests/__data__/expected/channels.db +++ /dev/null @@ -1,2 +0,0 @@ -{"display_name":"ATV (720p) [Offline]","id":"ATV.ad","filepath":"tests/__data__/input/channels/ad.m3u","resolution":{"height":720,"width":null},"status":{"label":"Offline","code":"offline","level":5},"url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http":{"referrer":"","user-agent":""},"is_broken":true,"updated":false,"cluster_id":1,"_id":"verufR2ehwdsfou3"} -{"display_name":"Fox Sports 2 Asia (Thai) (720p)","id":"FoxSports2AsiaThai.us","filepath":"tests/__data__/input/channels/us_blocked.m3u","resolution":{"height":720,"width":null},"status":{"label":"","code":"online","level":1},"url":"https://example.com/playlist.m3u8","http":{"referrer":"","user-agent":""},"is_broken":false,"updated":true,"cluster_id":1,"_id":"sLG04kZhqlEcYc25"} diff --git a/tests/__data__/expected/streams.db b/tests/__data__/expected/streams.db new file mode 100644 index 000000000..dc5057f18 --- /dev/null +++ b/tests/__data__/expected/streams.db @@ -0,0 +1,2 @@ +{"title":"ATV","id":"ATV.ad","filepath":"tests/__data__/input/channels/ad.m3u","resolution":{"height":720,"width":null},"status":{"label":"Offline","code":"offline","level":5},"url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http":{"referrer":"","user-agent":""},"is_broken":true,"updated":false,"cluster_id":1,"_id":"verufR2ehwdsfou3"} +{"title":"Fox Sports 2 Asia (Thai)","id":"FoxSports2AsiaThai.us","filepath":"tests/__data__/input/channels/us_blocked.m3u","resolution":{"height":720,"width":null},"status":{"label":"","code":"online","level":1},"url":"https://example.com/playlist.m3u8","http":{"referrer":"","user-agent":""},"is_broken":false,"updated":true,"cluster_id":1,"_id":"sLG04kZhqlEcYc25"} diff --git a/tests/commands/create-database.test.js b/tests/commands/create-database.test.js index b90fc48b7..cbc852af4 100644 --- a/tests/commands/create-database.test.js +++ b/tests/commands/create-database.test.js @@ -6,14 +6,14 @@ beforeEach(() => { fs.emptyDirSync('tests/__data__/output') const stdout = execSync( - 'DB_FILEPATH=tests/__data__/output/channels.db node scripts/commands/create-database.js --input-dir=tests/__data__/input/channels --max-clusters=1', + 'DB_FILEPATH=tests/__data__/output/streams.db node scripts/commands/create-database.js --input-dir=tests/__data__/input/channels --max-clusters=1', { encoding: 'utf8' } ) }) it('can create database', () => { - let output = content('tests/__data__/output/channels.db') - let expected = content('tests/__data__/expected/channels.db') + let output = content('tests/__data__/output/streams.db') + let expected = content('tests/__data__/expected/streams.db') output = output.map(i => { i._id = null