39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import re
|
|
from beets import config
|
|
from beets.autotag.hooks import AlbumInfo, TrackInfo, Distance
|
|
from beets.plugins import BeetsPlugin
|
|
|
|
class SearchAPIPlugin(BeetsPlugin):
|
|
"""A beets plugin that lets you set preferences for different metadata sources.
|
|
"""
|
|
|
|
def __init__(self):
|
|
super(SearchAPIPlugin, self).__init__()
|
|
config.add({
|
|
'preferred_sources': [ '*' ],
|
|
})
|
|
|
|
@property
|
|
def preferred_sources(self):
|
|
"""Reads the user's preferred sources, parses
|
|
them as regular expressions and returns a list
|
|
of the resulting Patterns.
|
|
"""
|
|
preferences = config['preferred_sources'].as_str_seq()
|
|
return [re.compile('.*') if item == '*' else re.compile(item) for item in preferences]
|
|
|
|
def album_distance(self, items, album_info, mapping):
|
|
"""Returns the album distance.
|
|
"""
|
|
dist = Distance()
|
|
dist.add_priority('source', album_info.data_source, self.preferred_sources)
|
|
return dist
|
|
|
|
def track_distance(self, item, info):
|
|
"""Returns the track distance.
|
|
"""
|
|
dist = Distance()
|
|
dist.add_priority('source', info.data_source, self.preferred_sources)
|
|
return dist
|
|
|