mirror of
https://github.com/theariatv/theariatv.github.io.git
synced 2025-09-09 17:06:12 +02:00
Compare commits
5 commits
78d5df5962
...
4ac4a43093
Author | SHA1 | Date | |
---|---|---|---|
|
4ac4a43093 | ||
|
e94dc9f2a0 | ||
|
6ed4dcfb37 | ||
|
b55da08d49 | ||
|
ace0250e71 |
3 changed files with 115 additions and 38 deletions
10
aria+.m3u
10
aria+.m3u
|
@ -1,4 +1,14 @@
|
||||||
#EXTM3U url-tvg="https://epgshare01.online/epgshare01/epg_ripper_ALL_SOURCES1.xml.gz"
|
#EXTM3U url-tvg="https://epgshare01.online/epgshare01/epg_ripper_ALL_SOURCES1.xml.gz"
|
||||||
|
#EXTINF:-1 group-title="Leaving on Aria+" tvg-id="ABC.Spark.ca" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/canada/abc-spark-ca.png",ABC Spark
|
||||||
|
http://1tv41.icu:8080/mark102/mark102/57375
|
||||||
|
#EXTINF:-1 group-title="Leaving on Aria+" tvg-id="Disney.Jr.ca" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/canada/disney-jr-ca.png",Disney Jr.
|
||||||
|
http://jmrk.xyz:5050/dsolo1991@comcast.net/AwfEN4h9Cc/418460
|
||||||
|
#EXTINF:-1 group-title="Leaving on Aria+" tvg-id="Disney.XD.ca" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/canada/disney-xd-ca.png",Disney XD
|
||||||
|
http://01012024.com:2086/MalteZP8754/WEbAp6XsKz/233406
|
||||||
|
#EXTINF:-1 group-title="Leaving on Aria+" tvg-id="La.Chaîne.Disney.ca" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/canada/la-chaine-disney-ca.png",La Chaîne Disney
|
||||||
|
http://stream.ultimate-tvservice.com:8080/shept77/tins8/265309
|
||||||
|
#EXTINF:-1 group-title="Leaving on Aria+" tvg-id="Nickelodeon.ca" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/nickelodeon-us.png",Nickelodeon
|
||||||
|
http://jmrk.xyz:5050/dsolo1991@comcast.net/AwfEN4h9Cc/418547
|
||||||
#EXTINF:-1 group-title="Albania" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/e/ec/Bang_Bang_logo_2009.png",Bang Bang
|
#EXTINF:-1 group-title="Albania" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/e/ec/Bang_Bang_logo_2009.png",Bang Bang
|
||||||
https://digitalb-live.morescreens.com/DAL_1_004/playlist.m3u8?id=DAL_1_004&video_id=16377&token=142cda7d50870275a9ca7988ff001b32ab30709b&authority_instance_id=spectar-prd-digitalb&profile_id=1&application_installation_id=1&uuid=backoffice1&subscriber_id=1&application_id=backoffice1&detected_delivery_method=hls&playlist_template=nginx&ps=6ca6054c4d6f9fafd6e3202ad620d4cc30ee45fdbbf1526cab3fdcac143b283d2f7251b3babf442b3a4fb90820abcc0cfaab2bff9a76799adc92b09fa0151f25&vh=7edb2a069c1d9e1872251cc87e99c568dfd18769f97905bd1dcaf519b259c970f880a1c43b6a7392ac496426adb0e55a2f6dbb06981536af9c1c987416282783
|
https://digitalb-live.morescreens.com/DAL_1_004/playlist.m3u8?id=DAL_1_004&video_id=16377&token=142cda7d50870275a9ca7988ff001b32ab30709b&authority_instance_id=spectar-prd-digitalb&profile_id=1&application_installation_id=1&uuid=backoffice1&subscriber_id=1&application_id=backoffice1&detected_delivery_method=hls&playlist_template=nginx&ps=6ca6054c4d6f9fafd6e3202ad620d4cc30ee45fdbbf1526cab3fdcac143b283d2f7251b3babf442b3a4fb90820abcc0cfaab2bff9a76799adc92b09fa0151f25&vh=7edb2a069c1d9e1872251cc87e99c568dfd18769f97905bd1dcaf519b259c970f880a1c43b6a7392ac496426adb0e55a2f6dbb06981536af9c1c987416282783
|
||||||
#EXTINF:-1 group-title="Albania" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/db/%C3%87ufo_logo.png",Cufo
|
#EXTINF:-1 group-title="Albania" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/d/db/%C3%87ufo_logo.png",Cufo
|
||||||
|
|
22
aria.m3u
22
aria.m3u
|
@ -330,7 +330,7 @@ http://tvh.cyn.cz/stream/channelid/1693764695?profile=pass
|
||||||
#EXTINF:-1 group-title="Czechia" tvg-id="AMC.cz",AMC
|
#EXTINF:-1 group-title="Czechia" tvg-id="AMC.cz",AMC
|
||||||
http://185.236.230.212:9981/play/a0bb
|
http://185.236.230.212:9981/play/a0bb
|
||||||
#EXTINF:-1 group-title="Czechia" tvg-id="Auto.Motor.Sport.cz",AUTOMOTORSPORT HD
|
#EXTINF:-1 group-title="Czechia" tvg-id="Auto.Motor.Sport.cz",AUTOMOTORSPORT HD
|
||||||
https://webstream.odjezdy.online/EU/AMSTV/video.m3u8
|
http://tvh.cyn.cz/stream/channelid/1879523926?profile=pass
|
||||||
#EXTINF:-1 group-title="Czechia",CANAL+ ACTION HD
|
#EXTINF:-1 group-title="Czechia",CANAL+ ACTION HD
|
||||||
http://185.236.230.212:9981/play/a0bw
|
http://185.236.230.212:9981/play/a0bw
|
||||||
#EXTINF:-1 group-title="Czechia",CANAL+ SPORT
|
#EXTINF:-1 group-title="Czechia",CANAL+ SPORT
|
||||||
|
@ -925,33 +925,33 @@ http://92.44.60.75:9981/stream/channelid/1077291277?profile=pass
|
||||||
#EXTINF:-1 tvg-logo="https://upload.wikimedia.org/wikipedia/commons/b/b9/CNBC-e-Logo.png" group-title="Türkyie",CNBC-e
|
#EXTINF:-1 tvg-logo="https://upload.wikimedia.org/wikipedia/commons/b/b9/CNBC-e-Logo.png" group-title="Türkyie",CNBC-e
|
||||||
http://92.44.60.75:9981/stream/channelid/301687148?profile=pass
|
http://92.44.60.75:9981/stream/channelid/301687148?profile=pass
|
||||||
#EXTINF:-1 tvg-id="BBC.One.Lon.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-one-uk.png",BBC One
|
#EXTINF:-1 tvg-id="BBC.One.Lon.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-one-uk.png",BBC One
|
||||||
http://31.121.110.30:4000/play/a002/index.m3u8
|
https://a1xs.vip/1000001
|
||||||
#EXTINF:-1 tvg-id="BBC.Two.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-two-uk.png",BBC Two
|
#EXTINF:-1 tvg-id="BBC.Two.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-two-uk.png",BBC Two
|
||||||
http://31.121.110.30:4000/play/a003/index.m3u8
|
https://a1xs.vip/1000002
|
||||||
#EXTINF:-1 tvg-id="ITV1.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-1-uk.png",ITV 1
|
#EXTINF:-1 tvg-id="ITV1.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-1-uk.png",ITV 1
|
||||||
http://31.121.110.30:4000/play/a004/index.m3u8
|
https://a1xs.vip/1000011
|
||||||
#EXTINF:-1 tvg-id="Channel.4.hd.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/channel-4-uk.png",Channel 4
|
#EXTINF:-1 tvg-id="Channel.4.hd.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/channel-4-uk.png",Channel 4
|
||||||
http://31.121.110.30:4000/play/a005/index.m3u8
|
https://a1xs.vip/1000031
|
||||||
#EXTINF:-1 tvg-id="Channel.5.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/channel-5-uk.png",5
|
#EXTINF:-1 tvg-id="Channel.5.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/channel-5-uk.png",5
|
||||||
http://31.121.110.30:4000/play/a006/index.m3u8
|
https://a1xs.vip/1000030
|
||||||
#EXTINF:-1 tvg-id="BBC.Four.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-four-uk.png",BBC Four
|
#EXTINF:-1 tvg-id="BBC.Four.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-four-uk.png",BBC Four
|
||||||
http://31.121.110.30:4000/play/a01n/index.m3u8
|
http://31.121.110.30:4000/play/a01n/index.m3u8
|
||||||
#EXTINF:-1 tvg-id="ITV2.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-2-uk.png",ITV 2
|
#EXTINF:-1 tvg-id="ITV2.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-2-uk.png",ITV 2
|
||||||
http://31.121.110.30:4000/play/a007/index.m3u8
|
http://31.121.110.30:4000/play/a007/index.m3u8
|
||||||
#EXTINF:-1 tvg-id="ITV3.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-3-uk.png",ITV 3
|
#EXTINF:-1 tvg-id="ITV3.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-3-uk.png",ITV 3
|
||||||
http://31.121.110.30:4000/play/a008/index.m3u8
|
https://a1xs.vip/1000013
|
||||||
#EXTINF:-1 tvg-id="ITV4.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-4-uk.png",ITV 4
|
#EXTINF:-1 tvg-id="ITV4.HD.uk" group-title="United Kingdom" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/itv-4-uk.png",ITV 4
|
||||||
http://31.121.110.30:4000/play/a00l/index.m3u8
|
https://a1xs.vip/1000014
|
||||||
#EXTINF:-1 tvg-id="ITV.Quiz.HD.uk" group-title="United Kingdom" tvg-logo="https://i.ibb.co/TDtF2ycb/ITV-Quiz-2025.png",ITV Quiz
|
#EXTINF:-1 tvg-id="ITV.Quiz.HD.uk" group-title="United Kingdom" tvg-logo="https://i.ibb.co/TDtF2ycb/ITV-Quiz-2025.png",ITV Quiz
|
||||||
http://31.121.110.30:4000/play/a00n/index.m3u8
|
http://31.121.110.30:4000/play/a00n/index.m3u8
|
||||||
#EXTINF:-1 tvg-id="E4.hd.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/e-4-uk.png" group-title="United Kingdom",E4
|
#EXTINF:-1 tvg-id="E4.hd.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/e-4-uk.png" group-title="United Kingdom",E4
|
||||||
http://31.121.110.30:4000/play/a00b/index.m3u8
|
https://a1xs.vip/1000032
|
||||||
#EXTINF:-1 tvg-id="E4.Extra.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/e-4-extra-uk.png" group-title="United Kingdom",E4 Extra
|
#EXTINF:-1 tvg-id="E4.Extra.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/e-4-extra-uk.png" group-title="United Kingdom",E4 Extra
|
||||||
http://31.121.110.30:4000/play/a00q/index.m3u8
|
http://31.121.110.30:4000/play/a00q/index.m3u8
|
||||||
#EXTINF:-1 tvg-id="Film4.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/film-4-uk.png" group-title="United Kingdom",Film4
|
#EXTINF:-1 tvg-id="Film4.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/film-4-uk.png" group-title="United Kingdom",Film4
|
||||||
http://31.121.110.30:4000/play/a00c/index.m3u8
|
http://31.121.110.30:4000/play/a00c/index.m3u8
|
||||||
#EXTINF:-1 tvg-id="4seven.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/4-seven-uk.png" group-title="United Kingdom",4seven
|
#EXTINF:-1 tvg-id="4seven.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/4-seven-uk.png" group-title="United Kingdom",4seven
|
||||||
http://31.121.110.30:4000/play/a016/index.m3u8
|
https://a1xs.vip/1000036
|
||||||
#EXTINF:-1 tvg-id="Challange.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/challange-uk.png" group-title="United Kingdom",Challange
|
#EXTINF:-1 tvg-id="Challange.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/challange-uk.png" group-title="United Kingdom",Challange
|
||||||
http://31.121.110.30:4000/play/a02t/index.m3u8
|
http://31.121.110.30:4000/play/a02t/index.m3u8
|
||||||
#EXTINF:-1 tvg-id="5ACTION.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/5-action-uk.png" group-title="United Kingdom",5ACTION
|
#EXTINF:-1 tvg-id="5ACTION.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-kingdom/5-action-uk.png" group-title="United Kingdom",5ACTION
|
||||||
|
@ -961,7 +961,7 @@ http://31.121.110.30:4000/play/a00j/index.m3u8
|
||||||
#EXTINF:-1 tvg-id="Sky.News.HD.uk" "https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/sky-news-uk.png"group-title="United Kingdom",Sky News
|
#EXTINF:-1 tvg-id="Sky.News.HD.uk" "https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/sky-news-uk.png"group-title="United Kingdom",Sky News
|
||||||
https://linear417-gb-hls1-prd-ak.cdn.skycdp.com/100e/Content/HLS_001_1080_30/Live/channel(skynews)/index_1080-30.m3u8
|
https://linear417-gb-hls1-prd-ak.cdn.skycdp.com/100e/Content/HLS_001_1080_30/Live/channel(skynews)/index_1080-30.m3u8
|
||||||
#EXTINF:-1 tvg-id="BBC.NEWS.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-news-uk.png" group-title="United Kingdom",BBC News
|
#EXTINF:-1 tvg-id="BBC.NEWS.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/bbc-news-uk.png" group-title="United Kingdom",BBC News
|
||||||
http://31.121.110.30:4000/play/a01o/index.m3u8
|
https://a1xs.vip/1000015
|
||||||
#EXTINF:-1 tvg-id="GB.News.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/gb-news-uk.png" group-title="United Kingdom",GB News
|
#EXTINF:-1 tvg-id="GB.News.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/gb-news-uk.png" group-title="United Kingdom",GB News
|
||||||
https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-gbnewsnz-samsungnz/playlist.m3u8
|
https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-gbnewsnz-samsungnz/playlist.m3u8
|
||||||
#EXTINF:-1 tvg-id="TalkTV.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/talk-tv-uk.png" group-title="United Kingdom",Talk TV
|
#EXTINF:-1 tvg-id="TalkTV.HD.uk" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/main/countries/united-kingdom/talk-tv-uk.png" group-title="United Kingdom",Talk TV
|
||||||
|
|
119
index.html
119
index.html
|
@ -13,6 +13,7 @@
|
||||||
--border-color: #dee2e6;
|
--border-color: #dee2e6;
|
||||||
--accent-color: #0d6efd;
|
--accent-color: #0d6efd;
|
||||||
--header-bg: #ffffff;
|
--header-bg: #ffffff;
|
||||||
|
--danger-color: #dc3545;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
|
@ -23,6 +24,7 @@
|
||||||
--border-color: #343a40;
|
--border-color: #343a40;
|
||||||
--accent-color: #4dabf7;
|
--accent-color: #4dabf7;
|
||||||
--header-bg: #1e1e1e;
|
--header-bg: #1e1e1e;
|
||||||
|
--danger-color: #f06571;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,6 +80,21 @@
|
||||||
margin: 0.5rem 0;
|
margin: 0.5rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#search-input {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
background-color: var(--header-bg);
|
||||||
|
color: var(--text-color);
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
.category-folder {
|
.category-folder {
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
@ -104,6 +121,7 @@
|
||||||
padding: 0.75rem 1.5rem;
|
padding: 0.75rem 1.5rem;
|
||||||
border-top: 1px solid var(--border-color);
|
border-top: 1px solid var(--border-color);
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.channel-table th {
|
.channel-table th {
|
||||||
|
@ -130,6 +148,18 @@
|
||||||
cursor: help;
|
cursor: help;
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.report-button {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
padding: 4px 8px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid var(--danger-color);
|
||||||
|
background: transparent;
|
||||||
|
color: var(--danger-color);
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
|
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
|
||||||
|
@ -143,7 +173,6 @@
|
||||||
<script type="text/babel">
|
<script type="text/babel">
|
||||||
const { useState, useEffect } = React;
|
const { useState, useEffect } = React;
|
||||||
|
|
||||||
// --- Funkce pro parsování .m3u souborů ---
|
|
||||||
const parseM3U = (m3uContent, isStable) => {
|
const parseM3U = (m3uContent, isStable) => {
|
||||||
const lines = m3uContent.split('\n');
|
const lines = m3uContent.split('\n');
|
||||||
const channels = {};
|
const channels = {};
|
||||||
|
@ -163,24 +192,38 @@
|
||||||
const channelName = line.split(',').pop().trim();
|
const channelName = line.split(',').pop().trim();
|
||||||
const streamUrl = nextLine.trim();
|
const streamUrl = nextLine.trim();
|
||||||
|
|
||||||
if (!channels[country]) {
|
if (!channels[country]) channels[country] = {};
|
||||||
channels[country] = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!channels[country][channelName]) {
|
if (!channels[country][channelName]) {
|
||||||
channels[country][channelName] = { name: channelName, stable: isStable, url: streamUrl };
|
channels[country][channelName] = { name: channelName, stable: isStable, url: streamUrl };
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) { console.error("Error parsing line:", line, e); }
|
||||||
console.error("Chyba při parsování řádku:", line, e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return channels;
|
return channels;
|
||||||
};
|
};
|
||||||
|
|
||||||
// --- Komponenty ---
|
const Category = ({ country, channels, forceOpen }) => {
|
||||||
const Category = ({ country, channels }) => {
|
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsOpen(forceOpen);
|
||||||
|
}, [forceOpen]);
|
||||||
|
|
||||||
|
const createReportURL = (channel) => {
|
||||||
|
const repoUrl = "https://github.com/theariatv/theariatv.github.io/issues/new";
|
||||||
|
const title = `Broken Stream: ${channel.name}`;
|
||||||
|
const sourceFile = channel.stable ? 'aria.m3u' : 'aria+.m3u';
|
||||||
|
const body = `
|
||||||
|
**Channel Name:** ${channel.name}
|
||||||
|
**Stream URL:** \`${channel.url}\`
|
||||||
|
**Source Playlist:** ${sourceFile}
|
||||||
|
|
||||||
|
**Problem:** (Please describe the issue, e.g., 'Stream does not load', 'Shows a black screen', 'Wrong content', etc.)
|
||||||
|
`;
|
||||||
|
return `${repoUrl}?title=${encodeURIComponent(title)}&body=${encodeURIComponent(body)}`;
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="category-folder">
|
<div className="category-folder">
|
||||||
<div className="category-header" onClick={() => setIsOpen(!isOpen)}>
|
<div className="category-header" onClick={() => setIsOpen(!isOpen)}>
|
||||||
|
@ -193,6 +236,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th>Channel</th>
|
<th>Channel</th>
|
||||||
<th>Stream Link</th>
|
<th>Stream Link</th>
|
||||||
|
<th>Report</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -209,6 +253,9 @@
|
||||||
<td>
|
<td>
|
||||||
<a href={channel.url} target="_blank" rel="noopener noreferrer">Link</a>
|
<a href={channel.url} target="_blank" rel="noopener noreferrer">Link</a>
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href={createReportURL(channel)} target="_blank" rel="noopener noreferrer" className="report-button">Report</a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
))}
|
))}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -219,19 +266,16 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const [channelData, setChannelData] = useState([]);
|
const [allChannelData, setAllChannelData] = useState([]);
|
||||||
|
const [filteredData, setFilteredData] = useState([]);
|
||||||
|
const [searchTerm, setSearchTerm] = useState('');
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchAndParseData = async () => {
|
const fetchAndParseData = async () => {
|
||||||
try {
|
try {
|
||||||
const [ariaRes, ariaPlusRes] = await Promise.all([
|
const [ariaRes, ariaPlusRes] = await Promise.all([ fetch('aria.m3u'), fetch('aria+.m3u') ]);
|
||||||
fetch('aria.m3u'),
|
const [ariaText, ariaPlusText] = await Promise.all([ ariaRes.text(), ariaPlusRes.text() ]);
|
||||||
fetch('aria+.m3u')
|
|
||||||
]);
|
|
||||||
|
|
||||||
const ariaText = await ariaRes.text();
|
|
||||||
const ariaPlusText = await ariaPlusRes.text();
|
|
||||||
|
|
||||||
const stableChannels = parseM3U(ariaText, true);
|
const stableChannels = parseM3U(ariaText, true);
|
||||||
const unstableChannels = parseM3U(ariaPlusText, false);
|
const unstableChannels = parseM3U(ariaPlusText, false);
|
||||||
|
@ -251,17 +295,30 @@
|
||||||
channels: Object.values(allChannels[country]).sort((a, b) => a.name.localeCompare(b.name))
|
channels: Object.values(allChannels[country]).sort((a, b) => a.name.localeCompare(b.name))
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setChannelData(formattedData);
|
setAllChannelData(formattedData);
|
||||||
} catch (error) {
|
setFilteredData(formattedData);
|
||||||
console.error("Nepodařilo se načíst data kanálů:", error);
|
} catch (error) { console.error("Could not load channel data:", error); }
|
||||||
} finally {
|
finally { setLoading(false); }
|
||||||
setLoading(false);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
fetchAndParseData();
|
fetchAndParseData();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (searchTerm === '') {
|
||||||
|
setFilteredData(allChannelData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const lowercasedFilter = searchTerm.toLowerCase();
|
||||||
|
const filtered = allChannelData
|
||||||
|
.map(category => ({
|
||||||
|
...category,
|
||||||
|
channels: category.channels.filter(channel => channel.name.toLowerCase().includes(lowercasedFilter))
|
||||||
|
}))
|
||||||
|
.filter(category => category.channels.length > 0);
|
||||||
|
setFilteredData(filtered);
|
||||||
|
}, [searchTerm, allChannelData]);
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<header>
|
<header>
|
||||||
|
@ -281,19 +338,29 @@
|
||||||
</div>
|
</div>
|
||||||
<h3>Want to help us?</h3>
|
<h3>Want to help us?</h3>
|
||||||
<p>
|
<p>
|
||||||
You can go to the <a href="https://github.com/theariatv/theariatv.github.io/issues" target="_blank" rel="noopener noreferrer">Issues tab</a> on GitHub to request a channel-specific action.
|
You can go to the <a href="https://github.com/theariatv/theariatv.github.io/issues" target="_blank" rel="noopener noreferrer">Issues tab</a> on GitHub to request a channel-specific action, or use the "Report" button next to a channel.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2>Channel List</h2>
|
<h2>Channel List</h2>
|
||||||
|
<div className="search-container">
|
||||||
|
<input
|
||||||
|
id="search-input"
|
||||||
|
type="search"
|
||||||
|
placeholder="Search for a channel..."
|
||||||
|
value={searchTerm}
|
||||||
|
onChange={e => setSearchTerm(e.target.value)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<p>Loading channels...</p>
|
<p>Loading channels...</p>
|
||||||
) : (
|
) : (
|
||||||
channelData.map(category => (
|
filteredData.map(category => (
|
||||||
<Category
|
<Category
|
||||||
key={category.country}
|
key={category.country}
|
||||||
country={category.country}
|
country={category.country}
|
||||||
channels={category.channels}
|
channels={category.channels}
|
||||||
|
forceOpen={searchTerm.length > 0}
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
)}
|
)}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue