Commit graph

3425 commits

Author SHA1 Message Date
Austin Marino
e5b43d4bf4 Extended the file type export options to include not only JSON but also XML and CSV 2019-10-09 00:52:49 -07:00
Rahul Ahuja
32ea225fad Guard against "empty" albums 2019-10-05 23:12:53 -07:00
Rahul Ahuja
ce90b2aae5 Improve documentation 2019-10-05 15:07:20 -07:00
Rahul Ahuja
a7cdaac5f8 Consistent naming 2019-10-03 22:57:28 -07:00
Rahul Ahuja
0685305efb Only sync tracks in library 2019-10-03 22:53:35 -07:00
Rahul Ahuja
6c49afaf22 Better naming 2019-10-03 22:49:32 -07:00
Rahul Ahuja
ea03c7fac2 Better readability 2019-10-03 22:16:32 -07:00
Rahul Ahuja
5e6b8f5264 DRY album/track distances 2019-10-03 22:04:30 -07:00
Rahul Ahuja
14b8f30ead Appease flake8 2019-10-03 19:13:40 -07:00
Rahul Ahuja
a1885a571b Add documentation, fix circular import 2019-10-03 19:03:04 -07:00
Rahul Ahuja
f14137fcc2 Add BPSyncPlugin 2019-10-03 18:04:12 -07:00
Rahul Ahuja
3ffaaa1f37 Default bpm to None 2019-09-28 11:37:58 -07:00
Rahul Ahuja
7b9ebcbf2f Properly guard against None key 2019-09-27 17:48:28 -07:00
Rahul Ahuja
13792bd8ab Always set musical_key 2019-09-27 17:33:49 -07:00
Rahul Ahuja
4bc057fd5e Exclude invalid musical keys 2019-09-27 17:11:47 -07:00
temrix
dfb6fc3f5b
Test for presence and non-emptiness in one go. 2019-09-21 21:14:11 +02:00
temrix
9a4175dcd0
Return value directly. 2019-09-21 21:13:41 +02:00
temrix
f98010ad23
Add 'look before you leap' defensive code. 2019-09-21 16:09:08 +02:00
temrix
b4edc1f832
Add bpm, musical_key and genre to plugin. 2019-09-19 00:29:43 +02:00
Rahul Ahuja
ca5806fb6e Restrict country code to alpha characters 2019-09-15 16:34:20 -07:00
Rahul Ahuja
01e8643cec Revert to optional capturing group 2019-09-15 16:24:32 -07:00
Rahul Ahuja
a5fadf0dcc Integrate MetadataSourcePlugin 2019-09-15 15:59:24 -07:00
Rahul Ahuja
0b2837dd4f Revert Spotify, Discogs changes 2019-09-11 00:37:23 -07:00
Rahul Ahuja
6cfe7adb6c Use qualified import 2019-09-11 00:26:48 -07:00
Rahul Ahuja
ed80e915fe Move get_distance --> beets.plugins 2019-09-11 00:07:43 -07:00
Rahul Ahuja
876c0f733f Appease flake8 2019-09-10 23:52:35 -07:00
Rahul Ahuja
dfdf8ded33 Add missing import 2019-09-10 22:55:41 -07:00
Rahul Ahuja
84b13475e0 Move get_distance to beets.autotag 2019-09-09 19:13:24 -07:00
Rahul Ahuja
c531b1628e Avoid circular import 2019-09-09 18:28:20 -07:00
Rahul Ahuja
68e91b18b0 Fix discogs.py MetadataSourcePlugin refs 2019-09-09 17:33:42 -07:00
Rahul Ahuja
732e372ed2 Rename/move to plugins.MetadataSourcePlugin, fix formatting 2019-09-09 17:31:42 -07:00
Rahul Ahuja
0a700c75a2 Optional capturing groups 2019-09-07 01:07:44 -07:00
Rahul Ahuja
bdb7565500 Avoid nested capturing groups 2019-09-07 00:48:19 -07:00
Rahul Ahuja
4a6fa5657b Formatting 2019-09-06 13:11:28 -07:00
Rahul Ahuja
12a8e0a792 Fix Spotify API error formatting 2019-09-06 12:41:24 -07:00
Rahul Ahuja
0d6df42d5f Use Abstract Base Class 2019-09-06 12:08:26 -07:00
Rahul Ahuja
a3fb8ebfff Formatting 2019-09-04 22:56:09 -07:00
Rahul Ahuja
f7c6b5ba7f Fix str format arg order 2019-09-04 22:32:55 -07:00
Rahul Ahuja
30cfd7ff80 Use positional str.format arg 2019-09-04 21:18:07 -07:00
Rahul Ahuja
8010488f37 Modularize distance 2019-09-04 21:03:22 -07:00
Rahul Ahuja
1b05912ab9 Appease flake8 2019-09-04 20:39:46 -07:00
Rahul Ahuja
f64bd65ddb Remove unnecessary indexing 2019-09-04 20:11:30 -07:00
Rahul Ahuja
bd0cea9f1b Factor out APIAutotaggerPlugin 2019-09-04 19:50:04 -07:00
Rahul Ahuja
4a552595df Simplify regex match 2019-09-02 14:27:51 -07:00
Rahul Ahuja
9babce582d Fix track data enumeration idx 2019-09-01 21:24:56 -07:00
Rahul Ahuja
2ab883a20e Fix track.index assignment 2019-09-01 21:23:16 -07:00
Rahul Ahuja
70264ee6ee Handle empty deezer_id upfront 2019-09-01 21:18:08 -07:00
Rahul Ahuja
cd1aa3e8aa Avoid empty deezer_id string 2019-09-01 20:10:34 -07:00
Rahul Ahuja
43f09296c9 Fix AlbumInfo.album_credit assignment 2019-09-01 19:50:55 -07:00
Rahul Ahuja
2177c7695a Stringify Deezer ID 2019-09-01 19:44:27 -07:00
Rahul Ahuja
790ca805d5 Formatting 2019-09-01 18:34:06 -07:00
Rahul Ahuja
2cf55ee893 Add deezer.rst doc, remove unused options 2019-09-01 18:33:27 -07:00
Rahul Ahuja
804397bb12 Appease flake8 2019-09-01 18:13:19 -07:00
Rahul Ahuja
6e5e8a9cb0 Add Deezer plugin 2019-09-01 17:53:56 -07:00
Vexatos
7aab50b7b8
convert: Reduce amount of duplicate code for linking.
Also slightly reworded documentation.
2019-08-21 12:19:47 +02:00
Vexatos
aeb7d8846e
convert: disable album-art embedding for linked files.
Fixed flag precedence of link and hardlink over their options.
Fixed formatting issue.
2019-08-20 16:40:02 +02:00
Vexatos
a61aa74061
convert: add option to hardlink instead of copying.
Overrides the --link option.

As proposed in #2324.
2019-08-20 16:07:01 +02:00
Kier Davis
4820cee35c
convert: add option to symlink instead of copying
As proposed in #2324.

Updated commit from #2326.

Co-authored-by: Vexatos <stuarzt@gmx.de>
2019-08-20 14:50:44 +02:00
Sebastian Pucilowski
a2ee8da8d6 Refactor magic values in discogs_client 2019-08-11 11:21:22 +10:00
Rahul Ahuja
7ec3632309 Fix year assignment with year-only release date 2019-08-03 19:07:56 -07:00
Samuel Nilsson
6e24669d61 Fix #3341 2019-08-03 22:51:40 +02:00
Guilherme Danno
4908028985
Use the 'resource_url' from discogs_client 2019-07-30 16:46:59 -03:00
Samuel Nilsson
60c174101f ffmpeg replaygain backend: Only calculate replaygain for audio stream. Fixed documentation for backend option. 2019-07-29 10:32:19 +02:00
Zsin Skri
e3645dfd59
Merge branch 'master' into r128-targetlevel-config 2019-07-25 23:22:32 +02:00
Zsin Skri
a9f70f8151 apply suggested improvements
Apply improvements suggested in GitHub PullRequest #3065:
- be idiomatic
  - 0 is falsy
  - check enum equality, not identity
  - mutate list by constructing a new one
- improve documentation
  - fix a typo
  - do not mention deprecation of a config option
2019-07-26 01:02:03 +02:00
Adrian Sampson
84032e56e2 Merge pull request #3334 from MartyLake/martylake_add_forward_slash_option
Add option to force forward slashes in paths
2019-07-24 22:11:59 -04:00
Paul Malcolm
5f9a394ca9 Issue #2860 Fetch more acousticbrainz fields 2019-07-23 20:25:26 -04:00
MartyLake
076a82daa6 Review: Rename method 2019-07-24 00:09:52 +02:00
MartyLake
ee7f939336 Review: Remove stray blank line 2019-07-23 23:53:50 +02:00
MartyLake
aa1da3166f Review: Remove unnecessary parens 2019-07-23 23:53:17 +02:00
MartyLake
dd9de05968 Review: Remove unnecessary split of concat 2019-07-23 23:50:20 +02:00
MartyLake
da864402d5 Review: Remove unnecessary get 2019-07-23 23:49:17 +02:00
MartyLake
d1ba309f36 Add a new method that copied pathlib.path.as_posix 2019-07-23 17:17:40 +02:00
Zsin Skri
e7e2c424e7 replaygain: targetlevel and peak_method depends on tag format
Allow to configure the target level for R128_* tags separately from REPLAYGAIN_*
tags and skip peak calculation for R128_* tags if possible.
2019-07-22 13:42:22 +02:00
Zsin Skri
0c8eead459 replaygain: pass target_level and peak to backends
Configure the replaygain analysis by passing arguments to the Backends. This
avoids the difference between ReplayGain and EBU r128 backends; every Backend
can now fulfil both tasks. Additionally it eases Backend development as the
difference between the two tag formats is now completely handled in the main
Plugin, not in the Backends.
2019-07-22 12:58:54 +02:00
Zsin Skri
e5f2fe6fd3 avoid test failure
Use the POSIX character class instead of `\s` to match all whitespace in a
regular expression describing the language of valid inputs, in order to avoid a
test failure for the invalid escape sequence `\s` in Python strings.
2019-07-21 01:28:16 +02:00
Zsin Skri
f9ff56f496 improve wording in the ffmpeg replaygain backend
This commit mostly addresses feedback:
- remove some unused parenthesis
- fix a typo
- expand some docstrings
- document that ffmpeg is usually easy to install
2019-07-21 01:18:49 +02:00
Zsin Skri
271a3c980c replaygain: ffmpeg: increase parser readability
Use keyword arguments to make the ffmpeg parser more readable.
2019-07-19 21:54:47 +02:00
Zsin Skri
c3af5b3763 replaygain: add ffmpeg backend
Add replaygain backend using ffmpeg's ebur128 filter.

The album gain is calculated as the mean of all BS.1770 gating block powers.
Besides differences in gating block offset, this should be equivalent to a
BS.1770 analysis of a proper concatenation of all tracks.

