webapp: drop rig:playlist pipeline, source track count from mpc stats

The four overlays that read /data/playlist.js (loading, goodbye,
music-box, music/nc) only ever consumed `tracks.length` for cosmetic
"LIBRARY :: N TRACKS" / "indexed N tracks" flavor text — all live
playback signal flows through bridges/mpd-state.py over OBS WS. The
142 KB JSON, ffprobe walk, and ETag-cached route were all producing
one integer that MPD itself already knows.

RigData::playlistCount() now shells `mpc stats` and parses "Songs: N",
returning 0 on any failure (treated by callers as empty library).
Removes RigPlaylistCommand, DataController::playlist(), the
/data/playlist.js route, the per-overlay <script src> + window.__PLAYLIST
shims, and the stale storage/data/playlist.json artifact.

AudioController still consumes config('rig.music_dirs') for the HTTP
audio stream — that's orthogonal and stays.
This commit is contained in:
Jakub Zych
2026-05-22 21:04:24 +02:00
parent dd3493921b
commit fd1c78b333
12 changed files with 39 additions and 213 deletions

View File

@@ -26,7 +26,6 @@
@push('data-scripts')
<script>window.__TRACK_COUNT = @json($trackCount);</script>
<script src="{{ asset('data/playlist.js') }}"></script>
@endpush
@section('content')
@@ -140,8 +139,7 @@
return parts.join(' ');
}
const playlistData = window.__PLAYLIST || { tracks: [] };
const allTracks = playlistData.tracks || [];
const trackCount = window.__TRACK_COUNT || 0;
let bootStarted = false;
let bootFinished = false;
let lastPlaybackModes = null;
@@ -206,12 +204,12 @@
bootStarted = true;
lastPlaybackModes = normalizePlayback(s.playback);
await typeCommand(formatMusicCommand(s.playback));
if (allTracks.length === 0) {
if (trackCount === 0) {
append('> ', '[audio] no tracks queued', 'term-dim');
bootFinished = true;
return;
}
append('> ', `[audio] queue retained: ${allTracks.length} tracks`, 'term-out');
append('> ', `[audio] queue retained: ${trackCount} tracks`, 'term-out');
await sleep(180);
append('> ', '[audio] subscribing to mpd:state events', 'term-out');
await sleep(180);

View File

@@ -30,7 +30,6 @@
window.__TEL = @json($telemetry);
window.__TRACK_COUNT = @json($trackCount);
</script>
<script src="{{ asset('data/playlist.js') }}"></script>
@endpush
@section('content')
@@ -142,8 +141,7 @@
return parts.join(' ');
}
const playlistData = window.__PLAYLIST || { tracks: [] };
const allTracks = playlistData.tracks || [];
const trackCount = window.__TRACK_COUNT || 0;
let bootStarted = false;
let bootFinished = false;
let lastPlaybackModes = null;
@@ -214,13 +212,13 @@
lastPlaybackModes = normalizePlayback(s.playback);
await typeCommand(formatMusicCommand(s.playback));
if (allTracks.length === 0) {
append('> ', '[audio] no tracks queued — run `php artisan rig:playlist`', 'term-dim');
if (trackCount === 0) {
append('> ', '[audio] mpd library empty — check music_directory + run `mpc update`', 'term-dim');
bootFinished = true;
return;
}
append('> ', `[audio] indexed ${allTracks.length} tracks`, 'term-out');
append('> ', `[audio] indexed ${trackCount} tracks`, 'term-out');
await sleep(180);
append('> ', `[audio] uplink to daemon @ ophi-118://${rigName.toLowerCase()}.audio.bus`, 'term-out');
await sleep(180);

View File

@@ -27,7 +27,6 @@
@push('data-scripts')
<script>window.__TRACK_COUNT = @json($trackCount);</script>
<script src="{{ asset('data/playlist.js') }}"></script>
@endpush
@section('content')
@@ -72,8 +71,7 @@
'use strict';
const pad = HUD.pad;
const playlistData = window.__PLAYLIST || { tracks: [] };
const trackCount = (playlistData.tracks || []).length || (window.__TRACK_COUNT || 0);
const trackCount = window.__TRACK_COUNT || 0;
document.getElementById('rig').textContent =
trackCount > 0 ? `LIBRARY :: ${trackCount} TRACKS` : '— EMPTY LIBRARY —';

View File

@@ -165,7 +165,6 @@
@push('data-scripts')
<script>window.__TRACK_COUNT = @json($trackCount);</script>
<script src="{{ asset('data/playlist.js') }}"></script>
@endpush
@section('content')
@@ -251,8 +250,7 @@
const fmtClock = s => (!isFinite(s) || s < 0)
? '--:--' : `${pad(Math.floor(s / 60))}:${pad(Math.floor(s % 60))}`;
const playlistData = window.__PLAYLIST || { tracks: [] };
const trackCount = (playlistData.tracks || []).length || (window.__TRACK_COUNT || 0);
const trackCount = window.__TRACK_COUNT || 0;
const term = document.getElementById('termOutput');
const pinnedBlock = document.getElementById('pinnedBlock');