Skip to content

feat(search): search by narrator - #886

Open
krejko wants to merge 1 commit into
Listenarrs:canaryfrom
nexalapp:up/narrator-search
Open

feat(search): search by narrator#886
krejko wants to merge 1 commit into
Listenarrs:canaryfrom
nexalapp:up/narrator-search

Conversation

@krejko

@krejko krejko commented Aug 23, 2026

Copy link
Copy Markdown

Adds a Narrator field to advanced search, routed to Audible's own narrator parameter.

The provider layer already accepted a narrator argument and threaded it to parameters["narrator"] — every call site passed null. The missing pieces were a field on SearchRequest, a dispatch branch, and a UI input.

Deliberately not done by adding NARRATOR: to ComposeAdvancedQuery. That composes a string handed to the keyword search, where the prefix becomes a literal token and matches nothing. TryExecuteNarratorSearchAsync mirrors the existing series branch instead, calling the narrator endpoint directly and falling back to unified search when it returns nothing.

A request carrying both author and narrator stays on the author path — author is more selective, and narrowing to the narrator endpoint would discard it. Both behaviours have tests.

Also fixes resetAdvancedSearch, which rebuilds the params object field by field and would otherwise leave a stale narrator behind.

Verified against a live instance:

  • Stephen Fry → Sherlock Holmes, Mythos, Odyssey, Harry Potter — his catalogue, not titles mentioning his name
  • Jim Dale → his Harry Potter recordings

Adds a Narrator field to advanced search, routed to Audible's own
narrator parameter rather than through the keyword composer.

The provider layer already accepted a narrator argument and threaded it
to parameters["narrator"]; every call site passed null. The missing
pieces were a field on SearchRequest, a dispatch branch, and a UI input.

Deliberately not done by adding NARRATOR: to ComposeAdvancedQuery. That
composes a string handed to the keyword search, where the prefix becomes
a literal token and matches nothing. TryExecuteNarratorSearchAsync
mirrors the existing series branch instead, calling the narrator endpoint
directly and falling back to unified search when it returns nothing.

A request carrying both author and narrator stays on the author path:
author is the more selective field and narrowing to the narrator endpoint
would discard it.

Also fixes resetAdvancedSearch, which rebuilt the params object field by
field and would otherwise have left a stale narrator behind.

Verified against a live instance: narrator "Stephen Fry" returns Sherlock
Holmes, Mythos, Odyssey and Harry Potter - his catalogue rather than
titles mentioning his name - and "Jim Dale" returns his Harry Potter
recordings.
@krejko
krejko requested a review from a team August 23, 2026 03:26
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