feat: lrclib-search fetcher now do multiple request to cover more cases

refactor: abstract selection logic & test dafür
This commit is contained in:
2026-04-02 04:00:24 +02:00
parent 5a44f2ba34
commit 9aaf4d8aed
8 changed files with 280 additions and 178 deletions
+11 -8
View File
@@ -15,6 +15,7 @@ from loguru import logger
from .base import BaseFetcher
from .selection import SearchCandidate, select_best
from ..models import TrackMeta, LyricResult, CacheStatus
from ..cache import CacheEngine
from ..lrc import LRCData
@@ -64,15 +65,17 @@ class CacheSearchFetcher(BaseFetcher):
return None
# Pick best: prefer synced, then first available
best = None
for m in matches:
if m.get("status") == CacheStatus.SUCCESS_SYNCED.value:
best = m
break
if best is None:
best = m
candidates = [
SearchCandidate(
item=m,
is_synced=m.get("status") == CacheStatus.SUCCESS_SYNCED.value,
)
for m in matches
if m.get("lyrics")
]
best = select_best(candidates, track.length)
if not best or not best.get("lyrics"):
if not best:
return None
status = CacheStatus(best["status"])