From 1d752b82d07944c9c22af589f07b9c437e44be3f Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Thu, 10 Jul 2025 21:12:35 +0300
Subject: [PATCH] Update tests/__data__
---
.../expected/api_generate/.api/streams.json | 2 +-
.../__data__/expected/playlist_format/nl.m3u | 6 +-
.../.gh-pages/categories/undefined.m3u | 10 +-
.../.gh-pages/countries/ad.m3u | 2 +-
.../.gh-pages/countries/undefined.m3u | 8 +-
.../.gh-pages/index.category.m3u | 10 +-
.../.gh-pages/index.country.m3u | 10 +-
.../.gh-pages/index.language.m3u | 10 +-
.../playlist_generate/.gh-pages/index.m3u | 10 +-
.../.gh-pages/index.region.m3u | 12 +-
.../.gh-pages/languages/undefined.m3u | 8 +-
.../.gh-pages/regions/emea.m3u | 2 +-
.../.gh-pages/regions/eur.m3u | 2 +-
.../.gh-pages/regions/undefined.m3u | 8 +-
.../.gh-pages/sources/ad.m3u | 7 +
.../.gh-pages/sources/ca.m3u | 3 +
.../.gh-pages/sources/in.m3u | 3 +
.../.gh-pages/sources/kg.m3u | 3 +
.../.gh-pages/sources/uk.m3u | 3 +
.../.gh-pages/sources/unsorted.m3u | 15 ++
.../playlist_generate/logs/generators.log | 6 +
.../__data__/expected/playlist_update/fr.m3u | 2 -
.../__data__/expected/playlist_update/uk.m3u | 8 +-
.../__data__/expected/playlist_update/us.m3u | 9 +-
.../expected/readme_update/_readme.md | 16 ++
tests/__data__/input/api_generate/ad.m3u | 2 +-
tests/__data__/input/data/channels.json | 137 ++++++++----------
tests/__data__/input/data/logos.json | 11 ++
.../input/{playlist_update => }/issues.js | 10 +-
tests/__data__/input/playlist_format/nl.m3u | 6 +-
.../input/playlist_generate/unsorted.m3u | 6 +-
.../input/playlist_validate/wrong_id.m3u | 6 +
.../input/readme_update/.readme/template.md | 16 ++
.../input/readme_update/generators.log | 5 +
34 files changed, 253 insertions(+), 121 deletions(-)
create mode 100644 tests/__data__/expected/playlist_generate/.gh-pages/sources/ad.m3u
create mode 100644 tests/__data__/expected/playlist_generate/.gh-pages/sources/ca.m3u
create mode 100644 tests/__data__/expected/playlist_generate/.gh-pages/sources/in.m3u
create mode 100644 tests/__data__/expected/playlist_generate/.gh-pages/sources/kg.m3u
create mode 100644 tests/__data__/expected/playlist_generate/.gh-pages/sources/uk.m3u
create mode 100644 tests/__data__/expected/playlist_generate/.gh-pages/sources/unsorted.m3u
create mode 100644 tests/__data__/input/data/logos.json
rename tests/__data__/input/{playlist_update => }/issues.js (97%)
diff --git a/tests/__data__/expected/api_generate/.api/streams.json b/tests/__data__/expected/api_generate/.api/streams.json
index 55128bca36..62a824dd24 100644
--- a/tests/__data__/expected/api_generate/.api/streams.json
+++ b/tests/__data__/expected/api_generate/.api/streams.json
@@ -16,7 +16,7 @@
{
"channel": "AndorraTV.ad",
"feed": "SD",
- "url": "https://iptv-all.lanesh4d0w.repl.co/andorra/atv",
+ "url": "https://iptv-all.lanesh4d0w.repl.co/andorra/atv|Referer=\"https://referer.xyz/\"|User-Agent=\"Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1\"|Origin=\"https://origin.xyz\"",
"referrer": null,
"user_agent": null
},
diff --git a/tests/__data__/expected/playlist_format/nl.m3u b/tests/__data__/expected/playlist_format/nl.m3u
index d08a2ac80c..0c8f812e58 100644
--- a/tests/__data__/expected/playlist_format/nl.m3u
+++ b/tests/__data__/expected/playlist_format/nl.m3u
@@ -6,6 +6,10 @@ http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.i
#EXTINF:-1 tvg-id="NPO2.nl" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",NPO 2 (302p) [Geo-blocked]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8?|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0+(iPhone;+CPU+iPhone+OS+17_7+like+Mac+OS+X)+AppleWebKit/605.1.15+(KHTML,+like+Gecko)+Version/18.0+Mobile/15E148+Safari/604.1"|Origin="https://origin.xyz"
#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 [Geo-blocked]
http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo22.isml/.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/categories/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/categories/undefined.m3u
index cfdce7d0bf..caf15c4bfb 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/categories/undefined.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/categories/undefined.m3u
@@ -2,10 +2,14 @@
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Undefined",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/countries/ad.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ad.m3u
index 9bc95be27d..e85626ca16 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/countries/ad.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/countries/ad.m3u
@@ -1,3 +1,3 @@
#EXTM3U
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Undefined",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/countries/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/countries/undefined.m3u
index eb0364cd58..09cc3aba3e 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/countries/undefined.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/countries/undefined.m3u
@@ -2,8 +2,12 @@
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.category.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.category.m3u
index b3235a876c..011bfa110e 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/index.category.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.category.m3u
@@ -12,10 +12,14 @@ http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Undefined",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.country.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.country.m3u
index 332df0029b..4315263b02 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/index.country.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.country.m3u
@@ -1,5 +1,5 @@
#EXTM3U
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Andorra",ATV
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Andorra",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Canada",Meteomedia
http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
@@ -22,8 +22,12 @@ http://146.59.85.40:89/dunaworld/index.m3u8
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.language.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.language.m3u
index e9f88f8ac2..8dcfa46db3 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/index.language.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.language.m3u
@@ -1,5 +1,5 @@
#EXTM3U
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Catalan",ATV
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Catalan",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="English",BBC News HD
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
@@ -8,8 +8,12 @@ http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.m3u
index fbf8cd7556..071cf1fb5e 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/index.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.m3u
@@ -2,10 +2,14 @@
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Undefined",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/index.region.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/index.region.m3u
index aa3534ff75..ce19fbf0c8 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/index.region.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/index.region.m3u
@@ -11,13 +11,13 @@ http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Commonwealth of Independent States",ЭлТР (480p) [Not 24/7]
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Europe",ATV
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Europe",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Europe",ЛДПР ТВ (1080p)
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="Europe",ЭлТР (480p) [Not 24/7]
http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Europe, the Middle East and Africa",ATV
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Europe, the Middle East and Africa",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Europe, the Middle East and Africa",ЛДПР ТВ (1080p)
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
@@ -34,8 +34,12 @@ http://146.59.85.40:89/dunaworld/index.m3u8
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/languages/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/languages/undefined.m3u
index 0eeed846f3..72161123c9 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/languages/undefined.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/languages/undefined.m3u
@@ -2,8 +2,12 @@
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/emea.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/emea.m3u
index 10fbb43f94..76ae384e78 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/regions/emea.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/emea.m3u
@@ -1,5 +1,5 @@
#EXTM3U
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Undefined",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ЛДПР ТВ (1080p)
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/eur.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/eur.m3u
index 10fbb43f94..76ae384e78 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/regions/eur.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/eur.m3u
@@ -1,5 +1,5 @@
#EXTM3U
-#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="" group-title="Undefined",ATV
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Undefined",ATV
https://iptv-all.lanesh4d0w.repl.co/andorra/atv
#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ЛДПР ТВ (1080p)
http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/regions/undefined.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/regions/undefined.m3u
index eb0364cd58..09cc3aba3e 100644
--- a/tests/__data__/expected/playlist_generate/.gh-pages/regions/undefined.m3u
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/regions/undefined.m3u
@@ -2,8 +2,12 @@
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
-#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="" group-title="Undefined",ATV HD
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/sources/ad.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/sources/ad.m3u
new file mode 100644
index 0000000000..308931ec61
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/sources/ad.m3u
@@ -0,0 +1,7 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="AndorraTV.ad@HD" tvg-logo="https://i.imgur.com/CnhTn8i.png" group-title="Undefined",ATV HD
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv_hd
+#EXTINF:-1 tvg-id="AndorraTV.ad@SD" tvg-logo="https://i.imgur.com/BnhTn8i.png" group-title="Undefined",ATV
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+#EXTINF:-1 tvg-id="Zoo.ad@HD" tvg-logo="" group-title="Undefined",Zoo (720p)
+https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/sources/ca.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/sources/ca.m3u
new file mode 100644
index 0000000000..03a6963a33
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/sources/ca.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="MeteoMedia.ca" tvg-logo="https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png" group-title="Weather",Meteomedia
+http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/sources/in.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/sources/in.m3u
new file mode 100644
index 0000000000..d2223daac4
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/sources/in.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined",Daawah TV
+http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/sources/kg.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/sources/kg.m3u
new file mode 100644
index 0000000000..847591ab04
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/sources/kg.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="ElTR.kg" tvg-logo="https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png" group-title="General",ЭлТР (480p) [Not 24/7]
+http://gohoski.fvds.ru:3000/mediabay/162/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/sources/uk.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/sources/uk.m3u
new file mode 100644
index 0000000000..85c75b78bf
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/sources/uk.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="General;News",BBC News HD
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
diff --git a/tests/__data__/expected/playlist_generate/.gh-pages/sources/unsorted.m3u b/tests/__data__/expected/playlist_generate/.gh-pages/sources/unsorted.m3u
new file mode 100644
index 0000000000..52eb85ee4e
--- /dev/null
+++ b/tests/__data__/expected/playlist_generate/.gh-pages/sources/unsorted.m3u
@@ -0,0 +1,15 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" http-referrer="http://imn.iq" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
+#EXTINF:-1 tvg-id="DunaWorld.hu" tvg-logo="https://i.imgur.com/uOBQJZS.png" group-title="Undefined",Duna World (576i)
+http://146.59.85.40:89/dunaworld/index.m3u8
+#EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="General",ЛДПР ТВ (1080p)
+http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8
+#EXTINF:-1 tvg-id="VisitXTV.nl" tvg-logo="https://i.imgur.com/RJ9wbNF.jpg" group-title="XXX",Visit-X TV
+https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8
diff --git a/tests/__data__/expected/playlist_generate/logs/generators.log b/tests/__data__/expected/playlist_generate/logs/generators.log
index 720731423f..3095463f62 100644
--- a/tests/__data__/expected/playlist_generate/logs/generators.log
+++ b/tests/__data__/expected/playlist_generate/logs/generators.log
@@ -1,3 +1,9 @@
+{"type":"source","filepath":"sources/ad.m3u","count":3}
+{"type":"source","filepath":"sources/ca.m3u","count":1}
+{"type":"source","filepath":"sources/in.m3u","count":1}
+{"type":"source","filepath":"sources/kg.m3u","count":1}
+{"type":"source","filepath":"sources/uk.m3u","count":1}
+{"type":"source","filepath":"sources/unsorted.m3u","count":4}
{"type":"category","filepath":"categories/auto.m3u","count":0}
{"type":"category","filepath":"categories/cooking.m3u","count":0}
{"type":"category","filepath":"categories/comedy.m3u","count":0}
diff --git a/tests/__data__/expected/playlist_update/fr.m3u b/tests/__data__/expected/playlist_update/fr.m3u
index f4f93afdcf..f5d19f31ca 100644
--- a/tests/__data__/expected/playlist_update/fr.m3u
+++ b/tests/__data__/expected/playlist_update/fr.m3u
@@ -1,5 +1,3 @@
#EXTM3U
#EXTINF:-1 tvg-id="TFX.fr" http-referrer="https://pkpakiplay.xyz/" http-user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1",TFX
-#EXTVLCOPT:http-referrer=https://pkpakiplay.xyz/
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1
https://stitcher-ipv4.pluto.tv/v1/stitch/embed/hls/channel/64c109a4798def0008a6e03e/master.m3u8?advertisingId={PSID}&appVersion=unknown&deviceDNT={TARGETOPT}&deviceId={PSID}&deviceLat=0&deviceLon=0&deviceMake=samsung&deviceModel=samsung&deviceType=samsung-tvplus&deviceVersion=unknown&embedPartner=samsung-tvplus&profileFloor=&profileLimit=&samsung_app_domain={APP_DOMAIN}&samsung_app_name={APP_NAME}&us_privacy=1YNY
diff --git a/tests/__data__/expected/playlist_update/uk.m3u b/tests/__data__/expected/playlist_update/uk.m3u
index a60ea6210e..1932a92c71 100644
--- a/tests/__data__/expected/playlist_update/uk.m3u
+++ b/tests/__data__/expected/playlist_update/uk.m3u
@@ -4,4 +4,10 @@ http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
#EXTINF:-1 tvg-id="BeanoTV.uk",Beano TV
-https://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+https://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
diff --git a/tests/__data__/expected/playlist_update/us.m3u b/tests/__data__/expected/playlist_update/us.m3u
index 8102b65792..1f24e747a4 100644
--- a/tests/__data__/expected/playlist_update/us.m3u
+++ b/tests/__data__/expected/playlist_update/us.m3u
@@ -1,6 +1,11 @@
#EXTM3U
#EXTINF:-1 tvg-id="BBCAmerica.us@East" http-user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246",BBC America East (720p)
-#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246
-https://xui-backend.energeek.cl/live/9/playlist.m3u8?username=ZZDemoIPTVGH&password=mdo96EuqMkTR
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+https://xui-backend.energeek.cl/live/9/playlist.m3u8?username=ZZDemoIPTVGH&password=mdo96EuqMkTR|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
#EXTINF:-1 tvg-id="FastTV.us",Fast TV
https://3fa797d5.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/T05PX01vdG9yVHJlbmRGYXN0VFZfSExT/b5e5e0e2-12b3-4312-93c9-c0a7c50b41ca/4.m3u8
diff --git a/tests/__data__/expected/readme_update/_readme.md b/tests/__data__/expected/readme_update/_readme.md
index 67b094c3de..be2cfb8ede 100644
--- a/tests/__data__/expected/readme_update/_readme.md
+++ b/tests/__data__/expected/readme_update/_readme.md
@@ -214,6 +214,22 @@ Same thing, but split up into separate files:
+### Grouped by sources
+
+Playlists in which channels are grouped by broadcast source.
+
+
+Expand
+
+
+To use the playlist, simply replace `` in the link below with the name of one of the files in the [streams](streams) folder.
+
+```
+https://iptv-org.github.io/iptv/sources/.m3u
+```
+
+
+
## Database
All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
diff --git a/tests/__data__/input/api_generate/ad.m3u b/tests/__data__/input/api_generate/ad.m3u
index 9d8926e0ea..9cb32a9b9e 100644
--- a/tests/__data__/input/api_generate/ad.m3u
+++ b/tests/__data__/input/api_generate/ad.m3u
@@ -2,4 +2,4 @@
#EXTINF:-1 tvg-id="Zoo.ad",Zoo (720p)
https://iptv-all.lanesh4d0w.repl.co/andorra/zoo
#EXTINF:-1 tvg-id="AndorraTV.ad@SD",ATV
-https://iptv-all.lanesh4d0w.repl.co/andorra/atv
+https://iptv-all.lanesh4d0w.repl.co/andorra/atv|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
diff --git a/tests/__data__/input/data/channels.json b/tests/__data__/input/data/channels.json
index d12451f91b..250052dfa7 100644
--- a/tests/__data__/input/data/channels.json
+++ b/tests/__data__/input/data/channels.json
@@ -7,8 +7,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": null
+ "is_nsfw": false
},
{
"id": "BBCNews.uk",
@@ -21,8 +20,7 @@
"news",
"general"
],
- "is_nsfw": false,
- "logo": "https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png"
+ "is_nsfw": false
},
{
"id": "Eve.us",
@@ -32,8 +30,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": "https://www.lyngsat.com/logo/tv/ee/eve_us.png"
+ "is_nsfw": false
},
{
"id": "EverydayHeroes.us",
@@ -43,8 +40,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": "https://i.imgur.com/Iam3ol3.png"
+ "is_nsfw": false
},
{
"id": "FoxSports1.us",
@@ -54,8 +50,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": "https://cdn.tvpassport.com/image/station/100x100/fs1.png"
+ "is_nsfw": false
},
{
"id": "FoxSports2.us",
@@ -65,8 +60,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": null
+ "is_nsfw": false
},
{
"id": "LDPRTV.ru",
@@ -78,8 +72,7 @@
"categories": [
"general"
],
- "is_nsfw": false,
- "logo": "https://iptvx.one/icn/ldpr-tv.png"
+ "is_nsfw": false
},
{
"id": "LibyasChannel.ly",
@@ -89,8 +82,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": "https://i.imgur.com/RD9wbNF.jpg"
+ "is_nsfw": false
},
{
"id": "MeteoMedia.ca",
@@ -102,8 +94,7 @@
"categories": [
"weather"
],
- "is_nsfw": false,
- "logo": "https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png"
+ "is_nsfw": false
},
{
"id": "TVN.pl",
@@ -113,8 +104,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": "https://www.sms.cz/kategorie/televize/bmp/loga/velka/TVN.png"
+ "is_nsfw": false
},
{
"id": "VisitXTV.nl",
@@ -126,8 +116,7 @@
"categories": [
"xxx"
],
- "is_nsfw": true,
- "logo": "https://i.imgur.com/RJ9wbNF.jpg"
+ "is_nsfw": true
},
{
"id": "TUTV.us",
@@ -139,8 +128,7 @@
"categories": [
"general"
],
- "is_nsfw": false,
- "logo": "https://i.imgur.com/RJ9wbN4.jpg"
+ "is_nsfw": false
},
{
"id": "ManoramaNews.in",
@@ -160,8 +148,7 @@
"launched": "2006-08-17",
"closed": null,
"replaced_by": null,
- "website": "https://www.manoramanews.com",
- "logo": "https://i.imgur.com/adjRrVx.png"
+ "website": "https://www.manoramanews.com"
},
{
"id": "TV3.my",
@@ -179,8 +166,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": null,
- "logo": "https://i.imgur.com/adjRrVx.png"
+ "website": null
},
{
"id": "BBCAmerica.us",
@@ -198,8 +184,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": null,
- "logo": "https://i.imgur.com/adjRrVx.png"
+ "website": null
},
{
"id": "ATVPlus.pe",
@@ -219,8 +204,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": "https://www.atv.pe/",
- "logo": "https://i.imgur.com/fY9256H.png"
+ "website": "https://www.atv.pe/"
},
{
"id": "BeanoTV.uk",
@@ -238,8 +222,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": "https://www.beanostudios.com/",
- "logo": "https://i.imgur.com/IKHFZDJ.png"
+ "website": "https://www.beanostudios.com/"
},
{
"id": "ATX.jp",
@@ -261,8 +244,7 @@
"launched": "1997-12-24",
"closed": null,
"replaced_by": null,
- "website": "http://www.at-x.com/",
- "logo": "https://i.imgur.com/turWday.png"
+ "website": "http://www.at-x.com/"
},
{
"id": "AajTak.in",
@@ -282,8 +264,7 @@
"launched": "2000-12-31",
"closed": null,
"replaced_by": null,
- "website": "https://www.aajtak.in/livetv",
- "logo": "https://i.imgur.com/RpIdCB3.png"
+ "website": "https://www.aajtak.in/livetv"
},
{
"id": "Weathernews.jp",
@@ -301,8 +282,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": null,
- "logo": "https://i.imgur.com/A8uRSTS.png"
+ "website": null
},
{
"id": "MethTV.lk",
@@ -322,8 +302,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": "https://methtv.lk/",
- "logo": "https://i.imgur.com/jZaOFxI.png"
+ "website": "https://methtv.lk/"
},
{
"id": "Match4.hu",
@@ -341,8 +320,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": null,
- "logo": "https://i.imgur.com/hzexBLX.png"
+ "website": null
},
{
"id": "FastTV.us",
@@ -363,8 +341,7 @@
"launched": "2022-10-26",
"closed": null,
"replaced_by": null,
- "website": "https://watch.motortrend.com/",
- "logo": "https://us1-prod-images.disco-api.com/2020/7/13/4f26aaf2-a993-480d-9675-0d501fb8d86f.png?bf=0&f=png&p=true&q=85&w=250"
+ "website": "https://watch.motortrend.com/"
},
{
"id": "MCOTHD.th",
@@ -386,8 +363,7 @@
"launched": "1955-06-24",
"closed": null,
"replaced_by": null,
- "website": "https://tv.mcot.net/mcothd",
- "logo": "https://i.imgur.com/ejPxGmU.png"
+ "website": "https://tv.mcot.net/mcothd"
},
{
"id": "AmarinTV.th",
@@ -409,8 +385,7 @@
"launched": "2012-12-01",
"closed": null,
"replaced_by": null,
- "website": "https://www.amarintv.com/",
- "logo": "https://static.wikia.nocookie.net/logopedia/images/f/ff/Amarin_TV_2015.svg/revision/latest/scale-to-width-down/512"
+ "website": "https://www.amarintv.com/"
},
{
"id": "France2.fr",
@@ -430,8 +405,7 @@
"launched": "1959-09-10",
"closed": null,
"replaced_by": null,
- "website": "https://www.france.tv/france-2/",
- "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/France_2_2018.svg/512px-France_2_2018.svg.png"
+ "website": "https://www.france.tv/france-2/"
},
{
"id": "France3.fr",
@@ -451,8 +425,7 @@
"launched": "1972-12-31",
"closed": null,
"replaced_by": null,
- "website": "https://www.france.tv/france-3/",
- "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/France_3_2018.svg/512px-France_3_2018.svg.png"
+ "website": "https://www.france.tv/france-3/"
},
{
"id": "France5.fr",
@@ -472,8 +445,7 @@
"launched": "1994-12-13",
"closed": null,
"replaced_by": null,
- "website": "https://www.france.tv/france-5/",
- "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/France_5_2018.svg/512px-France_5_2018.svg.png"
+ "website": "https://www.france.tv/france-5/"
},
{
"id": "France3.fr",
@@ -493,8 +465,7 @@
"launched": "1962-01-01",
"closed": null,
"replaced_by": null,
- "website": "https://france3-regions.francetvinfo.fr/nouvelle-aquitaine/",
- "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/France_3_Aquitaine_-_Logo_2018.svg/512px-France_3_Aquitaine_-_Logo_2018.svg.png"
+ "website": "https://france3-regions.francetvinfo.fr/nouvelle-aquitaine/"
},
{
"id": "TF1.fr",
@@ -514,8 +485,7 @@
"launched": "1975-01-06",
"closed": null,
"replaced_by": null,
- "website": "https://www.tf1.fr",
- "logo": "https://i.imgur.com/QxHt9NC.png"
+ "website": "https://www.tf1.fr"
},
{
"id": "TF1SeriesFilms.fr",
@@ -537,8 +507,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": "https://www.tf1.fr/tf1-series-films",
- "logo": "https://i.imgur.com/4CJIDKQ.png"
+ "website": "https://www.tf1.fr/tf1-series-films"
},
{
"id": "TMC.fr",
@@ -558,8 +527,7 @@
"launched": "1954-11-19",
"closed": null,
"replaced_by": null,
- "website": "https://www.tf1.fr/tmc",
- "logo": "https://upload.wikimedia.org/wikipedia/en/thumb/5/54/TMC_logo.svg/512px-TMC_logo.svg.png"
+ "website": "https://www.tf1.fr/tmc"
},
{
"id": "TFX.fr",
@@ -575,8 +543,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": "https://www.tf1.fr/tfx",
- "logo": "https://i.imgur.com/d91GcVf.png"
+ "website": "https://www.tf1.fr/tfx"
},
{
"id": "ManoramaNews.in",
@@ -596,8 +563,7 @@
"launched": "2006-08-17",
"closed": null,
"replaced_by": null,
- "website": "https://www.manoramanews.com",
- "logo": "https://i.imgur.com/adjRrVx.png"
+ "website": "https://www.manoramanews.com"
},
{
"id": "13thStreet.au",
@@ -617,8 +583,7 @@
"launched": "2009-11-15",
"closed": "2019-12-31",
"replaced_by": "Sleuth.au",
- "website": "http://www.13thstreet.com.au/",
- "logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/13th_street_logo_uk_master_rgb_black.png/512px-13th_street_logo_uk_master_rgb_black.png"
+ "website": "http://www.13thstreet.com.au/"
},
{
"id": "Zoo.ad",
@@ -628,8 +593,7 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": null
+ "is_nsfw": false
},
{
"id": "DunaWorld.hu",
@@ -641,8 +605,7 @@
"categories": [
"General"
],
- "is_nsfw": false,
- "logo": "https://i.imgur.com/uOBQJZS.png"
+ "is_nsfw": false
},
{
"id": "ElTR.kg",
@@ -675,8 +638,7 @@
"launched": null,
"closed": null,
"replaced_by": null,
- "website": "https://eltr.kg",
- "logo": "https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png"
+ "website": "https://eltr.kg"
},
{
"id": "IONTV.us",
@@ -686,7 +648,26 @@
"subdivision": null,
"city": null,
"categories": [],
- "is_nsfw": false,
- "logo": "https://i.imgur.com/Iam3ol3.png"
+ "is_nsfw": false
+ },
+ {
+ "id": "NPO1.nl",
+ "name": "NPO 1",
+ "network": null,
+ "country": "NL",
+ "subdivision": null,
+ "city": null,
+ "categories": [],
+ "is_nsfw": false
+ },
+ {
+ "id": "NPO2.nl",
+ "name": "NPO 2",
+ "network": null,
+ "country": "NL",
+ "subdivision": null,
+ "city": null,
+ "categories": [],
+ "is_nsfw": false
}
]
\ No newline at end of file
diff --git a/tests/__data__/input/data/logos.json b/tests/__data__/input/data/logos.json
new file mode 100644
index 0000000000..ead8324b71
--- /dev/null
+++ b/tests/__data__/input/data/logos.json
@@ -0,0 +1,11 @@
+[
+ {"channel":"MeteoMedia.ca","feed":null,"tags":[],"width":512,"height":512,"format":"PNG","url":"https://s1.twnmm.com/images/en_ca/mobile/logos/twn-mobile-logo.png"},
+ {"channel":"LDPRTV.ru","feed":null,"tags":[],"width":512,"height":512,"format":"PNG","url":"https://iptvx.one/icn/ldpr-tv.png"},
+ {"channel":"ElTR.kg","feed":null,"tags":[],"width":512,"height":512,"format":"PNG","url":"https://i.ibb.co/r6czQwQ/365049798-774721644658455-5702658175909463406-n-2.png"},
+ {"channel":"BBCNews.uk","feed":null,"tags":[],"width":512,"height":512,"format":"PNG","url":"https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png"},
+ {"channel":"DunaWorld.hu","feed":null,"tags":[],"width":512,"height":512,"format":"PNG","url":"https://i.imgur.com/uOBQJZS.png"},
+ {"channel":"VisitXTV.nl","feed":null,"tags":[],"width":512,"height":512,"format":"JPEG","url":"https://i.imgur.com/RJ9wbNF.jpg"},
+ {"channel":"AndorraTV.ad","feed":"SD","tags":[],"width":512,"height":512,"format":"PNG","url":"https://i.imgur.com/BnhTn8i.png"},
+ {"channel":"AndorraTV.ad","feed":null,"tags":[],"width":1000,"height":1000,"format":"JPEG","url":"https://i.imgur.com/AnhTn8i.png"},
+ {"channel":"AndorraTV.ad","feed":null,"tags":[],"width":512,"height":512,"format":"PNG","url":"https://i.imgur.com/CnhTn8i.png"}
+]
\ No newline at end of file
diff --git a/tests/__data__/input/playlist_update/issues.js b/tests/__data__/input/issues.js
similarity index 97%
rename from tests/__data__/input/playlist_update/issues.js
rename to tests/__data__/input/issues.js
index 8feff1416f..2dae6dfff6 100644
--- a/tests/__data__/input/playlist_update/issues.js
+++ b/tests/__data__/input/issues.js
@@ -1515,7 +1515,7 @@ module.exports = [
closed_at: null,
author_association: 'NONE',
active_lock_reason: null,
- body: '### Stream ID\r\n\r\nBeanoTV.uk\r\n\r\n### Stream URL (optional)\r\n\r\nhttps://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8\r\n\r\n### Notes (optional)\r\n\r\n_No response_\r\n\r\n### Please confirm the following\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)',
+ body: '### Stream ID\r\n\r\nBeanoTV.uk\r\n\r\n### Stream URL (optional)\r\n\r\nhttps://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"\r\n\r\n### Directives (optional)\r\n\r\n#EXTVLCOPT:http-referrer=http://imn.iq\r\n\r\n#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148\r\n\r\n#KODIPROP:inputstream=inputstream.adaptive\r\n\r\n#KODIPROP:inputstream.adaptive.manifest_type=mpd\r\n\r\n#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha\r\n\r\n#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|\r\n\r\n### Notes (optional)\r\n\r\n_No response_\r\n\r\n### Please confirm the following\r\n\r\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md#request-a-channel)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/13751/reactions',
total_count: 0,
@@ -1664,7 +1664,7 @@ module.exports = [
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
- url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:edit',
name: 'streams:edit',
color: '017ff9',
default: false,
@@ -1743,7 +1743,7 @@ module.exports = [
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
- url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:edit',
name: 'streams:edit',
color: '017ff9',
default: false,
@@ -1761,7 +1761,7 @@ module.exports = [
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
- body: '### Stream URL (required)\n\nhttps://servilive.com:3126/live/tele2000live.m3u8\n\n### New Stream URL\n\nhttps://xui-backend.energeek.cl/live/9/playlist.m3u8?username=ZZDemoIPTVGH&password=mdo96EuqMkTR\n\n### Stream ID\n\nBBCAmerica.us@East\n\n### Quality\n\n720p\n\n### Label\n\n~\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n~\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
+ body: '### Stream URL (required)\n\nhttps://servilive.com:3126/live/tele2000live.m3u8\n\n### New Stream URL\n\nhttps://xui-backend.energeek.cl/live/9/playlist.m3u8?username=ZZDemoIPTVGH&password=mdo96EuqMkTR|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"\n\n### Stream ID\n\nBBCAmerica.us@East\n\n### Quality\n\n720p\n\n### Label\n\n~\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n~\n\n### Directives (optional)\r\n\r\n#EXTVLCOPT:http-referrer=http://imn.iq\r\n\r\n#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148\r\n\r\n#KODIPROP:inputstream=inputstream.adaptive\r\n\r\n#KODIPROP:inputstream.adaptive.manifest_type=mpd\r\n\r\n#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha\r\n\r\n#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/reactions',
total_count: 0,
@@ -1822,7 +1822,7 @@ module.exports = [
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
- url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:edit',
name: 'streams:edit',
color: '017ff9',
default: false,
diff --git a/tests/__data__/input/playlist_format/nl.m3u b/tests/__data__/input/playlist_format/nl.m3u
index 39d56a3ef4..1d12f3b3e1 100644
--- a/tests/__data__/input/playlist_format/nl.m3u
+++ b/tests/__data__/input/playlist_format/nl.m3u
@@ -2,7 +2,11 @@
#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (302p) [Geo-blocked]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8?
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8?|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 [Geo-blocked]
http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo22.isml/.m3u8
#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p)
diff --git a/tests/__data__/input/playlist_generate/unsorted.m3u b/tests/__data__/input/playlist_generate/unsorted.m3u
index 826414ad22..4310ac744a 100644
--- a/tests/__data__/input/playlist_generate/unsorted.m3u
+++ b/tests/__data__/input/playlist_generate/unsorted.m3u
@@ -6,6 +6,10 @@ https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8
#EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7]
#EXTVLCOPT:http-referrer=http://imn.iq
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
-http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
+http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8|Referer="https://referer.xyz/"|User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 17_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"|Origin="https://origin.xyz"
#EXTINF:-1 tvg-id="DunaWorld.hu",Duna World (576i)
http://146.59.85.40:89/dunaworld/index.m3u8
diff --git a/tests/__data__/input/playlist_validate/wrong_id.m3u b/tests/__data__/input/playlist_validate/wrong_id.m3u
index dc7ab8504f..94d9cc2bc8 100644
--- a/tests/__data__/input/playlist_validate/wrong_id.m3u
+++ b/tests/__data__/input/playlist_validate/wrong_id.m3u
@@ -1,3 +1,9 @@
#EXTM3U
#EXTINF:-1 tvg-id="qib22lAq1L.us",ABC (720p)
+#EXTVLCOPT:http-referrer=http://imn.iq
+#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
+#KODIPROP:inputstream=inputstream.adaptive
+#KODIPROP:inputstream.adaptive.manifest_type=mpd
+#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
+#KODIPROP:inputstream.adaptive.license_key=https://drm.ors.at/acquire-license/widevine?BrandGuid=13f2e056-53fe-4469-ba6d-999970dbe549&userToken=v9ZVSksv4S7rT55o10dmYNRa4asye3z05eWCFxD%2FFYIlTJEpuf6tF8asPcyQOFq0h5opS%2B6WoMxnshWkihpHq5qrdrBEZ69piE94J9Feh385snGOqK3PYO7tLLjxmsCAe%2B9%2BNnurSSO5RCAIRsL125nSj1eOR%2F1GSKOgGH80HK2FDLiePxPkeaAxuWzacNBB%2FqnIGGxfe3GlmN65cU9F8WEpKFDlaxW%2Fv3ZSLAp3%2BZEq1aZXJ6Oz%2Fi0diD0EybH7|Content-Type=application/octet-stream|R{SSM}|
https://example.com/playlist2.m3u8
diff --git a/tests/__data__/input/readme_update/.readme/template.md b/tests/__data__/input/readme_update/.readme/template.md
index 4883a98e4f..68aaa68b7c 100644
--- a/tests/__data__/input/readme_update/.readme/template.md
+++ b/tests/__data__/input/readme_update/.readme/template.md
@@ -115,6 +115,22 @@ Same thing, but split up into separate files:
+### Grouped by sources
+
+Playlists in which channels are grouped by broadcast source.
+
+
+Expand
+
+
+To use the playlist, simply replace `` in the link below with the name of one of the files in the [streams](streams) folder.
+
+```
+https://iptv-org.github.io/iptv/sources/.m3u
+```
+
+
+
## Database
All channel data is taken from the [iptv-org/database](https://github.com/iptv-org/database) repository. If you find any errors please open a new [issue](https://github.com/iptv-org/database/issues) there.
diff --git a/tests/__data__/input/readme_update/generators.log b/tests/__data__/input/readme_update/generators.log
index 55adb62b06..62325ede73 100644
--- a/tests/__data__/input/readme_update/generators.log
+++ b/tests/__data__/input/readme_update/generators.log
@@ -1,3 +1,8 @@
+{"type":"source","filepath":"sources/ad.m3u","count":3}
+{"type":"source","filepath":"sources/ca.m3u","count":1}
+{"type":"source","filepath":"sources/in.m3u","count":1}
+{"type":"source","filepath":"sources/kg.m3u","count":1}
+{"type":"source","filepath":"sources/uk.m3u","count":1}
{"type":"category","filepath":"categories/auto.m3u","count":0}
{"type":"category","filepath":"categories/animation.m3u","count":0}
{"type":"category","filepath":"categories/business.m3u","count":0}