Server:
- Scan jobs record the number of files listed (total), so a running scan
can report a real percentage.
- New 扫描设置 business settings, shown as the page's 扫描与元数据 card:
自动扫描新文件 (hourly rescan of every library, default on),
刮削封面与简介 (after a completed scan, scrape items that have no online
metadata and were never attempted, with the first configured provider;
default off), 读取内嵌字幕与歌词 (default on; off hides embedded subtitle
streams and lyrics tags), 扫描隐藏文件夹 (default off: names starting
with '.' are skipped, e.g. ._film.mp4 resource forks).
- MediaAutomation runs the scheduled scans and post-scan scraping as the
first active administrator; MediaScanner gains onFinished/isScanning.
Client:
- Each library card shows its latest scan: 上次扫描 今天 09:12 beside
重新扫描; 正在扫描 · 已处理 62% with a progress bar and 取消; or the
failure (路径不可访问…) with 重试 and 查看详情 (the tasks page).
Starting or cancelling a scan now stays on the page; scan-jobs is polled.
- 扫描与元数据 card beside the list saves each switch with the settings
revision, and hides itself on servers without these settings.
Unify media secondary page chrome, loading states, playback controls, favorites filtering, and source/library screens with the legacy reader experience.
Align the React media detail, player, history, queue, shelf, and resource flows with the legacy UX. Refresh the migration validation record and add focused route, resource, and shelf parity coverage.
Support local and OpenList libraries, metadata, independent media navigation, themes, and audio/video playback. Preserve approved v2 prototypes and current documentation; archive superseded review artifacts and keep generated validation output outside version control.
Add book information dialogs and compact toolbar actions with source provenance. Reuse Streamable HTTP for alternative discovery and preserve cached text when a forced refresh fails.