Skip to content

feat(search): monitor and navigate authors, series and narrators from result cards - #888

Open
krejko wants to merge 2 commits into
Listenarrs:canaryfrom
nexalapp:up/card-entities
Open

feat(search): monitor and navigate authors, series and narrators from result cards#888
krejko wants to merge 2 commits into
Listenarrs:canaryfrom
nexalapp:up/card-entities

Conversation

@krejko

@krejko krejko commented Aug 23, 2026

Copy link
Copy Markdown

Monitoring could only be started from a collection page, which is built from the library — so following a series or author required already owning one of their books. That's backwards for the case the feature exists for.

Every author, series and narrator on a result card is now a link to its collection page, with a monitor toggle beside author and series. The book title links to its library entry once added.

Monitoring status is a local database read (GetByNameRegionLanguageAsync), not a provider call, and names are deduped across the page, so a ten-book series resolves once.

Three details worth review

Series position must not leak into the name. Entries arrive as Harry Potter (Full-Cast Editions) #1. Navigating there is merely wrong; monitoring it would register a MonitoredSeries named after a single book, syncing forever against nothing. Stripped before either use.

Narrator shapes differ by endpoint{ name } objects from search, bare strings elsewhere. Handling only strings silently produced an empty list and dropped the line entirely.

The narrator line wraps instead of clamping. A full-cast title lists a dozen narrators; -webkit-line-clamp: 1 hid all but the first.

Endpoint typing

GET /search/audible/series was declared Task<object?> with no frontend caller. It keeps its bare-array shape — verified against a live instance — and only gains a declared element type, so nothing reading it today has to change. Nameless entries are dropped; an unexpected provider shape logs and returns empty rather than leaking the raw payload.

… result cards

Monitoring could only be started from a collection page, and collection
pages are built from the library, so following a series or author
required already owning one of their books. That is backwards for the
case the feature exists to serve.

Every author, series and narrator named on a result card is now a link to
its collection page, with a monitor toggle beside the author and series
that shows Monitoring when already monitored. The book title links to its
library entry once added. Monitoring status is a local database read, and
names are deduplicated across the page, so a ten-book series resolves
once.

Three details worth review:

Series entries arrive carrying the book's position - "Harry Potter #1" -
and that must not reach a collection route or a monitoring request, since
monitoring "Harry Potter #1" would register a series that does not exist.
It is stripped before use.

Narrator values arrive as { name } objects from the search endpoint but
as bare strings elsewhere, so both shapes are accepted. Handling only
strings silently produced an empty list and dropped the line entirely.

The narrator line no longer clamps to one line: a full-cast title lists a
dozen narrators, and wrapping beats hiding all but the first.

GET /search/audible/series was declared object? and had no frontend
caller. It keeps its bare-array shape - verified against a live instance -
and only gains a declared element type, so nothing reading it must
change. Entries without a name are dropped, and an unexpected provider
shape logs and returns empty rather than leaking the raw payload.
@krejko
krejko requested a review from a team August 23, 2026 03:31
ActiveProductionSourceFiles_RemainFocused caps production files at 500
lines and SearchController.cs reached 506 with the typed series endpoint
inlined. Extracted to a partial alongside the existing
SearchController.DownloadReferences.cs, which brings the controller back
to 457 lines.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant