b738a19304
Database: - Enable WAL + synchronous=NORMAL + bigger cache pragmas - Add (profile, filename) index covering the hot queries - _refresh_playlist_checks: one get_clip_counts_grouped() scan for the whole profile instead of one query per file (was O(N) full scans per keystroke/ tab switch/file load) Timeline (60fps playback): - set_play_position only repaints when the playhead moves a whole pixel or the view scrolls (≈30x fewer full repaints in non-zoomed playback) - Cache all per-paint QColor/QPen objects and the other-folder color table in __init__ instead of allocating them every frame; drop the per-paint visible-markers list comprehension File load / startup: - PlaylistWidget stats files for the missing-set only when paths change, not on every filter keystroke - Cache the vid-folder lookup (DB + os.listdir) per (file, folder) so spinner ticks don't repeat it; m-counter still recomputed so it stays correct - Swap the waveform worker without blocking the UI thread (no wait(1000)) - Defer the changelog modal so the window is interactive first Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>