feat: library scan — probe seam + scan_library (have + monitored + followed)
Adds the AudioProbe seam (probe.py, _probe.py MutagenProbe with a lazy mutagen import, FakeAudioProbe) and scan_library, which walks /music, resolves each album against MusicBrainz (falling back to embedded tags when the folder name doesn't resolve), and idempotently records matched albums as have (LibraryItem), monitored (MonitoredRelease, fulfilled), and followed (WatchedArtist, autoMonitorFuture=false). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from lyra_worker._mbbrowser import MusicBrainzBrowser
|
||||
from lyra_worker._musicbrainz import MusicBrainzResolver
|
||||
from lyra_worker._mutagen import MutagenTagger
|
||||
from lyra_worker._probe import MutagenProbe
|
||||
from lyra_worker.adapters._slskd import SlskdClient
|
||||
from lyra_worker.adapters._streamrip import StreamripClient
|
||||
from lyra_worker.adapters._ytdlp import YtDlpClient
|
||||
@@ -9,6 +10,7 @@ from lyra_worker.adapters.qobuz import QobuzAdapter
|
||||
from lyra_worker.adapters.soulseek import SoulseekAdapter
|
||||
from lyra_worker.adapters.youtube import YouTubeAdapter
|
||||
from lyra_worker.browser import MbBrowser
|
||||
from lyra_worker.probe import AudioProbe
|
||||
from lyra_worker.resolver import MbResolver
|
||||
from lyra_worker.tagger import Tagger
|
||||
|
||||
@@ -40,3 +42,8 @@ def build_tagger() -> Tagger:
|
||||
def build_browser() -> MbBrowser:
|
||||
"""The MusicBrainz browser used by the background monitor."""
|
||||
return MusicBrainzBrowser()
|
||||
|
||||
|
||||
def build_probe() -> AudioProbe:
|
||||
"""The audio probe used by the library scan."""
|
||||
return MutagenProbe()
|
||||
|
||||
Reference in New Issue
Block a user