Just calculating the mean of all track gains (as implemented by the bs1770gain
backend) yields incorrect results as that would:
- completely ignore track lengths
  - just using length in seconds won't work either (e.g. BS.1770 ignores
    passages below a threshold)
- take the mean of track loudness, not power

When using the ffmpeg replaygain backend to create R128_*_GAIN tags, the
targetlevel will be set to -23 LUFS. GitHub PullRequest #3065 will make this
configurable.
It will also skip peak calculation, as there is no R128_*_PEAK tag.

It is checked if the libavfilter library supports replaygain calculation. Before
version 6.67.100 that did require the `--enable-libebur128` compile-time-option,
after that the ebur128 library is included in libavfilter itself. Thus we
require either a recent enough libavfilter version or the `--enable-libebur128`
option.
2019-07-19 21:54:47 +02:00
Zsin Skri
7a7314ee3f Allow other ReplayGain backends to support R128.
Previously using EBU R128 forced the use of the bs1770gain backend.
This change adds a whitelist of backends supporting R128. When the configured
backend is in that list it will also be used for R128 calculations. Otherwise
bs1770gain is still used as a default.

This should not change the overall behaviour of the program at all, but allow
for further R128-supporting backends to be added.
2019-07-19 21:54:47 +02:00
Zsin Skri
30395911e2 util.command_output: return stderr, too
Return a namedtuple CommandOutput(stdout, stderr) instead of just stdout from
util.command_ouput, allowing separate access to stdout and stderr.

