Fix matching: add missing subtitle field, proper error logging, match-all endpoint

- MatchResult was missing subtitle field, causing AttributeError in
  _apply_match that silently killed every background match task
- Wrap _apply_match in try/except with exc_info logging so failures
  are visible in docker compose logs backend
- New POST /api/libraries/:id/match-all endpoint to trigger matching
  for all unlocked items (useful for items scanned before the fix)
- Admin UI: Match button per library next to the Scan button

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Audiolib
2026-05-26 15:15:11 +02:00
parent 6bb07ff873
commit 3871da4bcc
5 changed files with 58 additions and 6 deletions

View File

@@ -233,12 +233,15 @@ async def match_audiobook(item_id: str):
logger.warning(f"{source_name} Fehler: {e}")
if best and best_score >= UNCERTAIN_THRESHOLD:
await _apply_match(db, item, best, best_score)
logger.info(f"Match angewendet: '{item.title}'{best.source} ({best_score:.2f})")
try:
await _apply_match(db, item, best, best_score)
await db.commit()
logger.info(f"Match angewendet: '{item.title}'{best.source} ({best_score:.2f})")
except Exception as e:
logger.error(f"_apply_match fehlgeschlagen für '{title}': {e}", exc_info=True)
else:
logger.info(f"Kein Match für '{title}' (beste Konfidenz: {best_score:.2f})")
await db.commit()
await db.commit()
async def search_for_item(title: str, author: str | None = None) -> list[dict]: