feat: comic metadata picker, lazy-load providers, and UI improvements (#2679)

* feat: add comic metadata support to metadata picker and fix Comicvine parser

* feat: lazy-load Comicvine issue details on selection

* feat: lazy-load detail metadata for Amazon, GoodReads, and Audible parsers

* fix: prevent spurious comic_metadata row creation for non-comic books

* fix: extract rich previews from Audible search and reorder picker sections

* feat: redesign metadata editor layout with collapsible sections and boolean selects

* fix: implement per-field comic metadata locks replacing grouped locks

* feat: add comic metadata filters and fix visibleFilters backend support

* fix: use human-readable role labels in comic creator filter

* fix: auto-populate comic metadata from ComicVine during metadata fetch

* refactor: clean up ComicvineBookParser remove duplication and comments

* fix: use ComicMetadata webLink for ComicVine favicon URL

* fix: cache library options to prevent Set All dropdowns from resetting

* fix: stream book content from disk instead of loading entire file into memory

* fix: increase max visible filters from 15 to 20

* feat: replace filter multiselect with drag-and-drop reorderable list

* fix: use audiobook-specific cover paths and cache busting for audiobook thumbnail updates

* chore: enforce mandatory screenshots and stricter testing requirements in PR template

* fix: update BookServiceTest to match Resource return type after streaming change

---------

Co-authored-by: acx10 <acx10@users.noreply.github.com>
This commit is contained in:
ACX
2026-02-09 16:43:53 -07:00
committed by GitHub
parent bc7ba8b933
commit ffd4615b87
79 changed files with 2548 additions and 1051 deletions

View File

@@ -18,26 +18,33 @@
## 🧪 Testing
<!-- What did you test? What edge cases did you cover? What could still break? -->
<!-- MANDATORY. PRs without this filled out will be closed.
- What exact steps did you follow to verify the fix or feature works?
- How did you manually regression test existing functionality?
- What edge cases did you cover?
-->
## 📸 Screenshots _(if applicable)_
## 📸 Screenshots / Video (MANDATORY)
<!-- Attach screenshots or videos for UI changes -->
> Due to an increase in untested, AI-generated PRs, we have made this section mandatory for all submissions. Please include screenshots or a screen recording that demonstrates your change working end-to-end (e.g., the bug fix in action, the new feature working, API responses, or test output for backend changes). **PRs that do not include this will be closed without review.** Thank you for helping us keep the project stable.
<!-- Attach screenshots or screen recordings here -->
---
## ✅ Pre-Submission Checklist
> **All boxes must be checked before requesting review.** Incomplete PRs will be closed without review, no exceptions.
> **All boxes must be checked before requesting review.** Incomplete PRs will be closed without review. No exceptions.
- [ ] Code follows project style guidelines and conventions
- [ ] Branch is up to date with `develop` (merge conflicts resolved)
- [ ] Automated tests added or updated to cover changes (backend **and** frontend)
- [ ] All tests pass locally (`./gradlew test` for backend, `ng test` for frontend)
- [ ] Changes manually verified in local dev environment (including related features)
- [ ] Screenshots or video proving the change works are attached above **(MANDATORY)**
- [ ] Flyway migration versioning is correct _(if schema was modified)_
- [ ] Documentation PR submitted to [booklore-docs](https://github.com/booklore-app/booklore-docs) _(if user-facing changes)_
- [ ] PR is reasonably scoped (PRs over 500+ changed lines will be closed, split into smaller PRs)
- [ ] PR is reasonably scoped (PRs over 1000+ changed lines will be closed, split into smaller PRs)
### 🤖 AI-Assisted Contributions