/* RECON PeerTube Channels page JS */ (function() { 'use strict'; async function loadChannelStats() { try { var resp = await fetch('/api/peertube/channels/stats'); var data = await resp.json(); if (resp.ok) { document.getElementById('pt-total-ch').textContent = data.total_channels; document.getElementById('pt-total-vid').textContent = data.total_videos; var dlEl = document.getElementById('pt-dl-status'); dlEl.textContent = data.downloader_active ? 'Active' : 'Stopped'; dlEl.style.color = data.downloader_active ? '#00ff41' : '#ff4444'; } } catch(e) { console.error('Stats error:', e); } } async function loadChannels() { try { var resp = await fetch('/api/peertube/channels'); var data = await resp.json(); if (!resp.ok) throw new Error(data.error || 'Failed'); var tbody = document.getElementById('pt-channel-tbody'); if (!data.length) { tbody.innerHTML = 'No channels configured'; return; } var cats = []; var catSet = {}; data.forEach(function(c) { if (c.category && !catSet[c.category]) { catSet[c.category] = true; cats.push(c.category); } }); document.getElementById('pt-cat-list').innerHTML = cats.map(function(c) { return '