Skip to content

feat: предзагрузка ссылок соседних треков и кеш источников - #32

Merged
0xcodepunk merged 1 commit into
mainfrom
feature/track-prefetch
Jul 5, 2026
Merged

feat: предзагрузка ссылок соседних треков и кеш источников#32
0xcodepunk merged 1 commit into
mainfrom
feature/track-prefetch

Conversation

@0xcodepunk

@0xcodepunk 0xcodepunk commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Что сделано

Станция в каждом сообщении присылает playerState.entityInfo с id соседних треков очереди (next/prev). Теперь менеджер использует это для предзагрузки: к моменту переключения трека прямая ссылка (включая lossless-запрос) уже готова.

  • Модель Track: новые поля next_id и prev_id, парсинг entityInfo в get_current_track (только соседи с type == "Track").
  • Кеш источников в MainStreamManager: track_id → (TrackSource, момент получения), TTL 10 минут (CDN-ссылки протухают), максимум 8 записей с вытеснением самой старой.
  • Фоновая предзагрузка: на каждой IDLE-итерации _schedule_prefetch запускает резолв ссылок соседей, если их ещё нет в кеше и резолв не идёт. Радио не участвует.
  • Свитч и ресинк переведены на _resolve_track_source: попадание в кеш — мгновенно, промах — прежний живой запрос (ничего не ломается, если префетч не успел или юзер прыгнул в другое место плейлиста).
  • stop() отменяет незавершённые префетч-задачи и чистит кеш.

- добавлены поля next_id и prev_id в модель Track (entityInfo станции)
- добавлен парсинг entityInfo в get_current_track с хелпером _neighbor_track_id
- добавлен кеш источников в MainStreamManager: _resolve_track_source, _get_cached_source, _store_source с TTL и вытеснением старых записей
- добавлена фоновая предзагрузка ссылок соседних треков (_schedule_prefetch, _prefetch_source), переключение вперёд и возврат назад не ждут резолва
- ресинк и свитч переведены на _resolve_track_source: перемотка тоже использует кеш
- добавлены константы TRACK_SOURCE_TTL и TRACK_SOURCE_CACHE_SIZE, отмена префетч-задач и очистка кеша в stop()
- добавлены тесты: префетч, кеш при свитче/возврате/ресинке, TTL, парсинг entityInfo
@0xcodepunk
0xcodepunk merged commit d66668c into main Jul 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant