// Браузерное радио - открывает радио в скрытом браузере
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;