feat(wave): implement Phase 1 Smart Wave recommendations and buffer rotation

This commit is contained in:
Antigravity committed 2026-10-12 14:43:29 +03:00
1 parent aa6c605d14
commit 9fbe372fab
10 files changed
+879

No files matched your search

+53
View File
@@ -70,6 +70,59 @@
</div>
</section>
<!-- Smart Wave Card -->
<section class="card wave-card">
<div class="wave-header">
<div class="wave-header-title">
<h2>🌊 Моя Волна <span class="badge badge-wave">Smart Wave V1</span></h2>
<p class="wave-subtitle">
Персональный поток рекомендаций на основе ваших звёздочек и скробблов. Автоматическая ротация буфера в Navidrome.
</p>
</div>
<div class="wave-controls">
<button id="waveGenerateBtn" class="btn btn-primary">⚡ Обновить Волну</button>
<button id="waveRotateBtn" class="btn btn-outline" title="Перенести лайкнутые треки в постоянную библиотеку и очистить старые">🔄 Ротация</button>
</div>
</div>
<div class="wave-stats-row">
<div class="wave-stat">
<span class="wave-stat-label">Буфер ротации:</span>
<strong id="waveCountLabel">0 / 25 треков</strong>
</div>
<div class="wave-stat">
<span class="wave-stat-label">Объём на диске:</span>
<strong id="waveSizeLabel">0 МБ</strong>
</div>
<div class="wave-stat">
<span class="wave-stat-label">Срок хранения:</span>
<strong>7 дней</strong>
</div>
<div class="wave-stat">
<span class="wave-stat-label">Умный плейлист:</span>
<strong><a href="https://music.qpid.pro" target="_blank">Моя Волна.nsp ↗</a></strong>
</div>
</div>
<div id="waveAnchorsContainer" class="wave-anchors" style="margin-top: 0.8rem; display: none;">
<span style="font-size: 0.8rem; color: var(--text-secondary);">Якорные исполнители вкуса:</span>
<div id="waveAnchorsList" class="wave-anchors-tags"></div>
</div>
<!-- Wave Tracks List -->
<div class="wave-tracks-container" style="margin-top: 1rem;">
<div class="wave-tracks-header">
<h3>🎵 Треки сейчас в потоке Волны</h3>
<span id="waveLoadingText" style="display: none; color: var(--accent-color); font-size: 0.82rem;">
<span class="spinner-sm"></span> Идёт поиск и загрузка рекомендаций...
</span>
</div>
<div id="waveTracksList" class="wave-tracks-list">
<p class="empty-state">Волна пуста. Нажмите «Обновить Волну» для генерации первого потока.</p>
</div>
</div>
</section>
<!-- Active Tasks -->
<section class="card tasks-card">
<h2>⚡ Очередь задач</h2>