// Браузерное радио - открывает радио в скрытом браузере const { spawn, exec } = require('child_process'); const fs = require('fs'); const path = require('path'); const http = require('http'); class BrowserRadio { constructor() { this.server = null; this.browserProcess = null; this.isPlaying = false; this.volume = 70; this.currentUrl = null; this.port = 8888; } play(url) { this.stop(); // Добавляем протокол если его нет if (!url.startsWith('http://') && !url.startsWith('https://')) { url = 'http://' + url; } console.log('[RADIO] 📻 Запуск радио через браузер:', url); this.currentUrl = url; // Создаем HTML страницу с плеером const html = ` Radio Player

🎵 Радио плеер

Станция: ${url}

Громкость: ${this.volume}%

Статус: Загрузка...

`; // Создаем временный HTTP сервер this.server = http.createServer((req, res) => { if (req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(html); } else if (req.url === '/status') { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ volume: this.volume, isPlaying: this.isPlaying })); } else if (req.url.startsWith('/volume/')) { const vol = parseInt(req.url.split('/')[2]); if (!isNaN(vol)) { this.volume = Math.max(0, Math.min(100, vol)); console.log('[RADIO] 🔊 Громкость установлена через браузер:', this.volume); } res.writeHead(200); res.end('OK'); } else { res.writeHead(404); res.end('Not Found'); } }); // Запускаем сервер this.server.listen(this.port, () => { console.log(`[RADIO] HTTP сервер запущен на порту ${this.port}`); // Открываем в браузере const browserUrl = `http://localhost:${this.port}`; console.log('[RADIO] Открываем браузер:', browserUrl); // Попробуем открыть в минимизированном окне exec(`start /min ${browserUrl}`, (err) => { if (err) { console.log('[RADIO] Открываем в обычном режиме'); exec(`start ${browserUrl}`); } }); this.isPlaying = true; }); } stop() { if (this.server) { console.log('[RADIO] ⏹️ Остановка радио сервера'); this.server.close(); this.server = null; } // Закрываем браузер exec('taskkill /F /FI "WINDOWTITLE eq Radio Player*"', { stdio: 'ignore' }); this.isPlaying = false; this.currentUrl = null; } setVolume(volume) { this.volume = Math.max(0, Math.min(100, volume)); console.log('[RADIO] 🔊 Установка громкости:', this.volume); // Громкость обновится автоматически через HTTP запрос от браузера } } module.exports = BrowserRadio;