From 67dc65a43487b308321f351456008c8c093eb0d7 Mon Sep 17 00:00:00 2001
From: Aleksandr Statciuk <free.arhey@gmail.com>
Date: Mon, 16 Aug 2021 12:35:13 +0300
Subject: [PATCH 1/3] Fixes "formatter doesn't fill tags" issue #4097

---
 scripts/format.js         | 5 +++--
 scripts/helpers/db.js     | 4 ++--
 scripts/helpers/parser.js | 9 ++++++---
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/scripts/format.js b/scripts/format.js
index 22c633d38..3a669d0d4 100644
--- a/scripts/format.js
+++ b/scripts/format.js
@@ -61,7 +61,7 @@ async function updatePlaylist(playlist) {
   }
 
   for (const channel of playlist.channels) {
-    addMissingData(channel)
+    addMissingData(channel, playlist)
     updateGroupTitle(channel)
     normalizeUrl(channel)
 
@@ -122,7 +122,8 @@ function updateStatus(channel, status) {
   }
 }
 
-function addMissingData(channel) {
+function addMissingData(channel, playlist) {
+  const code = playlist.country.code
   // tvg-name
   if (!channel.tvg.name && channel.name) {
     channel.tvg.name = channel.name.replace(/\"/gi, '')
diff --git a/scripts/helpers/db.js b/scripts/helpers/db.js
index f94ce678a..52f537098 100644
--- a/scripts/helpers/db.js
+++ b/scripts/helpers/db.js
@@ -211,10 +211,10 @@ db.playlists = {
     return this.list
   },
   only(list = []) {
-    return this.list.filter(playlist => list.includes(playlist.name))
+    return this.list.filter(playlist => list.includes(playlist.filename))
   },
   except(list = []) {
-    return this.list.filter(playlist => !list.includes(playlist.name))
+    return this.list.filter(playlist => !list.includes(playlist.filename))
   },
   sortBy(fields) {
     this.list = utils.sortBy(this.list, fields)
diff --git a/scripts/helpers/parser.js b/scripts/helpers/parser.js
index 815c819ec..98f315c16 100644
--- a/scripts/helpers/parser.js
+++ b/scripts/helpers/parser.js
@@ -15,10 +15,13 @@ parser.parseIndex = function () {
 parser.parsePlaylist = async function (url) {
   const content = file.read(url)
   const result = playlistParser.parse(content)
-  const name = file.getFilename(url)
-  const country = utils.code2name(name)
+  const filename = file.getFilename(url)
+  const country = {
+    code: filename,
+    name: utils.code2name(filename)
+  }
 
-  return new Playlist({ header: result.header, items: result.items, url, country, name })
+  return new Playlist({ header: result.header, items: result.items, url, filename, country })
 }
 
 module.exports = parser

From 8fce5218db292fe5418c45e329b02602f224d6c2 Mon Sep 17 00:00:00 2001
From: Aleksandr Statciuk <free.arhey@gmail.com>
Date: Mon, 16 Aug 2021 12:35:31 +0300
Subject: [PATCH 2/3] Remove getBasename() function

---
 scripts/helpers/file.js | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/scripts/helpers/file.js b/scripts/helpers/file.js
index cb946c337..578c76a73 100644
--- a/scripts/helpers/file.js
+++ b/scripts/helpers/file.js
@@ -5,10 +5,6 @@ const fs = require('fs')
 const rootPath = path.resolve(__dirname) + '/../../'
 const file = {}
 
-file.getBasename = function (filename) {
-  return path.basename(filename, path.extname(filename))
-}
-
 file.getFilename = function (filename) {
   return path.parse(filename).name
 }

From 1dfe5e49561b25105ef80745eb619377a8bbacd7 Mon Sep 17 00:00:00 2001
From: Aleksandr Statciuk <free.arhey@gmail.com>
Date: Mon, 16 Aug 2021 13:07:27 +0300
Subject: [PATCH 3/3] Add delay option

---
 scripts/format.js        | 3 +++
 scripts/helpers/utils.js | 6 ++++++
 2 files changed, 9 insertions(+)

diff --git a/scripts/format.js b/scripts/format.js
index 3a669d0d4..e5d5d040f 100644
--- a/scripts/format.js
+++ b/scripts/format.js
@@ -14,6 +14,7 @@ program
   .option('-r, --resolution', 'Detect stream resolution')
   .option('-c, --country <country>', 'Comma-separated list of country codes', '')
   .option('-e, --exclude <exclude>', 'Comma-separated list of country codes to be excluded', '')
+  .option('--delay <delay>', 'Set delay for each request', 0)
   .option('--timeout <timeout>', 'Set timeout for each request', 5000)
   .parse(process.argv)
 
@@ -90,6 +91,8 @@ async function updatePlaylist(playlist) {
         .catch(err => {
           if (config.debug) log.print(`  ERR: ${channel.url} (${err.message})\n`)
         })
+
+      await utils.sleep(config.delay)
     }
     if (!config.debug) bar.tick()
   }
diff --git a/scripts/helpers/utils.js b/scripts/helpers/utils.js
index f0d9b3e50..3866ae4ca 100644
--- a/scripts/helpers/utils.js
+++ b/scripts/helpers/utils.js
@@ -90,4 +90,10 @@ utils.filterPlaylists = function (arr, include = '', exclude = '') {
   return arr
 }
 
+utils.sleep = function (ms) {
+  return function (x) {
+    return new Promise(resolve => setTimeout(() => resolve(x), ms))
+  }
+}
+
 module.exports = utils