fix(now-playing): отсекать JSON-статус в ICY StreamTitle (101.ru)

Потоки 101.ru (Comedy Club, StandUp, Женский StandUp и др.) шлют в StreamTitle
JSON {"status":1,...} вместо трека — он попадал в now_playing как название.
ICY-парсер и ingest теперь отсекают значения, начинающиеся с { или [.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nk
2026-06-03 16:11:26 +03:00
parent 3049b1ec89
commit 3215dd5a4e
2 changed files with 18 additions and 2 deletions

View File

@@ -141,9 +141,16 @@ export class IcyNowPlayingService {
resolve(null);
return;
}
const parts = match[1].split(' - ', 2);
const raw = match[1].trim();
// Некоторые потоки (101.ru и др.) шлют в StreamTitle JSON-статус,
// а не название трека — это не трек, отсекаем.
if (raw.startsWith('{') || raw.startsWith('[')) {
resolve(null);
return;
}
const parts = raw.split(' - ', 2);
if (parts.length < 2) {
resolve({ artist: match[1], song: match[1] });
resolve({ artist: raw, song: raw });
} else {
resolve({
artist: parts[0].trim(),

View File

@@ -134,6 +134,15 @@ export class NowPlayingService {
coverUrl?: string | null;
}): Promise<void> {
const { stationDbId, stationNumericId, artist, song } = params;
// Отсекаем мусор: пустое или JSON-статус в полях (некоторые потоки шлют
// в метаданных {"status":...} вместо трека).
const a = (artist ?? '').trim();
const s = (song ?? '').trim();
if (!a || !s || a.startsWith('{') || a.startsWith('[') || s.startsWith('{')) {
return;
}
const coverUrl = await this.resolveCover(artist, song, params.coverUrl);
const prev = await this.prisma.nowPlaying.findUnique({