beets/beetsplug
Tai Lee e6ac8e1646 Use a Distance object instead of floats for distance calculations.
The new Distance object knows how to perform various types of distance
calculations (expression, equality, number, priority, string).

It will keep track of each individual penalty that has been applied so
that we can utilise that information in the UI and when making decisions
about the recommendation level.

We now display the top 3 penalties (sorted by weight) on the release
list (and "..." if there are more than 3), and we display all penalties
on the album info line and track change line.

The implementation of the `max_rec` setting has been simplified by
removing duplicate validation and instead looking at the penalties that
have been applied to a distance. As a result, we can now configure a
maximum recommendation for any penalty that might be applied.

We have a few new checks when calculating album distance:

`match: preferred: countries` and `match: preferred: media` can each be
set to a list of countries and media in order of your preference. These
are empty by default. A value that matches the first item will have no
penalty, and a value that doesn't match any item will have an unweighted
penalty of 1.0.

If `match: preferred: original_year` is set to "yes", beets will apply
an unweighted penalty of 1.0 for each year of difference between the
release year and the original year.

We now configure individual weights for `mediums` (disctotal), `label`,
`catalognum`, `country` and `albumdisambig` instead of a single generic
`minor` weight. This gives more control, but more importantly separates
and names the applied penalties so that the UI can convey exactly which
fields have contributed to the overall distance penalty.

Likewise, `missing tracks` and `unmatched tracks` are penalised and
displayed in the UI separately, instead of a combined `partial` penalty.

Display non-MusicBrainz source in the disambiguation string, and
"source" in the list of penalties if a release is penalised for being
a non-MusicBrainz.
2013-06-02 18:25:10 +10:00
..
bpd changelog note and indentation fix for #86 2013-02-02 12:27:42 -08:00
lastgenre changelog for #254 2013-04-21 20:41:01 -07:00
web changelog for #246 2013-04-10 10:18:58 -07:00
__init__.py happy new year 2013-01-11 10:43:41 -08:00
bench.py happy new year 2013-01-11 10:43:41 -08:00
chroma.py Use a Distance object instead of floats for distance calculations. 2013-06-02 18:25:10 +10:00
convert.py docs/changelog for convert paths config (#285) 2013-05-22 15:00:53 -07:00
discogs.py Use a Distance object instead of floats for distance calculations. 2013-06-02 18:25:10 +10:00
duplicates.py duplicates: refactoring and empty-ID fix (#278) 2013-05-17 12:35:35 -07:00
echonest_tempo.py echonest_tempo: catch socket.error 2013-03-09 11:33:55 -08:00
embedart.py fixing things 2013-03-25 15:20:38 -03:00
fetchart.py API/test enhancements for #257 2013-04-27 16:47:42 -07:00
fuzzy.py fix extra super call in fuzzy 2013-03-14 18:43:44 -07:00
ihate.py remove singleton enforcement from plugins 2013-01-31 12:13:19 -08:00
importfeeds.py changelog for #180 2013-03-12 22:00:11 -07:00
info.py happy new year 2013-01-11 10:43:41 -08:00
inline.py inline: rename "pathfields" to "item_fields" 2013-05-28 23:20:19 -07:00
lyrics.py lyrics: substitute more punctuation (fixes #270) 2013-05-12 12:45:49 -07:00
mbcollection.py mbcollection: use library functions 2013-03-11 19:43:57 -07:00
mbsync.py fix interface to ID matching 2013-06-01 17:22:39 -07:00
missing.py fix interface to ID matching 2013-06-01 17:22:39 -07:00
mpdupdate.py Update comments to reflect config migration 2013-01-31 18:17:00 -05:00
random.py random -e (#263): fix some short responses 2013-05-19 11:00:52 -07:00
replaygain.py replaygain: catch Unicode exc on Windows (GC-499) 2013-01-12 14:38:19 -08:00
rewrite.py fix inline and rewrite for instance fields 2013-02-02 08:35:54 -08:00
scrub.py minor style cleanup for #75 2013-01-29 21:30:57 -08:00
smartplaylist.py smartplaylist: split query w/ shlex (fixes #256) 2013-04-21 20:55:07 -07:00
the.py remove singleton enforcement from plugins 2013-01-31 12:13:19 -08:00
zero.py zero: fix nulling fields containing None 2013-06-01 17:28:59 -07:00