Skip to content

fix(search): fall back to default quality profile when audiobook has none, and expose bulk-assign in Wanted view#605

Draft
kevinheneveld wants to merge 1 commit into
Listenarrs:canaryfrom
kevinheneveld:fix/quality-profile-fallback
Draft

fix(search): fall back to default quality profile when audiobook has none, and expose bulk-assign in Wanted view#605
kevinheneveld wants to merge 1 commit into
Listenarrs:canaryfrom
kevinheneveld:fix/quality-profile-fallback

Conversation

@kevinheneveld
Copy link
Copy Markdown

Summary

Drafted for visibility per the pacing note on #590 — happy to leave this in draft until you have time.

Two related symptoms users hit when an audiobook is monitored but doesn't have a quality profile assigned:

  1. Automatic search silently returns 0: AutomaticSearchService.ProcessAudiobookAsync and DownloadService.SearchAndDownloadAsync both early-return when audiobook.QualityProfile == null. An unconfigured book is monitored, shows up in Wanted, but never gets searched — the user has no feedback as to why.
  2. No way to fix it in bulk: Setting a profile requires opening every wanted book's edit modal. With a default profile configured in settings, the user expects it to apply.

Fix

Backend: Both auto-search paths now fall back to qualityProfileService.GetDefaultAsync() when the audiobook has no profile assigned. If a default is configured the audiobook gets searched as if that were its profile (in-memory only — no DB write). If there's no default either, log the reason and return 0 as before.

Frontend: A new "Assign default profile (N)" button on the Wanted view appears only when at least one wanted book has no profile and a default is configured. Clicking it bulk-assigns the default to every such book via the existing PUT /library/{id} endpoint. Per-book failures are surfaced individually but don't stop the batch.

Also: the Wanted row's quality column used to show item.quality ?? 'Unknown' for profile-less books; now shows "No profile" so the cause is visible at a glance.

Test plan

  • Backend builds clean
  • Frontend builds clean (npm run build)
  • Verified in a downstream deploy: a previously-stuck wanted book gets searched as soon as a default profile is configured (no longer requires per-book edit + save round-trip).

🤖 Generated with Claude Code

kevinheneveld pushed a commit to kevinheneveld/Listenarr that referenced this pull request May 18, 2026
…rafting

State on top of the post-rebase baseline:
  - 5 more commits on kevin/live (preview button, hydrated audiobook,
    publish-date normalize, image-500 fix, modal z-index prop)
  - PR Listenarrs#600 + Listenarrs#603 opened (defensive fixes, non-draft)
  - PR Listenarrs#604 + Listenarrs#605 opened as drafts (wave 1 of the staggered
    feature-PR queue per Kevin's pacing instruction)
  - Issue #5 filed for LibriVox metadata source (deferred)
  - 8 features on kevin/live still without an upstream PR — queued
    with a per-day schedule

Live image: listenarr:local-20260517-1651 (head a712b49).
Two-step rollback: 1634 → 1617.
@therobbiedavis
Copy link
Copy Markdown
Collaborator

Hey @kevinheneveld Would you mind joining us on https://discord.gg/CwZ2Sqp9NF

We're working on prioritizing PRs and you've opened a good number of them, so I figured you should be involved. 😜

@kevinheneveld kevinheneveld force-pushed the fix/quality-profile-fallback branch from 26906d8 to 6ca26ba Compare May 19, 2026 16:13
kevinheneveld pushed a commit to kevinheneveld/Listenarr that referenced this pull request May 19, 2026
…rafting

State on top of the post-rebase baseline:
  - 5 more commits on kevin/live (preview button, hydrated audiobook,
    publish-date normalize, image-500 fix, modal z-index prop)
  - PR Listenarrs#600 + Listenarrs#603 opened (defensive fixes, non-draft)
  - PR Listenarrs#604 + Listenarrs#605 opened as drafts (wave 1 of the staggered
    feature-PR queue per Kevin's pacing instruction)
  - Issue #5 filed for LibriVox metadata source (deferred)
  - 8 features on kevin/live still without an upstream PR — queued
    with a per-day schedule

Live image: listenarr:local-20260517-1651 (head a712b49).
Two-step rollback: 1634 → 1617.
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.

3 participants