From f81d4e85699dcfc2bf8262196a2f98efc8dfc25b Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 25 Feb 2026 20:09:50 +0000 Subject: [PATCH] Auto commit: 2026-02-25T20:09:50.809Z --- api/current_song.php | 19 ++++++++++++++++++- index.php | 29 +++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/api/current_song.php b/api/current_song.php index adff740..a5ba73a 100644 --- a/api/current_song.php +++ b/api/current_song.php @@ -16,6 +16,14 @@ try { $remaining = $endAt - time(); if ($remaining > 0) { + // Find next track for local requests + $stmtNext = $db->query("SELECT artist, song FROM song_requests WHERE status = 'pending' ORDER BY is_priority DESC, created_at ASC LIMIT 1"); + $nextTrack = $stmtNext->fetch(); + $nextInfo = null; + if ($nextTrack) { + $nextInfo = ['artist' => $nextTrack['artist'], 'title' => $nextTrack['song']]; + } + echo json_encode([ 'success' => true, 'source' => 'local_request', @@ -27,6 +35,7 @@ try { 'started_at' => date('c', $startedAt), 'end_at' => date('c', $endAt), 'remaining' => $remaining, + 'next_track' => $nextInfo, 'cover' => './assets/pasted-20260215-163754-def41f49.png' ]); exit; @@ -53,6 +62,14 @@ try { $startedAt = date('c', strtotime($endAt) - $duration); } + // For RadioKing source, check if there's a pending local request (it will be next) + $nextInfo = $data['next_track'] ?? null; + $stmtNext = $db->query("SELECT artist, song FROM song_requests WHERE status = 'pending' ORDER BY is_priority DESC, created_at ASC LIMIT 1"); + $localNext = $stmtNext->fetch(); + if ($localNext) { + $nextInfo = ['artist' => $localNext['artist'], 'title' => $localNext['song']]; + } + echo json_encode([ 'success' => true, 'source' => 'radioking', @@ -62,7 +79,7 @@ try { 'duration' => $duration, 'started_at' => $startedAt, 'end_at' => $endAt, - 'next_track' => $data['next_track'] ?? null + 'next_track' => $nextInfo ]); } diff --git a/index.php b/index.php index 81b62fb..2abe393 100644 --- a/index.php +++ b/index.php @@ -4444,6 +4444,8 @@ $twitter_link = "https://twitter.com/"; // Fetch Now Playing Metadata let progressInterval = null; + let nextSongNoticeSent = false; + let currentTrackId = ''; async function updateMetadata() { try { @@ -4460,6 +4462,8 @@ $twitter_link = "https://twitter.com/"; const requester = data.requester || ''; if (trackTitle.textContent !== title) { + nextSongNoticeSent = false; + currentTrackId = fullDisplay; // If it's a local request, show special label const label = document.querySelector('.track-label'); if (source === 'local_request') { @@ -4620,6 +4624,31 @@ $twitter_link = "https://twitter.com/"; function updateProgressBar() { const now = new Date().getTime(); const elapsed = now - start; + + // Check if we should send next song notice (approx 30s before end) + const remainingSec = Math.floor((end - now) / 1000); + if (remainingSec <= 30 && remainingSec > 25 && !nextSongNoticeSent && data.next_track) { + nextSongNoticeSent = true; + let nextLabel = ""; + if (typeof data.next_track === 'object') { + const nextArtist = data.next_track.artist || 'Artista'; + const nextTitle = data.next_track.title || 'Título'; + nextLabel = `${nextArtist} - ${nextTitle}`; + } else { + nextLabel = data.next_track; + } + const nextMsg = `⏭️ **Próxima canción:** ${nextLabel} 🎶`; + fetch('api/chat.php', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + username: 'Sistema', + message: nextMsg, + type: 'dj_power' + }) + }).catch(err => console.error('Error sending next track notice:', err)); + } + let percent = (elapsed / duration) * 100; if (percent > 100) percent = 100; if (percent < 0) percent = 0;