diff --git a/package-lock.json b/package-lock.json index 1c524447c..867edb228 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3,12 +3,6 @@ "requires": true, "lockfileVersion": 1, "dependencies": { - "async": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz", - "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==", - "dev": true - }, "axios": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", @@ -19,6 +13,18 @@ "is-buffer": "^2.0.2" } }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -43,16 +49,6 @@ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true }, - "fluent-ffmpeg": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", - "integrity": "sha1-yVLeIkD4EuvaCqgAbXd27irPfXQ=", - "dev": true, - "requires": { - "async": ">=0.2.9", - "which": "^1.1.1" - } - }, "follow-redirects": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", @@ -62,6 +58,30 @@ "debug": "=3.1.0" } }, + "iptv-checker-module": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/iptv-checker-module/-/iptv-checker-module-1.4.0.tgz", + "integrity": "sha512-K0dRPYl8yuI7tGNaG9Fs8Z8aswn0SihIXR8aIRWRgJK1EoZIv6SdUxytchyOvuoc69dZ8V/M7xMlHZnNNk/qZw==", + "dev": true, + "requires": { + "axios": "^0.19.2", + "colors": "^1.4.0", + "command-exists": "^1.2.9", + "iptv-playlist-parser": "^0.4.2", + "valid-url": "^1.0.9" + }, + "dependencies": { + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10" + } + } + } + }, "iptv-playlist-parser": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/iptv-playlist-parser/-/iptv-playlist-parser-0.4.2.tgz", @@ -74,12 +94,6 @@ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", "dev": true }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, "iso-639-3": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/iso-639-3/-/iso-639-3-2.0.0.tgz", @@ -113,14 +127,11 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", + "dev": true }, "xml-js": { "version": "1.6.11", diff --git a/package.json b/package.json index 1dcbabca9..245ae1d8e 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "axios": ">=0.18.1", "epg-parser": "^0.1.1", "escape-string-regexp": "^2.0.0", - "fluent-ffmpeg": "^2.1.2", + "iptv-checker-module": "^1.4.0", "iptv-playlist-parser": "^0.4.2", "iso-639-3": "^2.0.0", "markdown-include": "^0.4.3" diff --git a/scripts/helper.js b/scripts/helper.js index 2aafd730b..e43e95aed 100644 --- a/scripts/helper.js +++ b/scripts/helper.js @@ -188,22 +188,6 @@ helper.writeToLog = function (country, msg, url) { this.appendToFile('error.log', now.toISOString() + ' ' + line + '\n') } -helper.parseMessage = function (err, u) { - if (!err || !err.message) return - - const msgArr = err.message.split('\n') - - if (msgArr.length === 0) return - - const line = msgArr.find(line => { - return line.indexOf(u) === 0 - }) - - if (!line) return - - return line.replace(`${u}: `, '') -} - helper.filterPlaylists = function (arr, include = '', exclude = '') { if (include) { const included = include.split(',').map(filename => `channels/${filename}.m3u`) diff --git a/scripts/test.js b/scripts/test.js index 2dbb5a664..71e46a01b 100644 --- a/scripts/test.js +++ b/scripts/test.js @@ -1,13 +1,13 @@ process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 const helper = require('./helper') -const ffmpeg = require('fluent-ffmpeg') +const iptvChecker = require('iptv-checker-module') const config = { debug: process.env.npm_config_debug || false, country: process.env.npm_config_country, exclude: process.env.npm_config_exclude, - timeout: 10 + timeout: 10000 } let stats = { @@ -26,40 +26,24 @@ async function test() { console.log(`Processing '${country.url}'...`) - const playlist = helper.parsePlaylist(country.url) + const options = { + timeout: config.timeout, + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', + debug: config.debug, + omitMetadata: true, + parallel: 1, + itemCallback: item => { + if (!item.status.ok) { + stats.failures++ - for (let item of playlist.items) { - stats.channels++ + helper.writeToLog(country.url, item.status.reason, item.url) - if (config.debug) { - console.log(`Checking '${item.url}'...`) + console.log(`${item.status.reason} '${item.url}'`) + } } - - await new Promise(resolve => { - const timeout = setTimeout(() => { - resolve() - }, config.timeout * 1000) - - ffmpeg(item.url, { timeout: 60 }).ffprobe( - ['-user_agent', `"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"`], - err => { - if (err) { - const message = helper.parseMessage(err, item.url) - - stats.failures++ - - helper.writeToLog(country.url, message, item.url) - - console.log(`${message} '${item.url}'`) - } - - clearTimeout(timeout) - - resolve() - } - ) - }) } + + await iptvChecker(country.url, options) } if (stats.failures === 0) {