metube/app
Helmut 681aad24cd feat(ui): show actually-downloaded quality next to user's choice
When the user picks 'Best' (or any non-exact preset), the completed-list
quality cell shows only what they requested — but yt-dlp may have
resolved it to anything from 360p to 4K60. Same when they pick a
specific resolution that wasn't available and yt-dlp had to downgrade.

This commit:
- Backend (app/ytdl.py): captures yt-dlp's resolved width / height / fps
  / vcodec / abr in the MoveFiles postprocessor hook and persists them
  on DownloadInfo. __setstate__ backfills None for pre-patch persisted
  entries so old completed downloads keep loading.
- Interface (ui/src/app/interfaces/download.ts): four new optional
  fields on Download.
- UI (ui/src/app/app.ts:formatQualityLabel): when actual differs from
  requested, render 'Best · 1080p60' / '1080p · 720p' style. High frame
  rates (50+) get appended ('1080p60'); standard rates stay implicit.
  Audio shows 'Best · 320 kbps'. Identical actual === requested stays
  collapsed to avoid noise.

Backward compatible: old persisted downloads render unchanged since
their new fields stay None and formatActualQuality() returns null.
2026-06-13 22:04:00 +02:00
..
tests support live streams (closes #302, closes #752, closes #978) 2026-06-13 17:39:14 +03:00
dl_formats.py code review fixes 2026-03-15 20:53:13 +02:00
main.py add option for following nightly yt-dlp releases (closes #999) 2026-06-06 09:42:26 +03:00
state_store.py add subscriptions; change persistence file format to JSON (closes #901, #76, #113, #170, #242, #444, #503, #555, #566) 2026-04-01 14:33:24 +03:00
subscriptions.py allow filtering out members-only videos in subscriptions (closes #971) 2026-04-28 22:02:05 +03:00
ytdl.py feat(ui): show actually-downloaded quality next to user's choice 2026-06-13 22:04:00 +02:00