import React, { Component } from "react"; import { Container, Header, Icon, Grid, Segment, List, Message, Dropdown, Loader } from "semantic-ui-react"; import "fomantic-ui-css/semantic.min.css"; import "./App.css"; import StreamInfo from "./StreamInfo"; import Chat from "./Chat"; class App extends Component { constructor(props) { super(props); this.state = { ready: false, response: {}, history: [], infoUpdate: {}, currentSong: "", streamsAvailable: [], multipleSources: false, selectedStream: 0 }; this.streamCount = 0; } checkStream(result) { const prevCount = this.streamCount; if (result.source !== undefined) { if (Array.isArray(result)) { this.streamCount = result.length; } else { this.streamCount = 1; } } else { this.streamCount = 0; } return prevCount === this.streamCount; } debug(object) { if (process.env.NODE_ENV === "development") { console.log(object); } } refreshPlayer() { let audio = document.getElementById("player"); if (audio !== null) { audio.pause(); audio.load(); audio.play(); } } addToHistory(song) { this.setState(prevState => ({ history: [...prevState.history, song] })); let historyContainer = document.getElementById("historyContainer"); if (historyContainer != null) { historyContainer.scrollTop = historyContainer.scrollHeight; } } compareSongs() { const { currentSong, multipleSources, selectedStream, response } = this.state; const currentStream = multipleSources ? response.source[selectedStream] : response.source; if (`${currentStream.artist} - ${currentStream.title}` !== currentSong) { this.addToHistory(currentSong); this.setState({ currentSong: `${currentStream.artist} - ${currentStream.title}` }); } } updateInfo() { const { currentSong, multipleSources, selectedStream, response } = this.state; const currentStream = multipleSources ? response.source[selectedStream] : response.source; if (currentSong === "") { this.setState({ currentSong: `${currentStream.artist} - ${currentStream.title}` }); } fetch("https://bienvenidoainternet.org:8443/status-json.xsl") .then(response => response.json()) .then(result => { this.debug(result); this.checkStream(result); const source = result.icestats.source; if (source !== undefined) { let multipleStreams = Array.isArray(source); if (!multipleStreams && Array.isArray(this.state.response.source)) { this.setState( { response: result.icestats, streamsAvailable: [], multipleSources: multipleStreams, selectedStream: 0 }, () => this.compareSongs() ); this.refreshPlayer(); } else { let streams = []; if (Array.isArray(source)) { source.map((stream, index) => streams.push({ key: index, value: index, text: `[${stream.listeners}] ${stream.server_name} - ${stream.server_description}` }) ); } this.setState( { response: result.icestats, streamsAvailable: streams, multipleSources: multipleStreams }, () => this.compareSongs() ); } } else { // No hay streams disponibles this.setState( { response: result.icestats, multipleSources: true, streamsAvailable: {}, selectedStream: 0 }, () => this.compareSongs() ); } }); } componentDidMount() { fetch("https://bienvenidoainternet.org:8443/status-json.xsl") .then(response => response.json()) .then(result => this.setState( { response: result.icestats, infoUpdate: setInterval(() => this.updateInfo(), 10000) }, () => { const { source } = this.state.response; if (source !== undefined && Array.isArray(source)) { let streams = []; source.map((stream, index) => streams.push({ key: index, value: index, text: `[${stream.listeners}] ${stream.server_name} - ${stream.server_description}` }) ); this.debug(streams); this.setState({ multipleSources: true, streamsAvailable: streams, ready: true }); } else if (source !== undefined) { this.setState({ multipleSources: false, selectedStream: 0, ready: true }); } } ) ); } render() { const { ready, response, history, streamsAvailable, multipleSources, selectedStream } = this.state; const isOnline = response.source !== undefined; if (!ready) { return ( Obteniendo información del servidor de IceCast ... ); } const currentStream = multipleSources ? response.source[selectedStream] : response.source; const currentStreamURL = currentStream.listenurl.replace( "http://bienvenidoainternet.org:8000", "https://bienvenidoainternet.org:8443" ); return (
BaiRadio {ready ? response.server_id : "Sin información"}
{isOnline ? ( <> {multipleSources && ( <> this.setState({ selectedStream: d.value }, () => { let audio = document.getElementById("player"); if (audio !== null) { audio.pause(); audio.load(); audio.play(); } }) } /> )}
Información de la transmisión
) : ( Oops Actualmente no hay nadie transmitiendo en Bai Radio )}
Historial de canciones
{history.map((song, i) => ( {song} ))}
Bienvenido a Internet 2010 - 2020
); } } export default App;