- Thumbnail disk cache: scaled PNGs persisted under ~/.cache/orc-gallery/thumbs/
keyed by MD5(path+filesize); avoids re-decode/re-scale on gallery reload
- SortOrder enum (DateNewest/Oldest, NameAsc/Desc) threaded through
DatabaseManager, ImageGallery, and MainWindow; SQL ORDER BY generated
by sortClause() helper
- Date range filter: QDateEdit pair in filter toolbar with special-value
"Any" sentinel; dateWhereFragment() omits WHERE clause when dates are
invalid (no-filter); QSignalBlocker used in handleClearDates for atomic
reset without double-refresh
- Cache keys updated to encode sort+date+text via makeSearchKey()
- plan.md updated with new features, corrected API signatures, and GUI
layout diagram
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rebrand:
- Rename project, binary, desktop file, and icons from screenshot-gallery/orcs-gallery to orc-gallery
- Update display name to "ORC Gallery" throughout (window title, .desktop, README, plan.md)
- Config dir changed from ScreenshotOCRGallery to OrcGallery
Performance:
- cancelSearch() is now non-blocking; new searches start immediately instead of waiting for the previous thread to drain
- Remove double-emit from QFutureWatcher::finished handler; results emitted once directly from background thread
- SQLite WAL mode + NORMAL sync + 20 MB page cache + memory temp store + 256 MB mmap applied on init and per-thread connections
- Typing inactivity timer reduced from 500 ms to 150 ms
- COUNT(*) OVER() window function folds total-count into the main SELECT, eliminating a separate COUNT round-trip per search
- ImageThumbnail::paintEvent draws the filename overlay; removes 3 child QObjects (QFrame + QLabel + QHBoxLayout) per thumbnail
- loadThumbnailAsync posts QImage load+scale to QThreadPool; QPixmap::fromImage called on main thread via Qt::QueuedConnection invokeMethod; QPointer guards against use-after-free on gallery clear
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>