Spaces:
Running
Running
Fix VTV: remove AbortSignal.timeout, proxy VTVGo CDN, verify=False SSL
Browse files- static/yt_live.js +2 -2
static/yt_live.js
CHANGED
|
@@ -789,7 +789,7 @@
|
|
| 789 |
async function loadAllStreams(){
|
| 790 |
if(_loading) return; _loading=true;
|
| 791 |
const el=document.getElementById('vtv-load'); if(el) el.innerHTML='<div class="vtv-spinner"></div>Đang tải kênh...';
|
| 792 |
-
try{const r=await fetch('/api/vtv/streams',
|
| 793 |
CHANNELS.forEach(ch=>{const t=document.getElementById('vtvt-'+ch.id); if(t){if(STREAMS[ch.id]&&STREAMS[ch.id].length>0){t.classList.remove('off'); t.textContent=ch.name;}else{t.style.opacity='0.35'; t.textContent=ch.name+' ✕';}}});
|
| 794 |
_loading=false; _streamsLoaded=true;
|
| 795 |
}
|
|
@@ -808,7 +808,7 @@
|
|
| 808 |
async function loadEpg(chId){
|
| 809 |
const el=document.getElementById('vtv-epg-list'); if(!el) return;
|
| 810 |
el.innerHTML='<div class="vtv-epg-loading"><div class="vtv-epg-sp"></div>Đang tải lịch...</div>';
|
| 811 |
-
try{const r=await fetch('/api/vtv/epg/'+chId,
|
| 812 |
}
|
| 813 |
|
| 814 |
window._vtvToggleEpg=function(){const l=document.getElementById('vtv-epg-list'),b=document.getElementById('vtv-epg-toggle'); if(!l||!b)return; if(l.style.display==='none'){l.style.display='flex';b.textContent='Ẩn';}else{l.style.display='none';b.textContent='Hiện';}};
|
|
|
|
| 789 |
async function loadAllStreams(){
|
| 790 |
if(_loading) return; _loading=true;
|
| 791 |
const el=document.getElementById('vtv-load'); if(el) el.innerHTML='<div class="vtv-spinner"></div>Đang tải kênh...';
|
| 792 |
+
try{const r=await fetch('/api/vtv/streams',); if(r.ok){const d=await r.json(); CHANNELS.forEach(ch=>{const i=d[ch.id]; if(i&&i.stream_url){let u=i.stream_url; if(NEEDS_PROXY.test(u)) u='/api/proxy/m3u8/vtv?url='+encodeURIComponent(u); STREAMS[ch.id]=[u];} else STREAMS[ch.id]=[];});}}catch(e){}
|
| 793 |
CHANNELS.forEach(ch=>{const t=document.getElementById('vtvt-'+ch.id); if(t){if(STREAMS[ch.id]&&STREAMS[ch.id].length>0){t.classList.remove('off'); t.textContent=ch.name;}else{t.style.opacity='0.35'; t.textContent=ch.name+' ✕';}}});
|
| 794 |
_loading=false; _streamsLoaded=true;
|
| 795 |
}
|
|
|
|
| 808 |
async function loadEpg(chId){
|
| 809 |
const el=document.getElementById('vtv-epg-list'); if(!el) return;
|
| 810 |
el.innerHTML='<div class="vtv-epg-loading"><div class="vtv-epg-sp"></div>Đang tải lịch...</div>';
|
| 811 |
+
try{const r=await fetch('/api/vtv/epg/'+chId,); if(!r.ok) throw new Error(); const d=await r.json(); const p=d.programs||[]; if(!p.length){el.innerHTML='<div class="vtv-epg-empty">Chưa có lịch</div>';return;} let h=''; p.forEach(x=>{const n=x.now?' now':''; h+='<div class="vtv-epg-item'+n+'"><span class="t">'+(x.time||'')+(x.end_time?'-'+x.end_time:'')+'</span> <span class="n">'+(x.title||'')+'</span></div>';}); el.innerHTML=h; const ni=el.querySelector('.vtv-epg-item.now'); if(ni) ni.scrollIntoView({behavior:'smooth',inline:'center',block:'nearest'});}catch(e){el.innerHTML='<div class="vtv-epg-empty">Không tải được lịch</div>';}
|
| 812 |
}
|
| 813 |
|
| 814 |
window._vtvToggleEpg=function(){const l=document.getElementById('vtv-epg-list'),b=document.getElementById('vtv-epg-toggle'); if(!l||!b)return; if(l.style.display==='none'){l.style.display='flex';b.textContent='Ẩn';}else{l.style.display='none';b.textContent='Hiện';}};
|