Commit graph

873 commits

Author SHA1 Message Date
Pedro Silva
8f9e35f081 initial commit 2013-10-27 21:59:33 +01:00
Jakob Schnitzer
887e02c2ae convert: fix decision on which items to transcode 2013-10-27 17:10:55 +00:00
Peter Schnebel
dab7ec219d fixed log message 2013-10-27 12:04:58 +01:00
Peter Schnebel
479f92f250 Merge pull request #424 from pscn/echoplus
New plugin to fetch extended information from the EchoNest (call for feedback)
2013-10-27 03:10:29 -07:00
Peter Schnebel
538aa457e0 removed echonest_ prefix 2013-10-27 08:52:54 +01:00
Adrian Sampson
2481dc244b convert: iterate over the right items (fix #439) 2013-10-26 11:08:52 -07:00
Peter Schnebel
315522aafa fix inverted conditional when fingerprinting (@pedros) 2013-10-26 17:32:30 +02:00
Peter Schnebel
f6613ee31c added similarity finder plugin 2013-10-26 11:33:34 +02:00
Peter Schnebel
428302b45c add echonest_id to debug output 2013-10-26 10:33:29 +02:00
Peter Schnebel
5e0bac8ab5 be a little less picky when judging matches 2013-10-26 10:30:42 +02:00
Peter Schnebel
e4792df50f bugfix: don't use limit here 2013-10-26 10:29:21 +02:00
Peter Schnebel
a755fbcf53 workaround: also double check after profile 2013-10-26 10:28:11 +02:00
Peter Schnebel
c8c3c4ae66 workaround: onetime after analyze, the wrong song was returned. double check that. fall back to track data. 2013-10-26 10:26:55 +02:00
Peter Schnebel
9ac89b350c bugfix: extract duration from track 2013-10-26 09:39:24 +02:00
Peter Schnebel
03f5f71732 show the artist / title as received from EchoNest 2013-10-26 09:09:00 +02:00
Peter Schnebel
1324498f29 bugfix 2013-10-26 09:06:47 +02:00
Peter Schnebel
c4445df8af bugfix 2013-10-26 09:03:20 +02:00
Peter Schnebel
2d1788e595 bugfix 2013-10-26 08:58:39 +02:00
Peter Schnebel
a5be1648f9 new proposal 2013-10-26 08:56:56 +02:00
Peter Schnebel
6f5d4d1328 new proposal 2013-10-26 08:56:18 +02:00
Pedro Silva
1e737d146b Add new copy, move, delete, and tag options 2013-10-23 17:15:16 +02:00
Pedro Silva
7112c30415 Don't set default checksum command-line 2013-10-23 12:57:04 +02:00
Pedro Silva
a4425aa60e Don't spam stderr on -C without --verbose 2013-10-23 12:56:34 +02:00
Pedro Silva
3379c31f4f Add new option 'checksum' for specifying arbitrary checksumming commands 2013-10-23 01:32:05 +02:00
Pedro Silva
587de12ecc Default to match on mb_{track,album}id 2013-10-22 22:53:07 +02:00
Pedro Silva
35e727b86f Add --path sugar 2013-10-22 22:43:32 +02:00
Pedro Silva
aad0449f56 ensure command-line --keys is also respected 2013-10-22 00:05:02 +02:00
Pedro Silva
3d862d63d5 Properly initialize keys config as a list 2013-10-21 23:53:58 +02:00
Pedro Silva
6ae10ed765 add 'keys' option to allow duplicate matching on arbitrary attributes
- towards addressing #427
- TODO: invert key list
- TODO: implement alternative strategies (fp, md5, etc)
2013-10-21 23:32:33 +02:00
Peter Schnebel
00ec247515 bugfix for failed uploads 2013-10-18 00:32:28 +02:00
Peter Schnebel
1c453e852b bugfix for too many upload retires + added comments 2013-10-18 00:22:52 +02:00
Peter Schnebel
332e8a2924 Revert "bugfix for too many upload retires + added comments"
This reverts commit 8700736020.
2013-10-18 00:17:40 +02:00
Peter Schnebel
8700736020 bugfix for too many upload retires + added comments 2013-10-18 00:12:16 +02:00
Peter Schnebel
f3935e8aea disabled tempo 2013-10-17 22:49:27 +02:00
Peter Schnebel
491dff1f09 disabled tempo 2013-10-17 22:48:40 +02:00
Peter Schnebel
bd7a56bf07 renamed mappings 2013-10-17 22:27:37 +02:00
Peter Schnebel
f790b7cb15 renamed mappings 2013-10-17 22:02:20 +02:00
Adrian Sampson
2d2836825f #416: workaround comment, py26-ify 2013-10-17 12:10:17 -07:00
Adrian Sampson
f09bf57f6a Merge pull request #416 from pscn/master
Added min_weight option to lastgenre plugin, to provide for filtering out unpopular genres.
2013-10-17 12:00:35 -07:00
Peter Schnebel
b34a945051 better(?) defaults 2013-10-17 17:12:15 +02:00
Peter Schnebel
b13e9caea7 hint 2013-10-17 16:42:41 +02:00
Peter Schnebel
b08e68a920 Save raw values + added reapply switch + better debug output 2013-10-17 16:41:43 +02:00
Peter Schnebel
b1570beba9 Merged the ``multiple` and `max_genres` option into one `count`` option.
Updated debug output to waste less lines.
2013-10-17 09:52:35 +02:00
Peter Schnebel
b2a23a58e2 fixed indentation 2013-10-17 09:30:26 +02:00
Peter Schnebel
f3b64e87bc sync (plugin is broken) 2013-10-17 09:29:18 +02:00
Adrian Sampson
b037f777da echonest_tempo/#420: py26, line wrap, ... 2013-10-16 21:53:46 -07:00
Adrian Sampson
52312ee877 Merge pull request #420 from pscn/echonest_tempo
Fixed song matching in echonest_tempo plugin
2013-10-16 21:42:23 -07:00
Peter Schnebel
8215e81cea nicer debug output 2013-10-16 17:12:24 +02:00
Peter Schnebel
c5a9a66ad8 bugfixes for candidate detection 2013-10-16 16:46:41 +02:00
Peter Schnebel
78e75317a7 bugfixes for import 2013-10-16 16:31:26 +02:00
Peter Schnebel
f200cb0825 upload for the win 2013-10-16 16:08:00 +02:00
Peter Schnebel
6dd827964b bugfix for opts 2013-10-16 13:48:04 +02:00
Peter Schnebel
66c01adca1 use duration as another hint to find good matches 2013-10-16 12:40:27 +02:00
Peter Schnebel
fd0d8820bb Fixed detection of the correct song in EchoNest. 2013-10-16 12:19:25 +02:00
Peter Schnebel
abf2a17f42 bugfixes 2013-10-16 12:12:41 +02:00
Peter Schnebel
c7a269d1c5 fetch more results to increase the chance of finding the correct result 2013-10-16 11:53:48 +02:00
Peter Schnebel
2c2b7600c3 bugfix 2013-10-16 11:43:08 +02:00
Peter Schnebel
2a9def94b8 Merge branch 'master' into echoplus 2013-10-16 11:42:23 +02:00
Peter Schnebel
0ff15c5c4d The way of the impatient is filled with useless commits :( 2013-10-16 11:35:26 +02:00
Peter Schnebel
fa10515799 Bugfix for Album.get_top_tracks workaround. 2013-10-16 11:31:18 +02:00
Peter Schnebel
7591957327 added experimental guess mood feature (see http://developer.echonest.com/forums/thread/1297) 2013-10-16 11:28:02 +02:00
Peter Schnebel
846f4eb7ae fix possible bug 2013-10-16 10:33:51 +02:00
Peter Schnebel
9b8ad7dcd1 Experimental EchoNest plugin to fetch and map attributes from EchoNests audio_summary. 2013-10-16 10:26:18 +02:00
Peter Schnebel
d339e2f815 Workaround for pylast issue https://code.google.com/p/pylast/issues/detail?id=85 as suggested by @sampsyo 2013-10-16 08:45:13 +02:00
Adrian Sampson
ed44982f75 ftintitle: skip on empty albumartist (#418) 2013-10-15 10:03:15 -07:00
Peter Schnebel
c5896684f3 The following only applies when ``multiple`` is activated:
Return one valid genre even if its weight is lower then ```min_weight```.
Default for ```min_weight``` is now *10*.
Added new config option ```max_genres``` to limit the amount of genres returned.  Default is *3*.
2013-10-15 13:20:45 +02:00
Adrian Sampson
8e2c1bbe68 ftintitle: check artist_sort for null (fix #418) 2013-10-14 21:11:40 -07:00
Peter Schnebel
eafceaa0ed Added min_weight option to lastgenre, to provide for filtering out unpopulare genres. 2013-10-14 12:36:39 +02:00
Adrian Sampson
fac13a041e missing: tolerate disctotal == None
This problem:
http://pastebin.ca/2466454
is likely indicative of a bug elsewhere, but defensive coding seems like a
good idea here.
2013-10-13 18:22:43 -07:00
Adrian Sampson
d6dac1d35b scrub: no need to save after delete()
The delete() method on Mutagen objects writes the file directly. Calling
save() was unnecessary and, in at least one case we found, could inadvertently
preserve non-standard tags that Mutagen did not understand.
2013-10-08 14:49:29 -07:00
Adrian Sampson
54af040bc4 convert: extension is a bytestring (fix #390) 2013-10-06 12:13:14 -07:00
Adrian Sampson
a6798f9ba3 #380: Template.safe_substitute
This way, you almost never need to use the $$ escape sequence.
2013-10-06 12:01:42 -07:00
Adrian Sampson
dfea8ea05e convert: fix outdated reference, col wrap 2013-10-06 11:59:03 -07:00
Adrian Sampson
5e82b670f9 #380: shortcut/compatibility options
These config options make it easier to customize the command (no need to make
a single-element formats dict). And the opt config option provides backwards
compatibility with the previous style.
2013-10-06 11:57:32 -07:00
Adrian Sampson
b7e2ba7795 convert: log transcoding command 2013-10-06 11:28:29 -07:00
Adrian Sampson
d828d7aae4 #380: correctly skip no-op transcodes
The format key is now the (lower-cased) format name string used by beets,
which means we can precisely detect which transcodes would be unnecessary. To
facilitate this, I added an ALIASES dict which allows more convenient names to
work for this (e.g., "wma" is easier to remember than "windows media").
2013-10-06 11:21:56 -07:00
Adrian Sampson
0d303ffde7 multi-format convert (#362): simpler validation
This removes the explicit config validation check and collapses it into the
config read step (which is the intended convenience of Confit's API).
2013-10-06 10:56:42 -07:00
Adrian Sampson
2aebec0928 #397: shorter option name, docs, changlog
I changed the option name from "multiple_genres" to "multiple".
2013-10-06 10:34:32 -07:00
Adrian Sampson
f35d7fec9c multiple genres (#397): simplify implementation
- don't use vestigial global object for config
- list comprehensions ftw
2013-10-06 10:29:47 -07:00
Adrian Sampson
41a6ccbac1 Merge pull request #397 from rashley60/master
Added ability to store comma delimited lists of genres using lastfm
2013-10-06 10:10:40 -07:00
Adrian Sampson
2e2e0b2919 get_album (and evalute_template) with non-DB items
Alternative fix for #403.
2013-10-05 11:06:08 -07:00
Pedro Silva
89c0e2c8b7 Fix issue #403
hack around items needing library and id references since 238e743
2013-10-05 15:55:44 +02:00
Ross Ashley
7a7d009671 Removed pdb stuff and cleeaned up description. 2013-10-03 15:15:18 -04:00
Ross Ashley
8525983791 For the comma delimited lastgenre addition, the old way is default.
There is a new option called multiple_genres which defaults to False
but when set to True, the comma delimited list of genres is returned
by lastgenre.

So, if you want a comma delimited list, it is

lastgenre:
    multiple_genres: True
2013-10-03 11:39:33 -04:00
Adrian Sampson
f42dabd1fa merge 2013-09-29 18:37:06 -07:00
Adrian Sampson
f9cc86be08 fromfilename: use unicode filename
As pointed out in #395, we need to decode the filename before doing our fancy
matches on it.
2013-09-29 18:35:43 -07:00
Ross Ashley
7c0d828a2e Replaced unnecessary code with one line. 2013-09-27 10:08:09 -04:00
colin-scott
b6e7e0b817 Support singleton filenames.
Previously, track ids were assumed to be part of every filename. This
assumption does not hold for singleton tracks.
2013-09-26 12:26:15 -07:00
Ross Ashley
514fa6cf0c Removed some unused and commented out code. 2013-09-26 15:18:58 -04:00
Ross Ashley
4291932298 Added ability to store comma delimited lists of genres using lastfm
and the local genre.txt file in the usual way.

Using this, a song might now have a genre of 'House, IDM, Dance',
instead of just 'House'.
2013-09-26 10:39:32 -04:00
Adrian Sampson
bb21ec692e lastgenre: add album.save() 2013-09-25 08:45:18 -07:00
Johann Klähn
5414dc80d2 allow and expand home directory in mpdupdate socket
This allows you to use a socket in your home directory (e.g.
`~/.mpd/socket`) without having to specify the full path including the
username (which can change from machine to machine).
2013-09-23 21:47:26 +02:00
Adrian Sampson
fcab014510 scrub: opus support 2013-09-21 19:27:04 -07:00
Adrian Sampson
9597d5e370 scrub: restore album art (close #138) 2013-09-21 19:25:31 -07:00
Adrian Sampson
f5252efbe8 ftintitle: restrict by query
Again, for symmetry with other metadata cleanup/extension commands.
2013-09-17 14:31:42 -07:00
Adrian Sampson
2e31a7c6bf ftintitle: store modifications to the database
A run of `beet update` is now no longer required. This is in line with the
behavior of lyrics, lastgenre, echonest_tempo, replaygain, ...
2013-09-17 14:30:00 -07:00
Adrian Sampson
63803a9742 ftintitle: use beets' ui.print_ function
This avoids encoding troubles. This also uses displayable_path to deal with
Unicode pathnames.
2013-09-17 14:26:24 -07:00
Adrian Sampson
a495635f90 ftintitle: remove duplicated field variables
Several fields were kept around in variables even though they were unused.
They can be read from the Item object at any time.
2013-09-17 14:19:28 -07:00
Adrian Sampson
2a93438969 ftintitle: reorganization and refactoring
- expand docstrings
- collapse some small/duplicative helper functions
- simplify control flow
2013-09-17 14:11:17 -07:00
Adrian Sampson
dfc5edec40 ftintitle: docstrings, new top-level function 2013-09-17 12:52:38 -07:00
Adrian Sampson
4bb3a481e2 ftintitle: move helper functions to module scope
These do not need to be closures.
2013-09-17 12:44:27 -07:00
Adrian Sampson
bd598696f0 ftintitle: syntactic/comment style cleanup
- expunge remaining CamelCase identifiers
- start adding PEP8 space around operators
- start wrapping to 79 columns
- access track fields with attribute syntax

--HG--
extra : amend_source : 9c916013230dd3cde187f2a55e89587b009bce6a
2013-09-17 12:38:16 -07:00
Adrian Sampson
8212cca498 add ftInTitle plugin by @Verrus
This is a snapshot of the plugin at its git revision
abb6bb94db79e9260e2062404c986316f1dc925c.
2013-09-17 12:12:22 -07:00
Adrian Sampson
c5032f925e move Destination method to Item class 2013-09-17 09:09:10 -07:00
Adrian Sampson
f82d466b77 eliminate lib argument to Item.evaluate_template 2013-09-17 08:44:26 -07:00
Adrian Sampson
22d5e564c6 move move method to model objects 2013-09-16 22:12:26 -07:00
Adrian Sampson
048880011f echonest_tempo: ensure we have the right track
closes #361
2013-09-16 16:59:11 -07:00
Adrian Sampson
46df8c4f0d info: eager error detection (closes #371) 2013-09-16 16:37:55 -07:00
Adrian Sampson
9607b258a5 fromfilename: simplify 2013-09-13 21:14:10 -07:00
Adrian Sampson
b8f01f0cfa fromfilename: preserve case, apply in more cases 2013-09-13 21:05:51 -07:00
Adrian Sampson
3f6eb4be24 fromfilename: switch to declarative style
No need for redundant handleXfields methods; we'll just inspect the fields
we're given.
2013-09-13 20:48:12 -07:00
Adrian Sampson
9e1e55e6a5 fromfilename: python style, naming, comments 2013-09-13 20:34:05 -07:00
Adrian Sampson
47999dc759 initial import of tags-from-filename plugin (#113)
This was contributed via email. Now I'll clean it up for inclusion.
2013-09-13 19:50:12 -07:00
Adrian Sampson
09d724db3f Merge pull request #380 from rowan-lewis/convert-all
Allow the convert plugin to convert to any format, not just mp3.
2013-09-13 19:32:57 -07:00
Adrian Sampson
b3bc4d3622 mbcollection: skip invalid MBIDs 2013-09-13 19:13:36 -07:00
Adrian Sampson
c57f2d0b78 merge 2013-09-13 18:58:30 -07:00
Rowan Lewis
80d060db07 Added 'quiet' operation mode, prevents start/finish announcements for each file. 2013-09-14 10:18:36 +10:00
Rowan Lewis
52d86f0e6a Added more format presets, updated documentation. 2013-09-14 09:35:25 +10:00
Rowan Lewis
d2327d2dcf Fixed validation, basically replace unfriendly errors with friendly errors. 2013-09-14 07:27:15 +10:00
Rowan Lewis
d3dae9f089 Reject lossy formats under a set bitrate. 2013-09-13 08:13:30 +10:00
Rowan Lewis
53aba3ce3f It's called Vorbis, not OGG. 2013-09-13 07:57:04 +10:00
Rowan Lewis
bfbf5a9215 Changed the configuration to allow for easier format selection. 2013-09-13 07:54:36 +10:00
Adrian Sampson
19958f75ff embedart: fix error message when imagehdr fails 2013-09-12 10:45:02 -07:00
Rowan Lewis
697e70f14b Problem with unicode filenames sorted. 2013-09-12 22:21:50 +10:00
Rowan Lewis
697cf3fd65 Removed reference to my testing plugin, oops. 2013-09-12 20:22:18 +10:00
Rowan Lewis
21c9855c4f Allow the convert plugin to convert to any format, not just mp3. 2013-09-12 20:09:53 +10:00
Adrian Sampson
fa97684e7b fix outdated _record reference in web plugin 2013-09-09 20:56:38 -07:00
Adrian Sampson
4ee4169349 simplify get_query using class attributes 2013-09-09 20:20:22 -07:00
Adrian Sampson
f70ddfbd1d deduplicate albums() and items() methods
This also drops the keyword arguments to these methods, which were vestigial.
2013-09-08 23:18:58 -07:00
Adrian Sampson
d80576fec1 get rid of dictionary comprehensions
for Python 2.6 compatibility
2013-08-29 17:07:04 -07:00
Adrian Sampson
343a85d482 mbsync: use separate structure for old_data
Assigning an attribute on Items doesn't really work here since we try to store
that value to the DB as a flexattr.
2013-08-23 14:01:31 -07:00
Adrian Sampson
5e09c5e473 convert: fix iteration over results 2013-08-22 17:33:56 -07:00
Adrian Sampson
c7fe017752 remove Library.{move,store} methods
These methods are now provided by LibModel, which makes dealing with items and
albums symmetric.
2013-08-21 15:34:45 -07:00
Adrian Sampson
deef7f9d20 a few more necessary album.store()s 2013-08-21 11:23:09 -07:00
Adrian Sampson
6677cea036 fix uses of item.dirty and item.record 2013-08-21 10:57:52 -07:00
Adrian Sampson
ec10f8c223 remove count() calls
I removed this method in an earlier commit.
2013-08-20 14:28:28 -07:00
Adrian Sampson
276ce14dd2 flexattrs work for Albums
A second base class, LibModel, maintains a reference to the Library and should
take care of database-related tasks like load and store. This is the beginning
of the end of the terrible incongruity between Item and Album objects (only
the latter had a library reference). More refactoring to come.

One large side effect: Album objects no longer automatically store
modifications. You have to call album.store(). Several places in the code
assume otherwise; they need cleaning up.

ResultIterator is now polymorphic (it takes a type parameter, which must be a
subclass of LibModel).
2013-08-16 18:36:30 -07:00
Adrian Sampson
38f1e6aec2 new FlexModel base class
I intend to use this for both Item and Album to avoid code duplication and
simplify code that uses both entities.
2013-08-16 17:22:17 -07:00
Adrian Sampson
7d9f556cbe introducing "slow queries"
In preparation for enabling queries over flexattrs, this is a new path that
lets queries avoid generating SQLite expressions altogether. Any query that
can be completely evaluated in SQLite will be, but when it can't, we now fall
back to running the entire query in Python by selecting everything from the
database and running the `match` predicate.

To begin with, this mechanism replaces RegisteredFieldQueries, which
previously used Python callbacks for evaluation. Now they just indicate that
they're slow queries and the query system falls back automatically.

This has the great upside that it lets use implement arbitrarily complex
queries without shoehorning everything into SQLite when that (a) is way too
complicated and (b) doesn't buy us much performance anyway. The obvious
drawback is that any code dealing with queries now has to handle two cases
(slow and fast).

In the future, we could optimize this further by combing fast and slow query
styles. For example, if you want to match with a substring *and* a regular
expression, we can do a first pass in SQLite and apply the regex predicate on
the results. Avoided for now because premature optimization, etc., etc.

Next step: implement flexattr matches as slow queries.
2013-08-16 14:28:46 -07:00
Adrian Sampson
f1c41428e6 changelog/thanks/tweaks for #355
- Remove requests import
- Name change
- Remove some obsolete checks
2013-08-08 16:19:16 -07:00
Filipe Fortes
7c607ebf82 Simplify fetching cover art from release group 2013-08-08 10:02:25 -03:00
Filipe Fortes
a4470ace69 FetchArt plugin: Support grabbing album art from MB release group 2013-08-07 19:21:45 -03:00
Simon Chopin
e30f8f8fb9 bpd: Use AnyFieldQuery when searching "any" fields
BPD hadn't been ported when AnySubstringQuery was removed, resulting in
crash, death and horror when using the search function.
2013-07-02 11:00:10 +02:00
Fabrice Laporte
995d75f3f3 Logging: remove match ratio, add source website name 2013-06-29 14:24:41 +02:00
Fabrice Laporte
9780be270c Some tweaking to yield better results by not
rejecting valid lyrics.
2013-06-29 14:23:53 +02:00
Fabrice Laporte
c6f935ac4c Don't consider text between parentheses when
matching url title with song title.
2013-06-29 14:21:55 +02:00
Adrian Sampson
1649512b54 web: item_count -> stats (#333)
The new /stats endpoint now counts both items and albums. In the future, it
could also expose other interesting information.
2013-06-21 10:27:49 -07:00
Uwe L. Korn
3fd78bd63d [web] Add API method to get the total item count 2013-06-21 16:01:03 +02:00
Pedro Silva
13dc28b349 Fix zero length field error under Python 2.6
* missing.py (_missing): add field indexes to format spec
* duplicates.py (commands): add field indexes to format spec
2013-06-14 13:59:14 +01:00
Adrian Sampson
0262803a40 add data_source, data_url to TrackInfo objects
The Beatport plugin now uses this to provide singleton matches (and their
appropriate penalty).
2013-06-12 16:19:30 -07:00
Adrian Sampson
4555d69803 random: py26 fix 2013-06-12 16:09:41 -07:00
Fabrice L.
6c8f45c7f7 Update lyrics.py 2013-06-12 01:20:08 +03:00
Fabrice Laporte
a64d277bae Merge branch 'master' of https://github.com/sampsyo/beets 2013-06-12 00:09:44 +02:00
Fabrice Laporte
b3747189e5 lyrics: google backend should turn up more results
bs4 scraping routine has been made more generic,
relying less on specific markup tags.
Better algorithm to detect which url titles match
song titles: domain names are now removed from url
titles.
Use regex to decimate \n in fetched lyrics.
2013-06-12 00:07:01 +02:00
Adrian Sampson
2f053b0ecd scrub: handle IOError
Mutagen can raise this error when trying to truncate a file.
2013-06-10 16:06:43 -07:00
Adrian Sampson
f6faf72328 move Distance class to hooks module 2013-06-10 15:21:32 -07:00
Fabrice Laporte
7f62db7327 Merge branch 'master' of https://github.com/sampsyo/beets 2013-06-08 16:36:56 +02:00
Adrian Sampson
d1ebe423c9 changelog/thanks/style for #319 2013-06-07 20:53:53 -07:00
Timothy Appnel
847edcd6cc Fix bug where a null value for lengthMS would crash an import. Added a fallback to parse the standard min:sec length field. 2013-06-07 23:43:21 -04:00
Tai Lee
42efd2a761 Change log for #316 and code style tweaks. 2013-06-08 00:32:40 +10:00
Wessie
0009c51577 Made formatting strings compatible with python 2.6
Also fixed styling according to pep8
2013-06-07 15:58:36 +02:00
Adrian Sampson
fa40fd9108 beatport: use new Distance objects (#302)
This also brought to light the fact that the distance calculations for tracks
was incorrect because there's no source field on TrackInfo objects yet. This
needs to be fixed.
2013-06-06 10:34:20 -07:00
Tai Lee
4cfd1a874f Merge branch 'master' of github.com:sampsyo/beets into distance-refactor
Conflicts:
	beets/autotag/match.py
	beets/config_default.yaml
	docs/changelog.rst
	docs/reference/config.rst
2013-06-06 23:28:25 +10:00
Tai Lee
898254ed6a Merge branch 'master' into distance-refactor
Conflicts:
	docs/changelog.rst
2013-06-06 11:09:36 +10:00
John Hawthorn
1bf8ae0a01 mpdupdate: Allow UNIX domain socket for MPD server
If the host configuration begins with a '/', it is assumed to reference
a UNIX domain socket. This is similar to libmpdclient's behaviour.
2013-06-05 13:20:27 -07:00
Adrian Sampson
dfda5a311d beatport (#301): more Unicode literals
Avoids warnings in the unidecode module.
2013-06-03 14:06:51 -07:00
Adrian Sampson
dc75935b89 Merge pull request #301 from jbaiter/beatport
Plugin for Beatport Metadata in Autotagger
2013-06-03 13:53:05 -07:00
Johannes Baiter
edd0efcb87 Fix unicode bug in Beatport plugin 2013-06-03 17:22:29 +02:00
Fabrice Laporte
09e721efe6 rename "section" markup 2013-06-02 22:35:36 +02:00
Johannes Baiter
f2a924fb56 Bugfixes in Beatport plugin 2013-06-02 11:55:44 +02:00
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
Adrian Sampson
9a6b6240d0 zero: fix nulling fields containing None 2013-06-01 17:28:59 -07:00
Adrian Sampson
4624f65ce3 fix interface to ID matching
As outlined in #299, we broke many places in the code that were expecting
_album_for_id and _track_for_id to return a single item rather than a list. I
took this opportunity to divide up the interface: there's now one function for
MBIDs (returning a single object or None) and one for generic IDs (returning a
list).
2013-06-01 17:22:39 -07:00
Johannes Baiter
eb20d77c69 Implement BeetsPlugin API for Beatport plugin 2013-06-01 18:45:54 +02:00
Johannes Baiter
bbd50c65cd Fix Beatport source weight 2013-06-01 15:50:59 +02:00
Johannes Baiter
af81b67c0c Implement Beatport API wrapper 2013-06-01 15:23:18 +02:00
Johannes Baiter
1a8f54fd51 Lay out beatport plugin based on discogs plugin 2013-06-01 15:20:58 +02:00
Adrian Sampson
18bbe9f645 Merge pull request #298 from jayme-github/python26-resub
Fix Python 2.6 compatibility
2013-05-30 09:48:50 -07:00
Tai Lee
ee0c00708b Quick fix for a couple other places that were expecting hooks._album_for_id()` to return a single result.
It's possible that these plugins might require a little more thought
into how they should work (or not work) with potentially multiple albums
matching an idea, and potentially those those albums being an incorrect
match (e.g. if two data source plugins share a simple numerical ID
format).
2013-05-31 00:05:24 +10:00
Jayme
5bb0881cdd Replace two more flag arguments 2013-05-30 10:09:39 +02:00
Jayme
32e1c13510 Fix Python 2.6 compatibility 2013-05-30 09:30:00 +02:00
Adrian Sampson
303cd9ba00 Merge pull request #291 from jbaiter/discogs_albumid
Support for manually entered IDs in plugins
2013-05-29 14:43:59 -07:00
Johannes Baiter
3df635eca2 Make regex for Discogs ID more specific 2013-05-29 20:31:58 +02:00
Johannes Baiter
2d4ea4e49b Fix bug in discogs.album_for_id for ID-Strings that end in a bracket 2013-05-29 10:59:04 +02:00
Johannes Baiter
40a6e03ba6 Improve regular expression for Discogs IDs 2013-05-29 10:54:15 +02:00
Adrian Sampson
3b438b7778 inline: rename "pathfields" to "item_fields" 2013-05-28 23:20:19 -07:00
Adrian Sampson
0176e10ccf inline: allow album field definitions
Under the album_field heading.
2013-05-28 23:10:47 -07:00
Adrian Sampson
a0cb31956d distinguish Album and Item template fields
An earlier change (due to @pedros) added the ability for plugins to define
template fields that work with Albums as well as Items. This enables some
cool new use cases but required that every template field definition check the
type of its arguments. Instead, this iteration on the idea distinguishes
between fields meant for Items and those meant for Albums.

In addition to simplifying the implementation of these functions, this also
enables the creation of album fields with identical names to item fields.
(For example, a user contacted me recently about adding a $bitrate field for
albums, which would be the average bitrate of the items. They can do this now
using a plugin.)

I also changed the docs to stop using the decorator approach to registering
template fields. We're moving toward removing those.
2013-05-28 22:30:23 -07:00
Adrian Sampson
9f927438ca fix some dumb mistakes from most recent flurry 2013-05-28 22:04:20 -07:00
Adrian Sampson
72449caccf discogs: move config default into constructor
Such is the new convention for plugin configuratino defaults.
2013-05-28 21:45:31 -07:00
Adrian Sampson
480fa80e47 discogs: penalty only for matches from discogs
Otherwise, this was penalizing all album matches.

This also applies the same treatment as the previous commit: only load the
config at run time (at the expense of code clutter).
2013-05-28 21:25:28 -07:00
Johannes Baiter
f17e8550ca Determine IDs from MusicBrainz and Discogs URLs 2013-05-28 13:49:34 +02:00
Johannes Baiter
e3418be75d Add support for manually entered release ID in Discogs 2013-05-28 12:58:05 +02:00
Tai Lee
35e926a51b Add Discogs and general source weight penalty (configurable, undocumented).
Discogs (and other individual plugins) should return a penalty between
0.0 and 0.1, which will be multiplied by the general source weight. This
allows individual plugins to be weighted against relative to each other,
and amplified together against other penalty categories (track, title,
etc.)
2013-05-27 01:28:40 +10:00
Tai Lee
a6b1bb1bbc Move articles to the front of Discogs artist names. 2013-05-25 14:05:03 +10:00
Tai Lee
e3fa403ad2 Only execute pathfields expressions and functions if they are called with an Item argument. Otherwise, return an empty string. 2013-05-25 12:28:52 +10:00
Tai Lee
3f4e194c41 We only need to strip the disambiguation from artist names, not the join strings. 2013-05-25 12:19:48 +10:00
Adrian Sampson
72f0505744 discogs: extra space in ambiguous artists (#289) 2013-05-24 12:31:18 -07:00
Adrian Sampson
d877f5e3e8 Merge pull request #289 from Smyds/master
Remove discogs artist disambiguation number
2013-05-24 12:28:50 -07:00
César Prouté
726c84674b remove discogs artist disambiguation number 2013-05-24 20:15:24 +01:00
Tai Lee
835a3c2a73 Improved parsing of Discogs' position field.
Some albums have a single disc with positions like I, II, III, IV, etc.
Previously beets thought each track on these albums was a new medium.

Now we assume that if there is no explicit medium index and the ordinal
of an alpha medium does not appear to be sequential (e.g. A, B, C) that
the medium is actually the medium index.
2013-05-25 01:36:12 +10:00
Tai Lee
4c06c96630 Extract disc titles from Discogs' "index tracks". 2013-05-25 01:32:06 +10:00
Tai Lee
7f068a8c03 Add AlbumInfo.data_url property, populate it for Discogs matches and display it when it is non-empty.
Makes it easier for people to find the best Discogs (or other) match
and import it to Music Brainz using a grease monkey or similar script.
2013-05-24 22:50:14 +10:00
Adrian Sampson
26682f9168 docs/changelog for convert paths config (#285) 2013-05-22 15:00:53 -07:00
Lucas Duailibe
1e0290354c fix some debug code 2013-05-22 14:11:55 -03:00
Lucas Duailibe
76e310d811 different paths for convert
the paths configuration for converted files can be different from the importer
closes #232
2013-05-22 11:03:00 -03:00
Tai Lee
dde4bfab8c Update signature for item_candidates() in chroma plugin. 2013-05-22 08:10:20 +10:00
Tai Lee
75a4171d20 Merge branch 'master' of github.com:sampsyo/beets into imenem-discogs-search
Conflicts:
	docs/changelog.rst
	docs/plugins/index.rst
2013-05-21 23:27:53 +10:00
Tai Lee
3eb6f8e5eb Add discogs plugin, which extends the autotagger to include results from the discogs database.
This is a refactor of the plugin developed by `imenem`.

- Pass `artist`, `album` and `va_likely` to `candidates()` so that
  plugins don't have to work this out from `items` all over again.
- Pass `artist` and `title` to `item_candidates()`.
- Silence spurious `urllib3` info log lines.
- Use a proper "beets" user agent with `discogs_client`.
- Remove `abstract_search` plugin. It seems unnecessary. How many
  music databases are there? How many will beets support? How much
  common code might there be between them? We can add some abstraction
  if or when more databases are supported.
- Derive more AlbumInfo and TrackInfo properties from discogs Release
  objects, especially album ID so that beets doesn't just use the first
  release and think all subsequent releases are duplicates.
- Add basic documentation, doc strings and code comments.
- Sanitise search query. Remove non-word characters and medium info that
  might filter out good search results.
- Use artist `join` strings from discogs Release object when an album
  or track has multiple artists.
- Don't rely on discogs track position, which is unreliable. But tracks
  are in order, so we can recalculate medium and medium_index as long as
  we can extract a consistent medium across tracks from the position.
- Add "various" as a known signal to indicate various artists.
- Prevent `chroma` plugin from returning a a huge track distance for any
  track that is missing an ID (e.g. all discog tracks).
- `TrackInfo.index` should be the release index (calculated by beets),
  not the medium index (derived from discogs track position).
- Add `AlbumInfo.data_source`. It's "Unknown" by default which is shown
  in red when displaying a suggested or selected match. The built in
  auto tagger sets it to "MusicBrainz" which is shown in green. Anything
  else (e.g. "Discogs") is shown in yellow.
- Remove double spaces from album titles (bad data from Discogs).
2013-05-21 21:16:52 +10:00
Adrian Sampson
6f2c1d81bd random -e (#263): fix some short responses
This slight modification to the selection algorithm avoids the situation in
which too many objects are chosen for a given artist and fewer than N objects
are eventually returned. We do this by implementing "selection without
replacement" literally: we choose objects one at a time and pop them from the
population when they are selected.
2013-05-19 11:00:52 -07:00
Adrian Sampson
748d8caa64 Merge pull request #263 from madjar/master
Added a -e option to random that makes the distribution even among artists
2013-05-19 10:41:39 -07:00
Georges Dubus
5dbff4a8eb Fixed the randomness of the equal change to have more than one song by artist 2013-05-19 17:22:19 +02:00
Adrian Sampson
cee3b20630 duplicates: refactoring and empty-ID fix (#278)
The main change here, aside from documentation/naming updates, is that we skip
"duplicates" that arise from albums/tracks that are missing their MBIDs.
2013-05-17 12:35:35 -07:00
Adrian Sampson
cef245eb05 merge 2013-05-17 12:15:36 -07:00
Adrian Sampson
2f442b5677 Merge pull request #278 from pedros/duplicates
Duplicates plugin
2013-05-17 12:15:06 -07:00
Adrian Sampson
1898a79d4f fix inline for album plugin fields (#274) 2013-05-17 12:13:01 -07:00
Adrian Sampson
1ffc56b85a doc correction and refactoring for #275
Plugin-provided template fields are not available for queries. (Perhaps they
should be, though!)
2013-05-17 12:07:53 -07:00
Pedro Silva
7031c15418 Initial import of 'duplicates' plugin 2013-05-17 12:47:34 +01:00
Pedro Silva
a48fde9f2c Use newly defined '$missing' template field instead of hardcoded format (-c) 2013-05-15 15:09:00 +01:00
Adrian Sampson
a0ef886801 lyrics: substitute more punctuation (fixes #270) 2013-05-12 12:45:49 -07:00
Adrian Sampson
a5cb34360d lyrics: fix encoding for Lyrics.com 2013-05-12 12:38:48 -07:00
Adrian Sampson
f086fb6fd7 changelog, little style tweak for #272
Changed single-triple quotes to double-triple quotes, just for consistency
with the rest of the codebase.
2013-05-10 22:23:24 -07:00
Adrian Sampson
e1f7027abc Merge branch 'missing' of https://github.com/pedros/beets
Conflicts:
	docs/plugins/index.rst
2013-05-10 22:08:15 -07:00
Pedro Silva
b2d8f04f05 Modify "not part of beets" to "part of beets" 2013-05-10 16:50:34 +01:00
Pedro Silva
763cfa06b4 Don't check for item.paths == None as that can't happen 2013-05-10 16:43:17 +01:00
Pedro Silva
d32a3ef9b5 Implement logic for displaying missing track counts 2013-05-10 16:42:45 +01:00
Pedro Silva
69877f2013 Add 'count' and 'total' parameters
- count: count missing tracks per album
- total: count total missing tracks
2013-05-10 16:42:10 +01:00
Pedro Silva
bed7c5ae88 Add _missing_count function 2013-05-10 16:41:04 +01:00
Pedro Silva
abe12be4b2 Remove unneeded Library argument from _missing 2013-05-10 16:06:30 +01:00
Pedro Silva
18e2704ffb Remove unnecessary _format function 2013-05-10 14:23:32 +01:00
Pedro Silva
6ae73bc921 Initial import of missing tracks plugin
This plugin adds a new command, ``missing`` or ``miss``, which finds
and lists, for every album in your collection, which tracks are
missing.
2013-05-10 14:13:53 +01:00
Georges Dubus
bcae495c50 Added a -e option to random that makes the distribution even among artists 2013-05-03 18:19:44 +02:00
Adrian Sampson
dd8d4c16cc spell check 2013-04-29 10:23:21 -07:00
Adrian Sampson
374e043c3c API/test enhancements for #257
Also, `cautious` defaults to False for backwards-compatibility.
2013-04-27 16:47:42 -07:00
Fabrice Laporte
2dc15a0e2b Use re.search instead of re.match with simplified regex.
Add additional cover_names parameter to art_in_path, and makes 'cover_names' a  plugin config option.
2013-04-27 12:21:57 +02:00
Fabrice Laporte
d9e213867c fetchart (issue 459): use regex to detect valid image names + 'cautious' option for finer control of filename matching 2013-04-22 23:44:35 +02:00
Adrian Sampson
bf904187e2 smartplaylist: split query w/ shlex (fixes #256) 2013-04-21 20:55:07 -07:00
Adrian Sampson
aaafba4d28 changelog for #254 2013-04-21 20:41:01 -07:00
Fabrice Laporte
0fb877a059 lastgenre: invert 'force' option default value. 2013-04-21 23:34:20 +02:00
Fabrice Laporte
6fdfabe4b7 Revert "lastgenre: force real lookup during import only if no custom whitelist set."
This reverts commit 4be30fca2e.
2013-04-21 10:35:08 +02:00
Fabrice Laporte
4be30fca2e lastgenre: force real lookup during import only if no custom whitelist set. 2013-04-20 14:29:14 +02:00
Adrian Sampson
2a9afd3908 misc. style cleanup for #243 2013-04-15 10:52:17 -07:00
Adrian Sampson
1622dcefb7 Merge pull request #243 from KraYmer/master
Add a lyrics backend that scrapes results from google custom search api
2013-04-15 10:19:31 -07:00
Adrian Sampson
16e0648c81 lastgenre: fix crash with canonicalization 2013-04-10 10:34:06 -07:00
Adrian Sampson
8ae202cf24 changelog for #246 2013-04-10 10:18:58 -07:00
Uwe L. Korn
3b33705e3b Compute Content-Length to make tracks seekable in most players via the web plugin 2013-04-10 14:21:47 +02:00
Fabrice Laporte
479b25bac3 Code style + fix doc typo 2013-04-08 18:35:02 +02:00
Fabrice Laporte
7b13edee40 lyrics: restore tags write and fix extract_text() 2013-04-06 18:24:30 +02:00
Fabrice Laporte
cfb6735e43 Add a lyrics backend that scraps results from google custom search api.
Add a 'fallback' option to facilitate working around the 100 queries/day google
limit by marking files as 'visited' so they are not considered for lyrics search
on the next beet run.
I've put my own google_engine_ID as default value in the code but could be
reconsidered, this engine contains databases known to be scrappable by the
plugin algorithm though.
2013-04-06 15:22:04 +02:00
Adrian Sampson
70b528ed81 use standard query API for album-by-artist (#240) 2013-04-02 20:31:28 -07:00