Library now generates video thumbnails by extracting the first
frame with ffmpeg. Cached alongside image thumbnails. Falls back
gracefully if ffmpeg is not available.
- Videos show a play triangle + file extension as placeholder
- Multi-select right-click: bulk delete from library
- Image thumbnails confirmed working
- Image thumbnails generated via PIL and cached
- Video files show tooltip with filename (QPixmap fallback attempted)
- Right-click: Open in Default App, Open Containing Folder,
Copy File Path, Delete from Library
- Skip video files in library thumbnail generation (PIL can't open them)
- _on_bookmark_done only sets bookmarked for bookmark ops, saved for save ops
- Smaller green dot with yellow star to its right
- Default bookmark star color: yellow (#ffcc00)
Major restructure of the favorites/library system:
- Rename "Favorites" to "Bookmarks" throughout (DB API, GUI, signals)
- Add Library tab for browsing saved files on disk with sorting
- Decouple bookmark from save — independent operations now
- Two indicators on thumbnails: star (bookmarked), green dot (saved)
- Both indicators QSS-controllable (qproperty-bookmarkedColor/savedColor)
- Unbookmarking no longer deletes saved files
- Saving no longer auto-bookmarks
- Library tab: folder sidebar, sort by date/name/size, async thumbnails
- DB table kept as "favorites" internally for migration safety