Use candidate function from plugins instead of hooks

This commit is contained in:
Šarūnas Nejus 2025-04-21 23:09:16 +01:00
parent 2fcb48d7a4
commit de0958ca65
No known key found for this signature in database
GPG key ID: DD28F6704DBE3435
4 changed files with 14 additions and 37 deletions

View file

@ -23,7 +23,7 @@ from typing import TYPE_CHECKING, Any, NamedTuple, TypeVar
from jellyfish import levenshtein_distance
from unidecode import unidecode
from beets import config, logging, plugins
from beets import config, logging
from beets.util import as_string, cached_classproperty
if TYPE_CHECKING:
@ -590,26 +590,3 @@ class AlbumMatch(NamedTuple):
class TrackMatch(NamedTuple):
distance: Distance
info: TrackInfo
# Aggregation of sources.
def album_for_id(*args, **kwargs) -> AlbumInfo | None:
"""Get AlbumInfo object for the given ID string."""
return plugins.album_for_id(*args, **kwargs)
def track_for_id(*args, **kwargs) -> TrackInfo | None:
"""Get TrackInfo object for the given ID string."""
return plugins.track_for_id(*args, **kwargs)
@plugins.notify_info_yielded("albuminfo_received")
def album_candidates(*args, **kwargs) -> Iterator[AlbumInfo]:
yield from plugins.candidates(*args, **kwargs)
@plugins.notify_info_yielded("trackinfo_received")
def item_candidates(*args, **kwargs) -> Iterator[TrackInfo]:
yield from plugins.item_candidates(*args, **kwargs)

View file

@ -356,7 +356,7 @@ def match_by_id(items: Iterable[Item]) -> AlbumInfo | None:
return None
# If all album IDs are equal, look up the album.
log.debug("Searching for discovered album ID: {0}", first)
return hooks.album_for_id(first)
return plugins.album_for_id(first)
def _recommendation(
@ -511,7 +511,7 @@ def tag_album(
if search_ids:
for search_id in search_ids:
log.debug("Searching for album ID: {0}", search_id)
if info := hooks.album_for_id(search_id):
if info := plugins.album_for_id(search_id):
_add_candidate(items, candidates, info)
# Use existing metadata or text search.
@ -554,8 +554,8 @@ def tag_album(
log.debug("Album might be VA: {0}", va_likely)
# Get the results from the data sources.
for matched_candidate in hooks.album_candidates(
items, search_artist, search_album, va_likely, extra_tags
for matched_candidate in plugins.candidates(
items, search_artist, search_album, va_likely
):
_add_candidate(items, candidates, matched_candidate)
@ -589,7 +589,7 @@ def tag_item(
if trackids:
for trackid in trackids:
log.debug("Searching for track ID: {0}", trackid)
if info := hooks.track_for_id(trackid):
if info := plugins.track_for_id(trackid):
dist = track_distance(item, info, incl_artist=True)
candidates[info.track_id] = hooks.TrackMatch(dist, info)
# If this is a good match, then don't keep searching.
@ -615,7 +615,9 @@ def tag_item(
log.debug("Item search terms: {0} - {1}", search_artist, search_title)
# Get and evaluate candidate metadata.
for track_info in hooks.item_candidates(item, search_artist, search_title):
for track_info in plugins.item_candidates(
item, search_artist, search_title
):
dist = track_distance(item, track_info, incl_artist=True)
candidates[track_info.track_id] = hooks.TrackMatch(dist, track_info)

View file

@ -16,8 +16,7 @@
from collections import defaultdict
from beets import autotag, library, ui, util
from beets.autotag import hooks
from beets import autotag, library, plugins, ui, util
from beets.plugins import BeetsPlugin, apply_item_changes
@ -80,7 +79,7 @@ class MBSyncPlugin(BeetsPlugin):
)
continue
if not (track_info := hooks.track_for_id(item.mb_trackid)):
if not (track_info := plugins.track_for_id(item.mb_trackid)):
self._log.info(
"Recording ID not found: {0.mb_trackid} for track {0}", item
)
@ -101,7 +100,7 @@ class MBSyncPlugin(BeetsPlugin):
self._log.info("Skipping album with no mb_albumid: {}", album)
continue
if not (album_info := hooks.album_for_id(album.mb_albumid)):
if not (album_info := plugins.album_for_id(album.mb_albumid)):
self._log.info(
"Release ID {0.mb_albumid} not found for album {0}", album
)

View file

@ -21,8 +21,7 @@ from collections.abc import Iterator
import musicbrainzngs
from musicbrainzngs.musicbrainz import MusicBrainzError
from beets import config
from beets.autotag import hooks
from beets import config, plugins
from beets.dbcore import types
from beets.library import Album, Item, Library
from beets.plugins import BeetsPlugin
@ -223,7 +222,7 @@ class MissingPlugin(BeetsPlugin):
item_mbids = {x.mb_trackid for x in album.items()}
# fetch missing items
# TODO: Implement caching that without breaking other stuff
if album_info := hooks.album_for_id(album.mb_albumid):
if album_info := plugins.album_for_id(album.mb_albumid):
for track_info in album_info.tracks:
if track_info.track_id not in item_mbids:
self._log.debug(