This change is required by the ffmpeg replaygain backend (GitHub
PullRequest #3056) as ffmpeg's ebur128 filter outputs only to stderr.
2019-07-14 18:32:59 +02:00
Adrian Sampson
e39341b282 Merge pull request #3322 from thedevilisinthedetails/master
465 discogs: Fetch a few more metadata fields
2019-07-01 17:22:50 -04:00
Peter
0cd46dab77 fixing per review comments 2019-07-01 21:04:35 +02:00
Peter
dd7e932a9a removing print log 2019-06-30 14:34:13 +02:00
Peter
e196c1dae6 fixing test 2019-06-30 13:54:38 +02:00
Peter
510276f653 fixing test 2019-06-30 13:44:13 +02:00
Adrian Sampson
73f8edd116 Simplify force check (#3318) 2019-06-27 22:44:57 -04:00
Adrian Sampson
0726123e41 Move PROBE_FIELD to module scope (#3318) 2019-06-27 22:43:18 -04:00
Susanna Maria
b20516e552 Small improvement of code doc 2019-06-26 20:29:17 +02:00
Susanna Maria
cab97c58d4 Pep8 drives me sometimes crazy 2019-06-25 20:57:43 +02:00
Susanna Maria
932d18a838 Pep8 error ... 2019-06-25 20:37:12 +02:00
Susanna Maria
f254b33c6e Findings from PR 2019-06-25 20:22:26 +02:00
Susanna Maria
6e179d86e6 Pep8 bugfix 2019-06-23 17:43:40 +02:00
Susanna Maria
0242176b40 Why binary import of json? 2019-06-23 16:59:33 +02:00
Susanna Maria
1643eea3f5 Parameter handling 2019-06-23 13:04:17 +02:00
Zsin Skri
f645400c5e replaygain: adapt to mediafile commit 95e569a
Since commit 95e569a, mediafile takes care of the float -> Q7.8 conversion in
R128 GAIN tags by itself.

From `store_album_r128_gain` this conversion was already missing, remove it from
`store_track_r128_gain`, too.

fixes #3311
2019-06-18 23:17:38 +02:00
Peter
90cf579ee3 adding genre, released_date and discogs_release_id 2019-06-16 21:55:35 +02:00
Adrian Sampson
7dd0ed77f9 Merge pull request #3302 from Holzhaus/fix-3301
beetsplug/importadded: Add missing path kwarg to update_after_write_time()
2019-06-11 11:50:36 -04:00
Adrian Sampson
ed30a7aed2 Merge pull request #3251 from thedevilisinthedetails/master
#2579 Adding styles to discogs plugin
2019-06-10 13:26:09 -04:00
Peter
7ec1fc934b removing unneeded condition 2019-06-10 15:54:19 +02:00
Peter
9bdadc5c73 removing extra line 2019-06-10 09:33:10 +02:00
Peter
55e003a3d4 fixing per review comments 2019-06-10 09:11:38 +02:00
Peter
f0c91b8f45 fixing per review comments 2019-06-09 20:01:55 +02:00
Peter
2c49c12166 fixing per review comments 2019-06-09 15:44:37 +02:00
Peter
5fc21a1e21 fixing per review comments 2019-06-09 15:39:49 +02:00
Peter
851c413976 adding config option for seperator and addressing review comments 2019-06-09 10:37:33 +02:00
Adrian Sampson
9fcb66b3c8 Nicer string wrap 2019-06-08 21:35:56 -04:00
Adrian Sampson
c2fdf04539 Merge pull request #3279 from dosoe/beets_parentwork_3
add parentwork plugin
2019-06-08 21:35:05 -04:00
Dorian Soergel
9d184e3cad docstrings and style 2019-06-08 22:58:05 +02:00
Dorian Soergel
fd14b5b649 docstrings and style 2019-06-08 22:55:05 +02:00
Dorian Soergel
c96dcfffb6 docstrings and style 2019-06-08 22:44:33 +02:00
Adrian Sampson
f865fc00cd replaygain: Fix py3 crash in audiotools backend
Fixes #3305.
2019-06-08 16:23:49 -04:00
Samuel Nilsson
b8b99d9396 Merge branch 'master' into replaygain 2019-06-08 16:15:27 +02:00
Dorian Soergel
070f50e1e7 docstring 2019-06-07 17:16:03 +02:00
Dorian Soergel
eacdb0d0e4 refetching works moved to new PR 2019-06-07 17:15:04 +02:00
Dorian Soergel
9c3c538dfb alternative way to refetch parent works 2019-06-07 16:51:33 +02:00
Dorian Soergel
765f7dc12d first try to implement event handler 2019-06-07 14:57:38 +02:00
Jan Holthuis
2b00e1de24 beetsplug/importadded: Add missing path kwarg to update_after_write_time()
This resolves #3301.
2019-06-07 14:17:39 +02:00
FichteFoll
728203e15a
beets.io now supports HTTPS
See https://github.com/beetbox/beets/pull/3297.
2019-06-06 15:34:15 +02:00
FichteFoll
9631616b53
Replace a couple URLs that don't point to anything
I'm unsure regarding the pygst tutorial, so I just added another URL
of the best resource I could find with a quick web search.
2019-06-05 23:08:18 +02:00
FichteFoll
c144141e9a
Update a few more http URLs to https that I missed
Should really be all now (pending the next commit).
2019-06-05 23:07:11 +02:00
FichteFoll
1a23eab8b6
Use https for lyrics.wikia.com, when supported 2019-06-05 23:00:52 +02:00
FichteFoll
670046dd9a
Build https URLS for beatport releases
I'm not sure where these are used, but the website supports https and
the API url already uses https, so this should be a safe call and not
require a util.SNI_SUPPORTED check.
2019-06-05 22:55:12 +02:00
Dorian Soergel
1d9e42567b flake8 2019-06-05 13:40:04 +02:00
Dorian Soergel
fae0656935 still dealing with cases where no parent composer 2019-06-05 13:39:13 +02:00
Dorian Soergel
8363dedaeb logging and minor comments 2019-06-05 11:10:11 +02:00
FichteFoll
aa31fea037
Update a lot of URLs to use HTTPS
*All* URLs were checked manually, but only once per domain!

I mostly concerned myself with URLs in documentation rather than source
code because the latter may or may not have impactful changes, while the
former should be straight forward.

Changes in addition to simply adding an s:

- changed pip and pypi references as their location has changed
- MPoD (iOS app) url redirects to Regelian, so I replaced those
- updated homebrew references

Notable observations:

- beets.io does have HTTPS set up properly (via gh-pages)
- beatport.py uses the old HTTP url for beatport
- as does lyrics.py for lyrics.wikia.com
- https://tomahawk-player.org/ expired long ago, but the http page
  redirects to https regardless
- none of the sourceforge subdomains have https (in 2019!)
2019-06-05 03:11:49 +02:00
FichteFoll
e17c478f74 Cache an item's album with a property
Use Album.load() whenever the album is requested, which causes it to be
reloaded from the database.

Drawback: This adds a slowdown of 100% (6.2s to 12.6s) to `beet list`
on my setup.
2019-06-05 02:39:56 +02:00
Dorian Soergel
92d005ab30 renaming functions 2019-06-03 20:05:34 +02:00
Dorian Soergel
1177222c6f flake8 2019-06-03 17:45:57 +02:00
Dorian Soergel
369629bea5 clarifying docstrings 2019-06-03 17:20:36 +02:00
Dorian Soergel
feafc66f96 fixing parentwork but no parent composer 2019-06-03 16:58:07 +02:00
Carl Suster
62aa358ce7 bpd: bump protocol version to 0.16 2019-06-02 23:37:07 +10:00
Carl Suster
d8be83bc0d bpd: support ranges in playlistid 2019-06-02 23:37:07 +10:00
Carl Suster
dc7e3b9b6a bpd: support nextsong in status 2019-06-02 23:37:07 +10:00
Carl Suster
fdd809fd36 bpd: support more tagtypes 2019-06-02 23:37:07 +10:00
Carl Suster
cc2c35221d bpd: avoid sending playlist events on navigation 2019-06-02 23:37:07 +10:00
Carl Suster
5187100294 bpd: accept all idle events 2019-06-02 23:37:07 +10:00
Carl Suster
27c462d287 bpd: make noidle a no-op outside idle mode
The real MPD ignores `noidle` when the client is not idle. It doesn't
even send a successful response, just ignores the command. Although
I don't understand why a client would fail to keep track of its own
state, it seems that this is necessary to get ncmpcpp working.
2019-06-02 23:37:07 +10:00
Carl Suster
e708d28f85 bpd: allow fractional seconds in seek
The documented type is float, not integer, and clients like mpDris2 send
fractional seconds, causing them to crash if these values ar enot
accepted.
2019-06-02 23:37:07 +10:00
Carl Suster
1a5263b68f bpd: support volume command for real 2019-06-02 23:37:07 +10:00
Carl Suster
59c506990a bpd: fix bug in playlistid
The playlistid command is supposed to list the whole playlist if no
argument is provided, but we were accidentally trying to look up an
impossible negative id in that case causing an error to always be
returned.
2019-06-02 23:37:07 +10:00
Carl Suster
64ed54330b bpd: mention control socket address in log 2019-06-02 23:37:07 +10:00
Adrian Sampson
81b1faa053 inline: Fix a ridiculously subtle flexattr bug
As detailed here:
https://github.com/beetbox/beets/issues/2406#issuecomment-274423601

In a *function-style* definition, we didn't properly *un-define* the
values for a given item after each function invocation. So when a field
wasn't defined, it would get the value for the previously-formatted
object instead. It now properly throws a NameError.
2019-06-01 12:28:47 -04:00
Carl Suster
6382c364e2 confit: replace with confuse in plugins 2019-06-01 10:03:41 +10:00
Dorian Soergel
a10ad548c9 logging if no parent composer 2019-05-31 20:54:15 +02:00
Dorian Soergel
e6da3e1498 move _command into command 2019-05-31 18:28:53 +02:00
Dorian Soergel
acf447b4b0 adapt tests, correct docstrings 2019-05-31 17:52:39 +02:00
Dorian Soergel
638e9d5dc8 style changes, docstrings 2019-05-31 17:17:06 +02:00
Dorian Soergel
6d6c1a1647 fixes for disambiguation 2019-05-31 15:04:00 +02:00
Dorian Soergel
080680c950 add parentwork plugin, first try 2019-05-31 14:35:51 +02:00
Carl Suster
546bf3af7e mediafile: import from standalone module 2019-05-29 09:35:14 +10:00
Adrian Sampson
d77a13eb34 gmusic: Fix compatibility with gmusicapi>=12.0.0
Fixes #3270.
2019-05-18 16:32:56 -04:00
Adrian Sampson
d6dc1b7c4e gmusic: Use as_filename for oauth_file (#3270) 2019-05-18 16:27:13 -04:00
Peter
6ffbd5af45 adding styles to hook and returning Style not Defined if no style set 2019-05-05 11:44:24 +02:00
Peter Koondial
8fcff5ddc7 Adding styles to discogs plugin 2019-05-05 11:11:27 +02:00
Jack Wilsdon
f09088df43
replaygain: Handle invalid XML output from bs1770gain 2019-05-02 01:24:19 +01:00
Rainer Hihn
62c1d37bcc Formatting 2019-04-27 17:58:48 +02:00
Rainer Hihn
941dd6e48f Formatting 2019-04-27 17:58:26 +02:00
Rainer Hihn
36dc105dc9 undid quotes in log messages 2019-04-27 17:57:48 +02:00
Rainer Hihn
55fe077e54 Removed PaddedFloat in favour of adding a constructor parameter 2019-04-24 20:39:05 +02:00
Rainer Hihn
07b617b307 Converted all float types to PaddedFloat 2019-04-24 19:55:44 +02:00
Rainer Hihn
7676d2ae5a PaddingInt -> PaddingFloat 2019-04-24 19:54:12 +02:00
Rainer Hihn
3f3b102885 added PaddingFloat 2019-04-24 19:53:01 +02:00
Rainer Hihn
76e333c054 Added item_types 2019-04-23 19:20:55 +02:00
Rainer Hihn
a60935ed1c Prevent scientific notation 2019-04-22 19:50:11 +02:00
Adrian Sampson
5f9b28124d Merge pull request #3220 from rain0r/3219
Update __init__.py
2019-04-21 20:39:46 -04:00
Rainer Hihn
b7d3ef6274 - Improved doc and changelog
- Cleaner implementation of mutual excursion of the command line
arguments.
2019-04-21 18:32:41 +02:00
Jack Wilsdon
f5f9aed641
Add loadext plugin 2019-04-21 15:10:28 +01:00
Carl Suster
063e4f259b
Merge pull request #3222 from arcresu/bpd-decoders
bpd: support decoders command
2019-04-21 09:20:42 +10:00
Adrian Sampson
1edd21fab1
Merge pull request #3223 from arcresu/mpd-port
mpdupdate, mpdstats: use MPD_PORT env variable
2019-04-20 14:21:20 -04:00
Louis Sautier
4d98088cc1
Replace more instances of unsafe calls to yaml.load 2019-04-20 01:14:15 +02:00
Rainer Hihn
ddd7b4b3b4 Removed empty line 2019-04-19 21:17:15 +02:00
Rainer Hihn
5c643a8f16 Removed ipdb import 2019-04-19 21:08:26 +02:00
Rainer Hihn
e4b2e7b476 Made -a and -A mutually exclusive. 2019-04-19 20:58:13 +02:00
Carl Suster
21cba304bd mpdupdate: use MPD_PORT env variable 2019-04-19 17:35:42 +10:00
Carl Suster
dc5f110844 mpdstats: use MPD_PORT env variable 2019-04-19 17:35:42 +10:00
Carl Suster
3da23167ca bpd: support decoders command
This uses GStreamer APIs to extract a list of audio decoders and the
relevant MIME types and file extensions. Some clients like ncmpcpp use
this command to fetch a list of supported file extensions.
2019-04-19 16:08:05 +10:00
Rainer Hihn
0b2334f8e8 Added command line options to query explicit for albums and / or tracks. 2019-04-18 22:31:49 +02:00
rain0r
fc95fb86a1
Update __init__.py
Also fetch genres for single tracks via query.
2019-04-17 20:57:58 +02:00
Carl Suster
9182f18e6f bpd: support short form of list command for albums
Some clients list the albums belonging to an artist by issuing the
command `list album <ARTIST NAME>`. This change inserts the tag `artist`
before the artist name so that this succeeds. Fixes #3007
2019-04-15 13:25:02 +10:00
Carl Suster
826244777e bpd: minor control socket refactor 2019-04-10 15:52:47 +10:00
Carl Suster
d55f061f0b bpd: add control socket
A new `ControlConnection` is created each time a client connects over
a new control socket. This is used to forward events from the player,
and also for debugging utilities that are not part of the real MPD
protocol.

This new feature reuses as much infrastructure from the normal protocol
handling as possible (e.g. `Command` for parsing messages). While the
normal connection delegates to server `cmd_*` methods which are string
generators, the control connections delegate to `ctrl_*` methods defined
on the connection itself that are full coroutines.
2019-04-09 12:19:15 +10:00
Carl Suster
fa3813844c bpd: reimplement idle without polling 2019-04-08 16:33:34 +10:00
Carl Suster
6fbf3853f2 bpd: bump protocol version to 0.14.0 2019-04-08 11:40:24 +10:00
Carl Suster
699de94f4f bpd: send all relevant idle events 2019-04-08 11:40:24 +10:00
Carl Suster
7105c800aa bpd: implement the idle command
Getting this command puts the connection into a special mode where it
awaits MPD events (like the player changing state or the playlist
changing due to other clients interacting with the server.

The MPD specification states that events should queue while a client is
connected, and when it issues the `idle` command any matching events
should be sent immediately if there are any, or as soon as they happen
otherwise.
2019-04-08 11:40:24 +10:00
Carl Suster
ee0c31ba6a bpd: track and log client session details
Keep track of a list of currently-connected clients.

Use `socket.getpeername()` to get an identifier for each connection and
include this in each log message. This function is documented as not
being available on all systems, but it's unclear which systems this
involves.

Also log a message on client connect and disconnect events. If the
disconnection reason is because the client sent a blank line, match MPD
by returning a protocol error then hanging up. Escape curly braces.
2019-04-08 11:28:56 +10:00
Carl Suster
5b0a02eb31 bpd: don't send volume if zero in status 2019-04-08 10:52:15 +10:00
Carl Suster
f8a2c22e8d bpd: fix typo in comment 2019-04-08 10:52:15 +10:00
Adrian Sampson
362722c87c
Merge pull request #3206 from arcresu/random-util
random: move functionality into beets.random
2019-04-07 11:59:39 -04:00
Carl Suster
9147fabb97 random: beets.util.random -> beets.random 2019-04-07 18:46:11 +10:00
gdtwst
c41197cc5c Re-add fixes from #2707 2019-04-07 10:07:38 +07:00
Adrian Sampson
ebed21f319 Merge pull request #3207 from arcresu/mpd-currentsong
mpdstats: use currentsong instead of playlist
2019-04-06 13:51:18 -04:00
Adrian Sampson
63b7ede4f7 Merge pull request #3054 from discopatrick/2704-lastgenre-force
WIP: Remove `default` arg for `lastgenre --force` flag
2019-04-06 13:49:07 -04:00
Rainer Unseld
ce5981b885 mpdstats: use currentsong instead of playlist
Improved the method to get the path of the current song. Before, the complete playlist was fetched from the server. Now, the command "currentsong" is used for this purpose. This improves performance when a huge playlist is active.
2019-04-06 15:23:34 +11:00
Carl Suster
f35944f49c random: move implementation to beets.util.random 2019-04-06 11:06:19 +11:00
Carl Suster
95dd513b25 bpd: add flake8 exception for test command 2019-04-02 14:25:56 +11:00
Carl Suster
20e2f8beec bpd: output an info-level message when ready 2019-04-02 13:38:43 +11:00
Carl Suster
d074dac771 bpd: add comments to the error handling code 2019-04-02 13:37:40 +11:00
Carl Suster
28db7d3d33 bpd: provide precision time in status 2019-04-02 11:15:00 +11:00
Carl Suster
4be2e1b5e6 Remove beets.util.inspect wrapper 2019-04-02 10:22:47 +11:00
Carl Suster
36c85a8aeb Fix beets.util.inspect for Python 3
Under the original compatibility shim we weren't correctly inclusing
`self` in the argument list for bound methods.
2019-04-02 10:11:43 +11:00
Carl Suster
9622e7433b bpd: return real audio data 2019-04-02 09:44:34 +11:00
Carl Suster
e839e4ea19 bpd: improve exception handling
Check function signature instead of using TypeError to crudely guess
that the wrong number of arguments were provided.

Prevent bpd from crashing when trying to log a traceback. The
`traceback.format_exc` function takes an optional argument which is
supposed to be an integer restricting the length of the backtrace to
show. Instead we were passing the exception object to this function and
causing a new exception to be raised.
2019-04-02 09:39:07 +11:00
Carl Suster
146c5f5e13 bpd: fix repeat, consume and single in reverse
These flags are all relevant to the 'previous' command as well as the
'next' command.
2019-04-01 18:05:10 +11:00
Carl Suster
12e49b3c88 bpd: skipping backwards through zero keeps playing
Previously issuing the 'previous' command when at position 0 on the
playlist would cause bpd to stop playing. MPD instead just restarts the
currently playing song instead, so we now match this behaviour.
2019-04-01 17:51:21 +11:00
Carl Suster
a4fe6875a1 bpd: fix bug in bounds check of current song index
The songs are indexed starting from zero for the play command, however
the bound check was off by one. An index matching the length of the
playlist would crash the server instead of responding with an error
message over the protocol.
2019-04-01 17:41:25 +11:00
Carl Suster
0c3a63ef9f bpd: fix repeat mode behaviour
The repeat flag indicates that the entire playlist should be repeated.
If both the repeat and single flags are set then this triggers the old
behaviour of looping over a single track.
2019-04-01 17:39:35 +11:00
Carl Suster
b245c0e755 bpd: test fields returned by status command 2019-04-01 16:42:39 +11:00
Carl Suster
bae9c40600 bpd: support the single command
This command instructs bpd to stop playing when the current song
finishes. In the MPD 0.20 protocol this flag gains a value 'oneshot' but
for now we just support its older version with a boolean value.
2019-04-01 16:30:02 +11:00
Carl Suster
71e7621642 bpd: no-op support for persistent playlists
The real MPD offers persistent playlist manipulation, storing the
playlists in a directory set in the config file. If that directory is
not available then the feature is disabled and the relevant commands all
respond with errors. Based on this, the initial support in bpd just
returns errors matching the MPD server in the disabled mode.

For playlistadd, extend the _bpd_add helper to work with playlists other
than the queue in order to support testing the real implementations of
these commands in the future.
2019-04-01 16:30:02 +11:00
Carl Suster
859e16d1e3 bpd: support consume command 2019-04-01 16:30:02 +11:00
Carl Suster
e5851866d7 bpd: add replay_gain_* commands
There's a special status command for checking the replay gain mode,
which can be set to one of a short list of possible values. For now at
least we can ignore this feature, but track the setting anyway.
2019-04-01 14:49:27 +11:00
Carl Suster
67a0b38d20 bpd: add dummy command for volume
MPD supports a deprecated command 'volume' which was used to change the
volume by a relative amount unlike its replacement 'setvol' which uses
an absolute amount. As far as I can tell 'volume' always responds with a system
error message "No mixer".
2019-04-01 14:49:27 +11:00
Carl Suster
1511e313f7 bpd: add mixramp commands
These are a more sophisticated version of crossfade so we're free to
ignore them, at least for now. We now track the values of the two
settings, and show them in the status output. Like MPD, we suppress the
mixrampdb value if it's set to nan, which is how it signals that the
feature should be turned off.
2019-04-01 14:49:27 +11:00
Carl Suster
0f53ae9a87 bpd: error instead of crashing on extra argument
If an MPC client is expecting a command to take an argument that bpd
isn't expecting (e.g. because of a difference in protocol versions) then
bpd currently crashes completely. Instead, do what the real MPD does and
return an error message over the protocol.
2019-04-01 14:49:27 +11:00
Carl Suster
d94a5393b2 bpd: fix crossfade command
Although crossfade is not implemented in bpd, we can store the setting
and repeat is back to clients. Also log a warning that the operation is
not implemented.

The real MPD doesn't show the crossfade in status if it's zero since
that means no crossfade, so now we don't either.
2019-04-01 14:49:27 +11:00
Adrian Sampson
c74a7059b4 Merge pull request #3192 from translit/yaml-safe-load
Fix PyYAML yaml.load(input) Deprecation
2019-03-31 21:46:29 -04:00
Adrian Sampson
0208ec69ef Merge pull request #3197 from arcresu/deprecation
Fix several deprecation warnings
2019-03-31 21:44:37 -04:00
Adrian Sampson
0042f3205e Merge pull request #3196 from arcresu/bpd-log
bpd: use plugin logger instead of global logger
2019-03-31 21:41:22 -04:00
Carl Suster
b4c4f3ca19 bpd: use plugin logger instead of global logger 2019-03-31 22:06:43 +11:00
Carl Suster
a6305c36e1 Fix deprecated plistlib function
https://docs.python.org/3.7/library/plistlib.html#plistlib.readPlist
2019-03-31 19:53:17 +11:00
Carl Suster
e4c03fd63f Fix deprecated placement of inline regex flags
https://bugs.python.org/issue22493
2019-03-31 19:44:49 +11:00
Carl Suster
ca60555ffa Fix deprecated call log.warn -> log.warning
https://bugs.python.org/issue13235
2019-03-31 19:44:40 +11:00
Carl Suster
7557bb06d6 bpd: use log instead of stdout 2019-03-31 18:43:18 +11:00
Carl Suster
0b4293de6e
the: log a debug only when text is changed
Previously the `the` plugin would log a debug message when the text _didn't_ get changed by the plugin, whereas I think what was intended was the opposite. With this change the logged messages show the actual transformations made by the plugin.
2019-03-31 18:19:09 +11:00
Alexei Datskevich
be12a89372 Fix PyYAML yaml.load(input) Deprecation 2019-03-30 08:34:13 +01:00
Adrian Sampson
6ee824fb0f Fix #3184: AttributeError in error handler 2019-03-14 09:53:32 -04:00
Jack Wilsdon
9bb6c29d22
Always use custom formatter for formatting hook commands 2019-02-25 14:41:59 +00:00
Adrian Sampson
80f4f0a0f2 badfiles: Fix decoding for command output
Probably fixes #3165. There were several things going wrong here:

1. For some reason, this was using the *filesystem* encoding, which is
   what you use to decode filenames. But this was general command
   output, not filenames.
2. Errors in decoding threw exceptions, even though all we do with this
   output is show it to the user.
3. The prints were using `displayable_path`, even though the lines are
   *already* Unicode strings.

Hopefully this cleans up that mess.
2019-02-24 16:06:36 -05:00
Jan Holthuis
3e10d5d39f badfiles: Fix #3158 by calling superclass __init__ method 2019-02-21 12:40:54 +01:00
Adrian Sampson
be118b922a
Merge pull request #3155 from Holzhaus/fetchart-error-handling
fetchart: Add some error handling to prevent crashes
2019-02-20 08:45:22 -05:00
Bernardo Meurer
9374983e9d
Fixed import order 2019-02-19 18:49:29 -08:00
Bernardo Meurer
e209fe5886
Parallelized beet bad 2019-02-19 18:47:47 -08:00
Jan Holthuis
c07903ed66 fetchart: Add some error handling to prevent crashes
Today I had some network problems regarding dbpedia.org, which made
beets crash because a requests.exceptions.ConnectionError was raised
("[Errno 113] No route to host"). This commits adds some error handling
around network requests to prevent further crashes in the future.
2019-02-19 16:16:56 +01:00
Bernardo Meurer
1dad5ded03
Move absubmit plugin parallelization to util.par_map 2019-02-18 22:42:20 -08:00
Adrian Sampson
81c5ae3fdf
Merge pull request #3151 from Holzhaus/playlist-plugin-additions
playlist: Add auto-update functionality and more tests
2019-02-18 08:40:55 -05:00
Jan Holthuis
4ba5dfaa43 playlist: Remove leftover print call and fix 'auto' option access style 2019-02-18 09:13:39 +01:00
Jan Holthuis
7bca5cf549 playlist: Don't use syspath() when checking if path is absolute 2019-02-17 22:28:39 +01:00
Jan Holthuis
ee2cce4280 playlist: Work around Windows' Mandatory File Locking on playlist updates 2019-02-17 22:12:13 +01:00
Jan Holthuis
d991e2a7d8 playlist: Normalize path before lookup in changes dict 2019-02-17 21:51:09 +01:00
Adrian Sampson
9320db21eb
Merge pull request #3150 from beetbox/named-query
Add support for "named queries" and use them in the playlist plugin
2019-02-17 15:08:31 -05:00
Adrian Sampson
55ef2ffd39 Add future imports to playlist plugin 2019-02-17 14:02:26 -05:00
Adrian Sampson
7efc67eb03 playlist: Use new "named query" functionality 2019-02-17 13:52:00 -05:00
Jan Holthuis
6d42028057 playlist: Add playlist auto-update functionality 2019-02-17 19:38:21 +01:00
Adrian Sampson
00667bda0f Merge pull request #3145 from Holzhaus/playlist-plugin
Playlist plugin
2019-02-17 13:16:26 -05:00
Jan Holthuis
4f1a468aa9 playlist: Restore case sensitivity in col_clause method 2019-02-17 17:34:36 +01:00
Jan Holthuis
055f2d3702 playlist: Also catch IOErrors to restore Python 2.7 compatiblity 2019-02-17 16:00:04 +01:00
Jan Holthuis
f9f2fa0e26 playlist: Restructure playlist reading code and add error handling 2019-02-17 15:17:10 +01:00
Jan Holthuis
19b92e1199 playlist: Improve speed in PlaylistQuery class
Implement the col_clause method for faster, sqlite-based querying. This
will only make a difference if the "fast" kwarg is set to True.
2019-02-17 14:38:36 +01:00
Jan Holthuis
a80a07f093 playlist: Add playlist plugin
Adds M3U playlist support as a query to beets and thus partially
resolves issue #123. The implementation is heavily based on #2380 by
Robin McCorkell.

It supports referencing playlists by absolute path:

    $ beet ls playlist:/path/to/someplaylist.m3u

It also supports referencing playlists by name. The playlist is then
seached in the playlist_dir and the ".m3u" extension is appended to the
name:

    $ beet ls playlist:anotherplaylist

The configuration for the plugin looks like this:

    playlist:
        relative_to: library
        playlist_dir: /path/to/playlists

The relative_to option specifies how relative paths in playlists are
handled. By default, paths are relative to the "library" directory. It
also possible to make them relative to the "playlist" or set the option
or set it to a fixed path.
2019-02-17 14:38:36 +01:00
Adrian Sampson
69fbba1eed
Merge pull request #3144 from Holzhaus/add-id3v23-to-convert
Add id3v23 option to convert plugin
2019-02-15 09:51:46 -07:00
Jan Holthuis
7afeb9b2ac convert: Add id3v23 config option to convert plugin 2019-02-14 23:42:36 +01:00
Adrian Sampson
f54042f194 Make a comment into a full sentence 2019-02-08 18:18:30 -08:00
jan
5ace667757 add forgotten request_finished 2019-02-08 01:09:07 +01:00
jan
9bc3898951 add request_finished function, rename wait_for_rate_limiter to request_start, add doc and changelog 2019-02-08 01:02:33 +01:00
jan
77fd5ee548 keep discogs requests below rate limit 2019-02-08 00:05:07 +01:00
Samuel Nilsson
93007bfdd5 ReplayGain: fixed error caused by per_disc option 2019-02-06 13:17:34 +01:00
Samuel Nilsson
24f02cb5cd ReplayGain refactoring 2019-02-06 10:12:06 +01:00
Samuel Nilsson
31326ebb20 Simplified album ReplayGain code 2019-02-06 10:06:48 +01:00
Samuel Nilsson
d910ed3ecf Merge branch 'master' of github.com:beetbox/beets into replaygain 2019-02-06 09:27:45 +01:00
Samuel Nilsson
3d842db8d8 Added per disc album_gain support 2019-02-06 09:27:24 +01:00
Adrian Sampson
c7c90a51c6
Merge pull request #3135 from wildthyme/master
Support ipfs add --nocopy in ipfs plugin
2019-02-01 10:04:00 -05:00
Jack Wilsdon
2bc04bb605
Use "==" when comparing strings 2019-01-31 00:15:55 +00:00
Jack Wilsdon
768770d561
Fix incorrect indentation 2019-01-31 00:15:42 +00:00
Iris Wildthyme
2b82831b7b added --nocopy support 2019-01-30 16:36:46 -05:00
Rahul Ahuja
5fbb28637d Set Spotify AlbumInfo.mediums 2019-01-23 19:54:14 -08:00
Rahul Ahuja
6a9b62a9c2 Specify None rtype in doscstrings 2019-01-22 20:54:46 -08:00
Rahul Ahuja
8c6cc6573c Unidecode query string 2019-01-22 19:42:25 -08:00
Rahul Ahuja
b91406b252 Backwords-compatible str/unicode 2019-01-22 18:59:15 -08:00
Rahul Ahuja
c6b8f6d143 Fix formatting/spelling 2019-01-22 18:09:10 -08:00
Rahul Ahuja
f7d20090e6 Fix _handle_response reauth bug and empty str query construction 2019-01-22 12:14:52 -08:00
Rahul Ahuja
7b57b0b608 Appease Flake8 2019-01-22 10:53:18 -08:00
Rahul Ahuja
3a67eae46d Use track attrs directly, better naming/docstrings 2019-01-22 10:41:18 -08:00
Rahul Ahuja
09fc53eaea Only parse Spotify ID when necessary 2019-01-21 23:53:19 -08:00
Rahul Ahuja
96fda0df0d Docstring formatting 2019-01-21 23:36:51 -08:00
Rahul Ahuja
77f9a930b7 Fix remaining test, use official doc wording 2019-01-21 23:15:08 -08:00
Rahul Ahuja
0527edbd48 Fix test index, add docstrings 2019-01-21 23:05:47 -08:00
Rahul Ahuja
f63beca39a Switch filter ordering in test 2019-01-21 22:35:12 -08:00
Rahul Ahuja
48401c60dc Switch query filter ordering for tests 2019-01-21 22:27:31 -08:00
Rahul Ahuja
42e852cc7e Clarify _search_spotify return type 2019-01-21 22:12:56 -08:00
Rahul Ahuja
aa18f9116d Refine doc wording 2019-01-21 22:01:30 -08:00
Rahul Ahuja
265fcc7cea utilize track_for_id in item_candidates 2019-01-21 21:45:50 -08:00
Rahul Ahuja
5472a49991 Add candidates and item_candidates, modularize Search API queries 2019-01-21 21:24:41 -08:00
Rahul Ahuja
dab62f2194 inline auth_header property 2019-01-21 09:23:38 -08:00
Rahul Ahuja
b50e148bec use official client ID/secret, remove usage from docs 2019-01-21 08:32:57 -08:00
Rahul Ahuja
cb8b0874d4 naming 2019-01-21 01:56:57 -08:00
Rahul Ahuja
415b21cbc1 fix var reference, add docstring 2019-01-21 01:30:37 -08:00
Rahul Ahuja
844b940832 capture TrackInfo.medium_total 2019-01-20 15:32:07 -08:00
Rahul Ahuja
dbf17f760e add TrackInfo.medium 2019-01-20 15:09:51 -08:00
Rahul Ahuja
78a46fd4d0 doc typo 2019-01-20 15:02:19 -08:00
Rahul Ahuja
b4d54b0950 set TrackInfo.index in track_for_id 2019-01-20 15:00:32 -08:00
Rahul Ahuja
082357b063 document new functionality, use Spotify ID for AlbumInfo.album_id 2019-01-20 12:40:11 -08:00
Rahul Ahuja
287c767a6d fix formatting 2019-01-20 11:24:33 -08:00
Rahul Ahuja
695dbfaf80 copy album_distance, track_distance from Beatport plugin 2019-01-20 03:20:18 -08:00
Rahul Ahuja
bb1ed67e2d use open.spotify.com URL for data_url 2019-01-20 02:43:54 -08:00
Rahul Ahuja
02aa79ae61 add more docstrings 2019-01-20 02:28:59 -08:00
Rahul Ahuja
b95eaa8ffe fix test, document Spotify ID 2019-01-20 02:20:10 -08:00
Rahul Ahuja
9a30000b56 better naming, formatting 2019-01-20 02:04:46 -08:00
Rahul Ahuja
60c9201e4a modularize Spotify ID parsing 2019-01-20 01:54:08 -08:00
Rahul Ahuja
91b2e33569 support album autotagging 2019-01-20 01:33:19 -08:00
Rahul Ahuja
e95b8a6ee0 add docstrings, separate TrackInfo generation 2019-01-20 00:41:14 -08:00
Rahul Ahuja
3309c555ed better naming, documentation 2019-01-20 00:05:56 -08:00
Rahul Ahuja
104f6185ab revert unnecessary double --> single quotes 2019-01-19 23:57:36 -08:00
Rahul Ahuja
337cf2a1c3 appease Flake8 2019-01-19 23:35:06 -08:00
Rahul Ahuja
dc77943da2 try oauth token mock 2019-01-19 23:21:02 -08:00
Rahul Ahuja
e6c8f79a07 resolve python2/3 bytes/str incompatibilities, simplify authentication 2019-01-19 22:55:40 -08:00
Rahul Ahuja
c1cb7a2941 address py3 compatibility later 2019-01-19 19:29:35 -08:00
Rahul Ahuja
8bdd927d20 try b64 encode/decode 2019-01-19 19:17:34 -08:00
Rahul Ahuja
160d66d05c b64encode with bytes 2019-01-19 19:04:15 -08:00
Rahul Ahuja
3639971391 remove unused import 2019-01-19 18:48:46 -08:00
Rahul Ahuja
1a9f20edfe unregister import_begin listener 2019-01-19 18:42:29 -08:00
Rahul Ahuja
82319734cb black -S -l 79 autoformat 2019-01-19 18:32:41 -08:00
Rahul Ahuja
204a1453c4 Update spotify.py 2019-01-19 18:06:17 -08:00
Adrian Sampson
8cfbc8274e
Merge pull request #3099 from regagain/fetchart_respect_ignore_settings
Fetchart respect ignore settings
2018-12-21 11:45:40 -05:00
Reg
2ea77652a7 Fetchart: Respect ignore and ignore_hidden settings when fetching art
from the local filesystem.
2018-12-20 18:44:46 +01:00
Reg
21145731e4 Fixed docstring typo. 2018-12-20 18:19:00 +01:00
Jan Holthuis
d2521d9256 Fix acoustid_fingerprint type confusion
Since pyacoustid returns the fingerprint as bytes (and thus causes the
database to store a bytes/BLOB object), but the tag value is a string,
the acoustid_fingerprint tag always causes file change when using beet's
"write" command, even if the actual value didn't change.

Issue #2942 describes the problem.

This commit fixes that issue for newly imported/fingerprinted files. However,
you still need to change the type of all acoustid_fingerprint fields
that are already present in the database:

    $ sqlite3 beets.db
    SQLite version 3.26.0 2018-12-01 12:34:55
    Enter ".help" for usage hints.
    sqlite> UPDATE items SET acoustid_fingerprint = CAST(acoustid_fingerprint AS TEXT);
2018-12-19 10:30:50 +01:00
Adrian Sampson
17d9882389 Make the path-field-remover function more obvious
An amendment to #3084.
2018-12-01 16:57:25 -05:00
Domen
5de3ee9a5f Export plugin can now export path from library, if explicitly specified as field to export. Info plugin behaviour is unchanged. 2018-11-28 20:19:37 +01:00
milesial
d5caae12bd
Now logs both the source and the destination 2018-10-25 15:29:28 +02:00
milesial
d4e615feba
Fixed typo in convert when copying cover art 2018-10-24 19:07:12 +02:00
Patrick Heneghan
9c7a313b0d
Remove default arg for lastgenre --force flag 2018-10-16 18:51:39 +01:00
Samuel Nilsson
a928dbc470 Added contextpath configuration to subsonicupdate plugin. Fixed bug in
subsonicupdate port configuration.
2018-10-10 21:22:31 +02:00
Jack Wilsdon
5ad16983d4
Fix miscellaneous typos 2018-10-09 01:11:06 +01:00
Adrian Sampson
8b59b20ef8 Tiny style fix for #3028 2018-09-16 20:56:06 -04:00
Andrew Rogl
865940746c More clean up requests 2018-09-11 18:52:55 +10:00
Andrew Rogl
308dccab95 Address requested changes from Adrian 2018-09-10 20:47:58 +10:00
Andrew Rogl
c43a957f46 Clean up flake errors 2018-09-09 15:48:07 +10:00
Andrew Rogl
919f3f9c34 mbsync no longer queries MusicBrainz when the either the mb_albumid or mb_trackid field is invalid 2018-09-09 15:20:26 +10:00
Adrian Sampson
e8ffaf9984
Merge pull request #3020 from Archer4499/master
chroma: Bias toward looking up more relevant releases using date/country
2018-08-31 22:39:45 -04:00
Derek King
549c115752 Return tuple of numbers instead of string for release_key 2018-09-01 04:10:29 +10:00
Adrian Sampson
eec5bfe73a Fiddle with some whitespace 2018-08-30 14:58:12 -04:00
Derek King
7a8f980323 chroma: Allow releases to be sorted by date/country
Uses
match:preferred:countries/original_year:
config options to determine whether the releases should be sorted by their respective fields.
The behaviour is the same as before when the default config is used.
2018-08-31 00:39:47 +10:00
L Maffeo
7369933232 Updated documentation 2018-08-28 21:50:24 +02:00
L Maffeo
c7aa248a77 Configuration defaults review 2018-08-28 21:34:58 +02:00
L Maffeo
39e8a8389b Code cleanup 2018-08-26 17:38:17 +02:00
L Maffeo
b747291468 Passed tox tests 2018-08-26 15:22:22 +02:00
L Maffeo
bd5ab43bc6 Removed logging (needs additional testing) 2018-08-26 14:34:47 +02:00
Io Ii
7bfb7e12e7 Minor fix in config 2018-08-26 09:13:23 +02:00
Io Ii
10c40b1575 Second review by @sampsyo 2018-08-26 08:35:16 +02:00
Adrian Sampson
1f37cb61a3
Merge branch 'master' into master 2018-08-25 06:55:12 -07:00
Martin Haaß
a3770686b4 to fix the peak calculation also delete the division 2018-08-20 23:39:34 +02:00
Martin Haaß
f58f03dbfd replaygain: albumpeak on large collections is calculated as average, not maximum (bug 3008) 2018-08-20 23:06:11 +02:00
L Maffeo
d4cecccdac Renamed plugin, added comments and minor fixes. 2018-08-18 14:22:25 +02:00
L Maffeo
fc1592adbe Renamed plugin, added default configuration and comments 2018-08-18 14:17:00 +02:00
Adrian Sampson
890ba85c79
Merge pull request #3004 from thetarkus/gmusic-additions-2
gmusic plugin fixes and additions
2018-08-15 12:03:13 -04:00
thetarkus
e824132137 Rename oauth_filepath to oauth_file, update gmusic doc 2018-08-15 11:42:04 -04:00
Adrian Sampson
cab6910866
Merge pull request #2718 from beetbox/fix-itunes
fetchart: Restore iTunes Store source
2018-08-15 10:34:07 -04:00
nath@dp7510
399bfb985e fetchart: fix itunes debug info
Some typos + make it more useful overall
2018-08-15 13:56:39 +02:00
nath@dp7510
0107262ed3 fetchart: restore itunes art source
Reimplement minimalistic itunes scraper from scratch
2018-08-15 13:55:55 +02:00
thetarkus
abffb29a3f gmusic plugin addition: add oauth_filepath option, better device_id
guessing
2018-08-14 23:30:54 -04:00
thetarkus
b7354fef23 gmusic plugin: only authenticate when needed 2018-08-14 22:35:10 -04:00
Adrian Sampson
69c8684302 Revise comment 2018-08-14 10:19:13 -04:00
Adrian Sampson
4242a6b202 Merge pull request #3003 from bemeurer/master
Parallelize absubmit
2018-08-14 10:18:46 -04:00
Adrian Sampson
86d353717a
Merge pull request #3002 from thetarkus/gmusic-additions-1
Add uploader_id, uploader_name, and device_id for gmusicapi auth in gmusic plugin
2018-08-14 09:17:45 -04:00
Bernardo Meurer
4eafa40ff2
Revert to sequential behavior for Python 2 2018-08-14 00:05:00 -03:00
Bernardo Meurer
0803ba74e2
Attempt at Python2 and 3 compatibility 2018-08-13 23:58:38 -03:00
Bernardo Meurer
a9f56db11e
Attempt to use ThreadPoolExecutor 2018-08-13 23:50:51 -03:00
Bernardo Meurer
31c95482d9
Fix imports 2018-08-13 23:23:41 -03:00
Bernardo Meurer
6c2daa061e
Moved from Pool to ThreadPool 2018-08-13 23:22:40 -03:00
Bernardo Meurer
22a6a0e6ef
Parallelized absubmit 2018-08-13 22:44:45 -03:00
Adrian Sampson
bac8faad78 Resolve W605: invalid escape sequence
This came up in lots of regexes that weren't using "raw" literals.
2018-08-13 10:41:01 -04:00
thetarkus
b1d5cc1485 Add uploader_id, uploader_name, and device_id for gmusicapi auth. 2018-08-13 02:52:16 -04:00
L Maffeo
67568b4f4c Passed tox tests 2018-08-12 19:37:31 +02:00
L Maffeo
5617eef6c7 Added subsonic plugin 2018-08-12 17:48:53 +02:00
Scott Carlson
a605a1ba55
Fixing Flake8 spacing complaint 2018-08-09 21:28:35 -05:00
Scott Carlson
cfe8ed9c34
Gmusic fixes based on review and changelog addition
* Fixes based on review and changelog addition
2018-08-06 16:41:09 -05:00
Scott Carlson
ef4490087b
Fixing Flake8 line issues 2018-08-05 00:17:19 -05:00
Scott Carlson
61363c8cd9
Fixing user messages to be more explicit 2018-08-04 23:54:58 -05:00
Scott Carlson
4fc15d2b17
Adding auto to default configs 2018-08-04 23:49:59 -05:00
Scott Carlson
69b4c68b63
Adding autoupload method to upload on import 2018-08-04 21:58:29 -05:00
Ryan Veach
1505ff071d changed flask cors import 2018-07-10 10:32:21 -05:00
Zsin Skri
ceabc72feb lastgenre: remove unnecessary check
In _resolv_genres wo do not have to explicitly check if self.c14n_branches is
not empty. The tree will have been loaded when self.canonicalize is truthy. Also
if self.c14n_branches would be empty the canonicalization is a no-op anyway...
2018-07-01 09:15:05 +02:00
Zsin Skri
cef9a3311c LastGenre: allow prefer_specific without canonical
This improves lastgenre's behaviour when the configuration option
`prefer_specific` is set but `canonical` is not.
Previously it would not set any tags. Now it does apply tags, sorted using the
canonicalization tree, but not canonicalized.

For this the default tree is loaded even when `canonical` is not set.
An extra check is added to only use it for canonicalization when `canonical` is
set.
2018-06-30 22:27:29 +02:00
Mike
1d32849daa Add ability for play plugin to emit utf8 BOM 2018-06-08 23:26:48 -06:00
Adrian Sampson
7d607b4c5d Merge pull request #2813 from autrimpo/issue2757
Use NullPaddedInt for R128 tags
2018-05-31 10:13:20 -04:00
Abra
3348a466f4 Make lyrics plugin group songs by 'albumartist' rather than 'artist'
when writing ReST
2018-05-14 11:18:34 +04:00
Bin Jin
69d6dfe097 mbsync: fix updating album with invalid first track MBID
MBID of recording could become invalid after merging. The existing
code always copies metadata from first track after updating. But for
albums with invalid track MBID that happens to be the first track,
MusicBrainz changes won't be applied to whole album, only whose
tracks with valid MBID. This is particularly annoying since those
changes are actually displayed for every `beet mbsync` run, but never
get applied.

Fix this issue by finding any track that get MusicBrainz updates, and
apply it to whole album.
2018-05-10 16:38:30 +08:00
Jérémie Detrey
3b03372502 mbsync: Use release-track-id to construct track mapping.
Fixes #1234 by following recording MBIDs changes.
2018-05-08 16:30:07 +02:00
rachmadaniHaryono
e90a547642 chg: dev: fix list item remove error 2018-05-03 09:46:03 +08:00
Dmitry Bogdanov
a840bc700b
Merge branch 'master' into discogs_original_year 2018-05-02 17:41:07 +02:00
Jérémie Detrey
9f4c5c8096 Do not rely on positional arguments for TrackInfo. 2018-04-30 18:37:27 +02:00
Adrian Sampson
f1d5c2f398 Fix #2537: keyfinder uses imported_items() 2018-04-29 13:45:39 -04:00
Dmitry Bogdanov
6aba118e94 Fetch original_year from master releases for Discogs (#1122)
This adds an additional Discogs API call inside get_album_info().
Assume that original_year equals to year for releases without a
master release.
2018-04-29 18:18:15 +02:00
Dmitry Bogdanov
f9b6473893 Some more code style fixes 2018-04-28 19:03:32 +02:00
Dmitry Bogdanov
7ac2aff50c Fix a few code style issues 2018-04-28 14:06:29 +02:00
Dmitry Bogdanov
0ea5882bc0 Better comments in code explaining Discogs track IDs (#2336) 2018-04-28 02:32:42 +02:00
Dmitry Bogdanov
09ee194142 Make Discogs medium indexing code easier to understand 2018-04-28 02:23:46 +02:00
Dmitry Bogdanov
48140f11e7 Use releasegroup_id to store master release IDs from Discogs
Master releases roughly correspond to MusicBrainz' release groups.
It will be usefull to store master IDs, for example to retrieve
original release dates (#1122).
2018-04-27 21:56:51 +02:00
Dmitry Bogdanov
2e422122b3 Invent our own track IDs for Discogs
Discogs does not provide track IDs. As a workaround, invent our own
IDs by combining release ID with original track position strings
returned by Discogs (#2336).
2018-04-27 20:30:35 +02:00
Dmitry Bogdanov
676536efa7 Fix incorrect indexing of two-sided mediums
Fix incorrect split of a tracklist by medium for the case of
two-sided mediums (#2887).

Following the discussion in #2887, the 'medium_total' value should
contain the number of tracks on the medium to which each particular
track belongs, not the total number of different mediums present on
a release.

Fix unit tests accordingly.
2018-04-27 19:28:35 +02:00
Tobias Sauerwein
499b3867b2 Remove unused import. 2018-04-20 08:25:08 +02:00
Tobias Sauerwein
4748a68b6b Remove exception handling. 2018-04-20 08:16:56 +02:00
cgtobi
7d45eabb25
Merge branch 'master' into sonos 2018-04-20 07:44:21 +02:00
Tobias Sauerwein
5e084b7186 Fix exception handling and add docs to the toc. 2018-04-20 07:39:12 +02:00
Tobias Sauerwein
c420f6bf99 Add sonos updater plugin. 2018-04-19 23:58:40 +02:00
Cédric Schieli
b9bac391a9
Really fix album replaygain calculation with gstreamer backend.
Fixes #2845
2018-03-19 21:09:35 +01:00
Waweic
06d4fe254d Implement recommendations by sampsyo
Implemented all recommendations.
2018-03-06 17:49:20 +01:00
Waweic
3c3e579dcc Make programming style pep8 compliant 2018-03-01 20:20:38 +01:00
Waweic
d0fd41b474 Add unicode support for Python 2 and 3
Converts bytes to unicode using util.text_string, assuming that the
string is a UTF-8 string.
If that fails, it falls back to a hardcoded fallback filename.
2018-03-01 19:45:44 +01:00
Waweic
4df313e3ce Fix unicode problems in web plugin
Added Exception to the web plugin to catch non latin-1 characters and change them to ascii chars.
Added Description to the changelog file
2018-03-01 11:56:38 +01:00
Waweic
b94227a53d Merge https://github.com/waweic/beets into patch-2
Catch up
2018-02-27 22:03:50 +01:00
Adrian Sampson
453fd372a3 Flatten a config view (#2821) 2018-02-26 18:00:59 -05:00
Adrian Sampson
3b49da0c52 Merge pull request #2821 from Konubinix/master
Add a support for supports_credentials
2018-02-26 17:59:57 -05:00
Samuel Loury
e3599742b4 Add a support for supports_credentials
If the web plugin is behind a credential based http server and is
accessed by another in-browser client in another domain, the
specification of CORS requires the server to indicate it supports
such credentials.
2018-02-26 21:08:02 +01:00
waweic
be96c1022a
Fix album_art() in __init__.py
flask.send_file() expects a string, g.lib.get_album() returns bytes. Added decode() to album_art(). 

If g.lib.get_album() gets a non-existing id, it returns None. Python would throw an error in this case. Added check to prevent this.
2018-02-26 18:33:30 +01:00
waweic
df83516086
Fix jumping time in beets.js
Round was used instead of floor
2018-02-26 17:01:06 +01:00
wisp3rwind
318f0c4d16 Advanced fetchart source config: pep8 2018-02-24 11:26:50 +01:00
wordofglass
e7a3e27ed9 Advanced fetchart source config: Actually use the new syntax 2018-02-24 11:26:50 +01:00
wordofglass
2c1e4d878b Advanced fetchart source config: add the (still unused) match_by constructor argument 2018-02-24 11:26:50 +01:00
Adrian Sampson
f2733883ef Merge branch 'master' of github.com:beetbox/beets 2018-02-23 18:19:11 -05:00
Adrian Sampson
a6be28a65e Fix #2817: drop in configuration was ignored
This was overridden by the default CLI option. Now the default for the
config option is None, meaning no change to the config.
2018-02-23 18:18:32 -05:00
David Logie
d6b6ebbeb9 mbcollection: Make sure missing albums are removed from collections correctly. 2018-02-23 12:34:33 +00:00
Michal Koutenský
d4625bced0 Have convert plugin run early in the pipeline 2018-02-19 10:46:06 +01:00
Michal Koutenský
8350ed6baf Unique debug messages for R128 functions 2018-02-18 20:09:58 +01:00
Kovrinic
ace7fab4d8 PlexUpdate: token redacted 2018-01-31 00:49:55 -06:00
Adrian Sampson
3f2cefd985 Merge pull request #2601 from m42i/m42i/importadded
Fix #1918: ValueError on trying to import
2018-01-30 22:55:28 -05:00
Adrian Sampson
224d782c2c Fix #2771: handle errors in genius lyrics source 2018-01-30 22:37:44 -05:00
Adrian Sampson
277d81b4d6 lyrics: Don't write ReST by default! 2018-01-30 22:33:32 -05:00
Adrian Sampson
e7417e3683 lyrics: Don't crash when BeautifulSoup isn't found 2018-01-30 22:31:15 -05:00
Adrian Sampson
b28e0b43ff Merge pull request #2778 from ylep/replaygain-options
Add --force, --write and --nowrite options to replaygain plugin
2018-01-02 14:50:27 -05:00
Yann Leprince
d9bec61e98 Merge branch 'master' of https://github.com/beetbox/beets into replaygain-options 2018-01-02 12:35:27 +01:00
Yann Leprince
499cd378b7 fix the default write behaviour to the importer configuration 2018-01-02 12:11:47 +01:00
Yann Leprince
079e167b6b Merge branch 'master' of https://github.com/beetbox/beets into fix-bs1170gain 2018-01-02 10:54:40 +01:00
Yann Leprince
3ef4b70439 Fix coding style 2017-12-31 14:51:14 +01:00
Yann Leprince
1f6335581e Add --force, --write and --nowrite options to replaygain plugin 2017-12-31 12:00:02 +01:00
Yann Leprince
05775ccac6 Fix fragile parsing of bs1770gain output
bs1770gain is sorting the filenames internally, so in some corner cases it returns the results in a different order from the command-line arguments.

This patch uses the --xml option of bs1770gain (introduced in 0.4.6) in order to read the filenames reliably.
2017-12-31 11:27:42 +01:00
Vrihub
d0af7a7bd3 Merge branch '2738-filename-tracknumber' of https://github.com/Vrihub/beets into 2738-filename-tracknumber 2017-12-21 15:20:35 +01:00
Vrihub
4ee5f2ca88 Fix "line too long" Travis CI error 2017-12-21 15:18:25 +01:00
Vrihub
9cd7473c6b
Merge branch 'master' into 2738-filename-tracknumber 2017-12-21 15:02:09 +01:00
Vrihub
84cf3361ce Refactored some regular expressions. Added changelog entry
Some more changes to the regular expressions in the "PATTERNS" list.
Also allow "_" as a separator, where only "-" was allowed.
Replaced similar regexps containing different combinations of \s, "-", "."
with a single regexp using a set of characters [\s.\-_].
2017-12-21 14:47:41 +01:00
Constantine Evans
dd2b44ef20 minor fixes and changelog entry 2017-12-11 13:31:40 -08:00
Vrihub
7132ad094b First tentative fix for issue 2738.
Don't ignore anymore filenames such as "01.mp3", instead use the number
in the filename as track number.
2017-12-11 19:32:53 +01:00
Constantine Evans
c9b4e9b414 only use tiebreak if tiebreak includes an entry for the kind being considered, otherwise use default (eg, if only items is specified, and -a is being used, use default order of priority 2017-12-10 12:28:47 -08:00
Adrian Sampson
d932aa4f5c
Merge pull request #2750 from woparry/master
Add tags configuration to acousticbrainz plugin
2017-12-02 22:19:23 -05:00
Owen Parry
1f45ea00f4 use as_str_seq and fix line length 2017-12-02 11:31:31 -08:00
Aaron Jubbal
e24f732014 Changed dont_convert to no_convert. 2017-11-29 20:08:50 -08:00
Aaron Jubbal
0998d9f8ef Added default value for dont_convert option, addressing crashes. 2017-11-29 17:53:50 -08:00
Aaron Jubbal
7265077e75 dont_convert option implemented.
Local testing indicates success.
2017-11-29 16:13:38 -08:00
Owen Parry
eaa84178f7 split long line 2017-11-27 09:11:53 -08:00
Owen Parry
325ae6f0ee Add tags configuration to acousticbrainz plugin 2017-11-27 07:55:38 -08:00
Barry Broderick
530beb6312 removed whitespaces from empty line 2017-11-22 10:10:28 -05:00
Barry Broderick
a7818027ab replaced the exception test in convert_field with an isinstance test 2017-11-20 23:09:36 -05:00
Barry Broderick
585d4ba89d attempted fix for #2740 2017-11-20 09:56:40 -05:00
David Logie
c10e62f212 mbcollection: Fix default 'remove' value.
If the default is not None the value cannot be overriden by the user's
config.yaml.
2017-11-13 15:48:22 +00:00
test
842f6afd7f Fix indentation 2017-11-10 14:04:16 +01:00
test
8544b3a830 Fix long line and add changelog entry 2017-11-10 13:46:26 +01:00
test
54297dbab4 Tentative fix for issue 2734: also check for RETAG 2017-11-05 12:04:40 +01:00
Adrian Sampson
14476e2f8a scrub: Handle MutagenError (fix #2716)
In older versions of Mutagen, an IOError indicated things like
permissions errors. Now, a custom MutagenError is raised. Now we handle
both.
2017-10-20 14:49:53 -04:00
Adrian Sampson
d02bef1aec Merge pull request #2709 from lmagno/master
Fetch lyrics from Genius through scraper
2017-10-09 18:50:58 -04:00
Lucas Magno
fc2d379fb5 Comply with PEP8 2017-10-09 06:22:42 -03:00
Lucas Magno
1b35a5df0d Fetch lyrics from Genius through scraper 2017-10-08 09:13:51 -03:00
konman2
578143ae12 updated to pass pep8 checks 2017-10-07 21:28:33 -07:00
konman2
fdeef05cc9 clearart asks for permission before deleting embedded albumart 2017-10-07 20:42:01 -07:00
Adrian Sampson
114a2f8bd4 Merge pull request #2707 from gdtwst/mpdstats_edits
mpdstats: update stats when switching from song to stream and when playing a song consecutively
2017-10-07 09:06:51 -07:00
gdtwst
e5afc5e0b3 Remove whitespaces from empty line 2017-10-07 19:00:08 +07:00
Heinz Wiesinger
bd6645d135 Fix album replaygain calculation with gstreamer backend.
Fixes #2636
2017-10-04 20:22:01 +02:00
gdtwst
c2770a5f6b Enable play counts for repeated plays of the same song. 2017-10-04 19:10:59 +07:00
gdtwst
eb338d208b Register song changes when switching from song to stream URL 2017-10-04 16:35:22 +07:00
j000
5a82c7ead1 Remove whitespaces from empty line 2017-09-27 23:31:35 +02:00
j000
77e8f21094 [Play plugin]Respect relative paths when using albums 2017-09-26 03:20:00 +02:00
Jonas Wagner
114a6f80da Fix the --key option in the duplicates plugin.
During a refactoring, the "dest='keys'" parameter was lost. This caused
the option to not have any effect.
2017-09-22 20:27:47 +02:00
David Logie
bed003f97b Use the built-in method of overriding config with cli options. 2017-09-18 18:19:51 +01:00
David Logie
61b0246651 mbcollection: Add support from removing albums.
Add a new ``mbcollection.remove`` configuration option (default: None)
and a new ``-r`` (``--remove``) flag which removes albums from
collections that are no longer present in the beets database.

The ``-r`` flag takes precedence over the ``remove`` configuration
option.
2017-09-14 15:49:42 +01:00
zigarrre
b376139663 Refactored move functions for clarity according to #2682
The move functions in library.py and manipule_files in importer.py where
changed to use a single parameter for the file operation instead of
multiple boolean flags.

A typo in the documentation of the Album.move and Item.move functions
confusing True and False when describing the store parameter was fixed
as well.
2017-09-11 17:03:44 +02:00
David Logie
7db09c6aba Silence pep8 warning. 2017-09-09 19:13:44 +01:00
David Logie
46f7ce78f1 mbcollection: Support specifiying collection ID. 2017-09-09 18:59:25 +01:00
euri10
25fb2453b4 Modified the name of the fetchart plugin switch from missing to quiet 2017-09-05 18:27:47 +02:00
euri10
b2fd274e2c Added a missing switch to the fetchart command so that only missing albums
are displayed
2017-09-05 16:34:26 +02:00
Adrian Sampson
34246a00e7 Fix #2673: JSON file encoding in absubmit
First, it's best to open the file as binary so the JSON module itself
can figure out how to decode it (it will just use UTF-8). Then, we can
use `load` instead of `loads` to avoid needing to read the file
explicitly ourselves.
2017-08-27 10:20:36 -04:00
Adrian Sampson
015aee3662 Fix #2671: missing syspath on acoustid call 2017-08-26 11:18:27 -04:00
wordofglass
8833fef249 Merge pull request #2668 from wordofglass/edit_logic
Edit plugin logic: Regression from previous PR; incorrect diffs
2017-08-25 15:52:40 +02:00
wordofglass
7f12cc0c88 edit, Model.copy: documentation improvements 2017-08-25 15:47:07 +02:00
wordofglass
352d99cccd edit: Do not deepcopy objects, finally fixes the regression from #2659
Deepcopying fails if a database is attached as Model._db since the
sqlite connection objects it contains are non-copyable
2017-08-24 15:03:18 +02:00
wordofglass
33f7e67943 edit: Fix a regression from #2659 when re-tagging albums 2017-08-24 13:40:50 +02:00
wordofglass
989845199b edit: Correctly reset the old object, do not reload it from the tags
Previously, if continuing to edit (i.e. invoking the $EDITOR) multiple
times in one invocation of EditPlugin.edit_objects, the plugin would
reload the old state from the file tags. The initial 'old state' is
usually only loaded from the database, though. As a consequence, if
database and tags were not in sync, the diffs from first and all
subsequent edits could differ unexpectedly.
2017-08-24 13:40:35 +02:00
Adrian Sampson
d87c73efb3 Merge pull request #2662 from natezb/master
Fix kodiupdate URL and add better error reporting
2017-08-22 12:59:19 -04:00
wordofglass
df479d686d Fix the edit plugin displaying bogus data or even crashing on re-imports 2017-08-21 00:32:03 +02:00
Nate Bogdanowicz
f5dbb7b0c5 Make error handling and logging more detailed 2017-08-20 14:51:03 -07:00
Nate Bogdanowicz
7eb9913391 Fix kodi url 2017-08-20 13:14:48 -07:00
Adrian Sampson
51961bbba2 gmusic: Use Unicode literals (#2660) 2017-08-20 13:03:40 -04:00
David Logie
f909f092fc Fix importfeeds plugin on Python 3. 2017-08-12 16:45:13 +01:00
Adrian Sampson
c06eca7e58 Merge pull request #2634 from anarcat/musixmatch-block-detect
lyrics: detect MusixMatch blocking
2017-07-18 17:13:31 -04:00
Antoine Beaupré
5ef68783a8
strip trailing and leading extra dashes
those are introduced if non-word characters are found, and are ugly
2017-07-18 16:33:22 -04:00
Antoine Beaupré
b4b5473093
add pointer to slugify in slug 2017-07-18 16:14:10 -04:00
Antoine Beaupré
a8afabea80
move slug utility function to top-level
it's a generic utility function that can be reused, there's nothing
class-specific about it.
2017-07-18 16:12:48 -04:00
Antoine Beaupré
5e8d17a4fc
lyrics: detect MusixMatch blocking
we just look for the bad string in the HTML. this has the downside
that we may consider songs that have those exact lyrics (you never
know, really) may trigger this warning as well and we would fail to
fetch those songs.

we also fail if lyrics contain another magic string that seems to come
up when you do fill in the CAPTCHA after being blocked.
2017-07-17 12:21:55 -04:00
Antoine Beaupré
458f3636f4
compare artists based on the slug
this is necessary because otherwise artists with different string
representations but the same slug would overwrite one another

this outlines more clearly the code duplication between the rst code
and the slugify function, something which can be fixed later.
2017-07-17 11:59:14 -04:00
Antoine Beaupré
9c36a41ea8
slight refactoring: strip album only once 2017-07-17 11:50:15 -04:00
Antoine Beaupré
9894e8752b
ignore trailing/leading whitespace when comparing artists 2017-07-17 11:49:35 -04:00
Antoine Beaupré
36f84bfedd
add missing trailing newline after lyrics block
this would yield a warning for every song
2017-07-17 11:44:06 -04:00
Adrian Sampson
b303d5beb0 Slightly more complete sentences in comments 2017-07-17 10:59:04 -04:00
Antoine Beaupré
93966ed4ee
strip whitespace in titles
this would cause problems with songs that had trailing spaces with the
index directive
2017-07-17 09:00:22 -04:00
Antoine Beaupré
b6e42ee2e8
fix another unicode error
the unicode strings are not binary - rely on Python to do the right
thing here instead of encoding a string we know is already properly
encoded
2017-07-17 08:55:09 -04:00
Antoine Beaupré
6d58110bd2
move heredocs to top-level globals 2017-07-17 08:50:19 -04:00
Antoine Beaupré
7e0a48a46d
s/rest/rest/ 2017-07-17 08:49:40 -04:00
Adrian Sampson
9de94378b9 An even shorter metavariable 2017-07-16 10:14:49 -04:00
Adrian Sampson
813cf97686 Better metavariable for lyrics --help output 2017-07-16 10:10:41 -04:00
Antoine Beaupré
5d8c15980e
fix flake8 warning 2017-07-15 16:24:07 -04:00
Antoine Beaupré
0bcd16f1ab
deal with encoding issues in python3
when we encode explicitly, we return bytes, so open files as binary
2017-07-15 16:21:41 -04:00
Antoine Beaupré
f667428758
write sphinx base files
we write the artists files in a subdirectory, to avoid infinite
recursions or flooding the current directory needlessly.

this way, the user has a good base structure and can just chain the
command into sphinx to continue building the next format, after
possible tweaks.
2017-07-15 15:43:16 -04:00
Antoine Beaupré
e6adb5e7da
cosmetic: do not use needless heredoc 2017-07-15 15:33:35 -04:00
Antoine Beaupré
91de8aac84
move rst writer to a different function
this simplifies and clarifies the code, although we need to call the writerst function twice to wrap up at the end of the loop
2017-07-15 15:33:35 -04:00
Antoine Beaupré
d330353e1c
rename the skip option to local
skip was a misnomer: we actually skip "unfetched" lyrics. this means
it's somewhat of a double-negative and really confusing.

--local is clearer, although less in opposition with --force
2017-07-15 14:19:25 -04:00
Antoine Beaupré
ac32ae574c
optimize: write only 3 times per file
this makes the code more readable and reduces the number of syscalls
to write files
2017-07-15 09:23:59 -04:00
Antoine Beaupré
469c03a7bf
deal properly with empty album titles 2017-07-15 09:23:59 -04:00
Antoine Beaupré
63aa3b3165
write to separate rst files
this makes the ePUB easier to parse by e-readers, because they do not
need to load one giant HTML file, but one per author. it also makes
sphinx rendering more efficient and interactive
2017-07-15 09:23:58 -04:00
Antoine Beaupré
0fbfa1feae
render RST instead of HTML
ReStructuredText has the advantage over HTML that it can be rendered
easily to multiple formats (HTML, ePUB, PDF) and it supports indexes.

the output needs to be fed into a file and integrated into an existing
Sphinx document, of course.
2017-07-14 17:34:55 -04:00
Antoine Beaupré
9f3e5b28b4
output lyrics in HTML, allow skipping
the idea here is to format the lyrics output a little better so that
it can (for example) be shown as a web page or an ebook.

the new skip option allows for faster generation of the output in the
(most common) case where not all lyrics are available.
2017-07-14 15:31:22 -04:00
Michal Koutenský
70a2ad354b fixes issue #2615 2017-07-04 15:53:02 +02:00
masi
3bea876111 Fix #1918: ValueError on trying to import 2017-06-17 23:20:46 +02:00
Adrian Sampson
f2b6801e6c Merge pull request #2596 from aranc23/metasync-fixes
do not quote the value in xml, use quoteattr to add quotes as needed
2017-06-15 21:01:46 -04:00
Adrian Sampson
8ba0060f44 Wrap a long line 2017-06-15 20:46:54 -04:00
Adrian Sampson
009c6a4f6d Slightly clearer layout for #2593, and comments 2017-06-15 17:51:14 -04:00
Aran Cox
f36c70c754 do not quote the value in xml, use quoteattr to add quotes as needed 2017-06-15 09:00:59 -05:00
robot3498712
cafbb2438e fixed failing test - line too long 2017-06-15 13:27:28 +02:00
robot3498712
bc8a8ecf5f fix /issues/2592: web: Use Unicode paths to send files on Windows under Python 2 2017-06-15 12:49:00 +02:00
Adrian Sampson
ace5656e36 Complete set of __future__ imports 2017-06-14 19:08:27 -04:00
Adrian Sampson
1f2b8cef97 Tiny code and docs fixes for gmusic (#2586) 2017-06-14 19:05:38 -04:00
Adrian Sampson
4563e3b6dd Merge pull request #2586 from tigranl/gmusic
Add Google Music plugin
2017-06-14 18:52:20 -04:00
Tigran Kostandyan
06f86c82e5 PEP8 2017-06-11 22:36:09 +03:00
Tigran Kostandyan
28ba733ebe Add custom exception and mark fields as redacted.
Remove Musicmanager global variable.
Update gmusic.rst
2017-06-11 22:27:44 +03:00
Adrian Sampson
290162a7eb Merge pull request #2294 from anshuman73/master
Fixed #2200 and a small typo
2017-06-10 20:50:50 -04:00
Adrian Sampson
15a7dfccff Merge pull request #2583 from yacoob/master
Fix a lastgenre crash
2017-06-10 20:47:19 -04:00
tigranl
b1d8321e40 Add Google Music plugin 2017-06-05 16:48:23 +03:00
Jakub Turski
ee46a5150f Don't crash if non-canonical genre and prefer_specific: yes.
Also, add a test for this.
2017-06-02 15:48:05 +01:00
Michal Koutenský
2685f13315 replaygain: support r128 2017-05-17 21:48:01 +02:00
Nathan Musoke
c5319274ca IPFS plugin: Add note to check hashes carefully
In the future, just checking that a hash begins with "Qm" and has length
46 will likely not be sufficient.
2017-05-11 18:50:29 +12:00
Nathan Musoke
ca8c557840 bugfix: Python3ify the IPFS plugin
Paths were being constructed in a Python 3-incompatible way by concating
bytes and strings. Do this more carefully by encoding and decoding of
binary and strings.
2017-05-11 18:50:15 +12:00
Adrian Sampson
faf8be089b Merge pull request #2549 from Kraymer/drop-lyrics-com
Drop lyrics.com backend
2017-05-04 09:34:48 -04:00
Adrian Sampson
b57c49d738 Add a period to a comment, simplify one expression
w.r.t. #2542
2017-05-04 09:29:27 -04:00
Adrian Sampson
908b8dca97 Merge pull request #2542 from ocelotsloth/2532-web-serializer-bytes
web: #2532 - Decode bytes values to strings
2017-05-04 09:20:38 -04:00
Fabrice Laporte
409f070970 Remove lyrics.com source 2017-05-03 22:54:09 +02:00
Mark Stenglein
22f07b91e9 web: __init__: _rep: Make the looping more pythonic
As suggested, changes around the for loop to make it a bit more
pythonic by using an if loop inside a normal for loop.

Signed-off-by: Mark Stenglein <mark@stengle.in>
2017-05-03 16:36:40 -04:00
Mark Stenglein
9394e0ac63 web: __init__: _rep: change to base64 encoding
As suggested, this commit adds base64 encoding for the bytes
encoding.

Signed-off-by: Mark Stenglein <mark@stengle.in>
2017-05-03 16:34:30 -04:00
Fabrice Laporte
fc6b65d592 Merge pull request #2538 from Kraymer/lyrics-test
Tests to track whether lyrics websites are correctly fetched
2017-05-03 20:02:03 +02:00
Mark Stenglein
471d46d67e web: __init__: _rep: Filter all bytes for serializer
This commit fixes issue #2532 by filtering out any byte values
added by any other extensions and decoding them to strings for the
JSON serializer.

It does not remove any of the keys, instead opting to just convert
them.

Signed-off-by: Mark Stenglein <mark@stengle.in>
2017-05-03 00:03:05 -04:00
Fabrice Laporte
7dab9f339e Restore beets module import 2017-05-02 23:48:20 +02:00
Fabrice Laporte
07af27e44b Lyrics are last paragraph with class 'mxm-lyrics__content'
Remove ‘data-reactid’ from marker.
2017-05-02 23:40:25 +02:00
Fabrice Laporte
3e38a33c4a Fix PEP8 2017-05-02 23:37:20 +02:00
Fabrice Laporte
11eb90c758 Fix PEP8 2017-05-02 07:46:51 +02:00
Fabrice Laporte
3e3ad6974c Fix PEP8 2017-05-02 07:30:40 +02:00
Fabrice Laporte
a165d6c00b Fix MusiXmatch text extraction markers 2017-05-01 23:40:09 +02:00
Fabrice Laporte
2bf58a61c3 Decode string with Unicode escape 2017-04-30 23:14:23 +02:00
wordofglass
bb5629ea1d Remove untyped except statements 2017-04-29 00:05:20 +02:00
Jakub Wilk
95a868bb50 Don't hardcode errno constant
The value of ENOENT is architecture-dependent, so don't assume
it's always 2.
2017-04-23 23:28:32 +02:00
Adrian Sampson
fae8fcc932 ftintitle: Clarify indexing
This can only be a two-element array, so just use the index 1. This matches
better with the comments, that say "right-hand side" instead of "the last
value in the list."
2017-04-19 19:08:15 -04:00
Adrian Sampson
9d42728f7f ftintitle: Clarify control flow
Assigning to this variable made it hard to tell what the function was actually
returning.
2017-04-19 19:07:29 -04:00