feat: autotag scoring overhaul, dump-based explore index, and lyrics search
Consolidates in-progress work across autotag, explore, and library: - autotag: beets/Picard-informed scoring engine — ID-first matching, VA handling, recommendation tiers, and a merged distance/rank cascade, with an eval harness for regression tracking. - explore: offline MusicBrainz dump import/incremental refresh replaces the legacy tier crawl; index-first local search with fuzzy matching and a dedicated ranker; disk-free guards for dump downloads. - library: artist-credit extraction and matching. - lyrics: owned-library lyric search (FTS) with LRCLIB backfill. Also: rewrite README to be user-focused, and migrate upstream to git.ljones.me/yonlu/yellowjacket. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,9 @@ type RemovalHooks struct {
|
||||
StopPlayback func()
|
||||
// CompactQueue reloads queue state after cascade deletes.
|
||||
CompactQueue func()
|
||||
// PostRemove runs after the removal commits, for cross-cutting
|
||||
// invalidation (e.g. clearing library-sync "ready" markers).
|
||||
PostRemove func()
|
||||
}
|
||||
|
||||
// SetRemovalHooks provides optional hooks for cross-cutting
|
||||
@@ -461,6 +464,12 @@ func (l *Library) RemoveLibrary(id int64) (*RemovalSummary, error) {
|
||||
l.removalHooks.CompactQueue()
|
||||
}
|
||||
|
||||
// 22. Post-commit: invalidate library-sync markers so the gated
|
||||
// index/lyric re-sync runs on the next launch.
|
||||
if l.removalHooks.PostRemove != nil {
|
||||
l.removalHooks.PostRemove()
|
||||
}
|
||||
|
||||
summary := &RemovalSummary{
|
||||
TracksDeleted: tracksDeleted,
|
||||
ArtistsRemoved: artistsRemoved,
|
||||
|
||||
Reference in New Issue
Block a user