From d1ba309f36774fe71213c663a35dce49da8eae64 Mon Sep 17 00:00:00 2001 From: MartyLake Date: Mon, 22 Jul 2019 16:55:46 +0200 Subject: [PATCH 01/16] Add a new method that copied pathlib.path.as_posix --- beets/util/__init__.py | 4 ++++ beetsplug/playlist.py | 11 +++++++++-- beetsplug/smartplaylist.py | 10 +++++++--- test/test_files.py | 4 ++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/beets/util/__init__.py b/beets/util/__init__.py index 29b2a73e7..9c87e7994 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -222,6 +222,10 @@ def sorted_walk(path, ignore=(), ignore_hidden=False, logger=None): for res in sorted_walk(cur, ignore, ignore_hidden, logger): yield res +def pathlib_as_posix(path): + """Return the string representation of the path with forward (/) + slashes.""" + return path.replace(b'\\', b'/') def mkdirall(path): """Make all the enclosing directories of path (like mkdir -p on the diff --git a/beetsplug/playlist.py b/beetsplug/playlist.py index 4ab02c6b7..af98a250c 100644 --- a/beetsplug/playlist.py +++ b/beetsplug/playlist.py @@ -18,6 +18,8 @@ import os import fnmatch import tempfile import beets +from beets.util import (pathlib_as_posix) + class PlaylistQuery(beets.dbcore.Query): @@ -86,6 +88,7 @@ class PlaylistPlugin(beets.plugins.BeetsPlugin): 'auto': False, 'playlist_dir': '.', 'relative_to': 'library', + 'forward_slash': False, }) self.playlist_dir = self.config['playlist_dir'].as_filename() @@ -160,6 +163,8 @@ class PlaylistPlugin(beets.plugins.BeetsPlugin): try: new_path = self.changes[beets.util.normpath(lookup)] except KeyError: + if self.config['forward_slash'].get(): + line = pathlib_as_posix(line) tempfp.write(line) else: if new_path is None: @@ -170,8 +175,10 @@ class PlaylistPlugin(beets.plugins.BeetsPlugin): changes += 1 if is_relative: new_path = os.path.relpath(new_path, base_dir) - - tempfp.write(line.replace(original_path, new_path)) + line = line.replace(original_path, new_path) + if self.config['forward_slash'].get(): + line = pathlib_as_posix(line) + tempfp.write(line) if changes or deletions: self._log.info( diff --git a/beetsplug/smartplaylist.py b/beetsplug/smartplaylist.py index a83fc4d19..a440cb7fd 100644 --- a/beetsplug/smartplaylist.py +++ b/beetsplug/smartplaylist.py @@ -21,7 +21,7 @@ from __future__ import division, absolute_import, print_function from beets.plugins import BeetsPlugin from beets import ui from beets.util import (mkdirall, normpath, sanitize_path, syspath, - bytestring_path) + bytestring_path, pathlib_as_posix) from beets.library import Item, Album, parse_query_string from beets.dbcore import OrQuery from beets.dbcore.query import MultipleSort, ParsingError @@ -37,7 +37,8 @@ class SmartPlaylistPlugin(BeetsPlugin): 'relative_to': None, 'playlist_dir': u'.', 'auto': True, - 'playlists': [] + 'playlists': [], + 'forward_slash': False, }) self._matched_playlists = None @@ -206,6 +207,9 @@ class SmartPlaylistPlugin(BeetsPlugin): mkdirall(m3u_path) with open(syspath(m3u_path), 'wb') as f: for path in m3us[m3u]: - f.write(path + b'\n') + if self.config['forward_slash'].get(): + path = pathlib_as_posix(path) + f.write(path) + f.write(b'\n') self._log.info(u"{0} playlists updated", len(self._matched_playlists)) diff --git a/test/test_files.py b/test/test_files.py index ff055ac6f..87e4862f3 100644 --- a/test/test_files.py +++ b/test/test_files.py @@ -194,6 +194,10 @@ class HelperTest(_common.TestCase): p = 'a/b/c' a = ['a', 'b', 'c'] self.assertEqual(util.components(p), a) + def test_forward_slash(self): + p = r'C:\a\b\c' + a = r'C:/a/b/c' + self.assertEqual(util.pathlib_as_posix(p), a) class AlbumFileTest(_common.TestCase): From 1a4699d0ee080a02a1587c2fa612cd6fefeec685 Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:46:31 +0200 Subject: [PATCH 02/16] Add documentation --- docs/plugins/playlist.rst | 5 +++++ docs/plugins/smartplaylist.rst | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/docs/plugins/playlist.rst b/docs/plugins/playlist.rst index 3622581db..4cc226265 100644 --- a/docs/plugins/playlist.rst +++ b/docs/plugins/playlist.rst @@ -11,6 +11,7 @@ Then configure your playlists like this:: auto: no relative_to: ~/Music playlist_dir: ~/.mpd/playlists + forward_slash: no It is possible to query the library based on a playlist by speicifying its absolute path:: @@ -45,3 +46,7 @@ other configuration options are: set it to ``playlist`` to use the playlist's parent directory or to ``library`` to use the library directory. Default: ``library`` +- **forward_slah**: Forces forward slashes in the generated playlist files. + If you intend to use this plugin to generate playlists for MPD on + Windows, set this to yes. + Default: Use system separator diff --git a/docs/plugins/smartplaylist.rst b/docs/plugins/smartplaylist.rst index e68217657..3d7e7a77b 100644 --- a/docs/plugins/smartplaylist.rst +++ b/docs/plugins/smartplaylist.rst @@ -14,6 +14,7 @@ Then configure your smart playlists like the following example:: smartplaylist: relative_to: ~/Music playlist_dir: ~/.mpd/playlists + forward_slah: no playlists: - name: all.m3u query: '' @@ -96,3 +97,7 @@ other configuration options are: directory. If you intend to use this plugin to generate playlists for MPD, point this to your MPD music directory. Default: Use absolute paths. +- **forward_slah**: Forces forward slashes in the generated playlist files. + If you intend to use this plugin to generate playlists for MPD on + Windows, set this to yes. + Default: Use system separator From da864402d5739733aad23736c14c9f65d8591812 Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:49:17 +0200 Subject: [PATCH 03/16] Review: Remove unnecessary get --- beetsplug/playlist.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/beetsplug/playlist.py b/beetsplug/playlist.py index af98a250c..29639aba7 100644 --- a/beetsplug/playlist.py +++ b/beetsplug/playlist.py @@ -163,7 +163,7 @@ class PlaylistPlugin(beets.plugins.BeetsPlugin): try: new_path = self.changes[beets.util.normpath(lookup)] except KeyError: - if self.config['forward_slash'].get(): + if self.config['forward_slash']: line = pathlib_as_posix(line) tempfp.write(line) else: @@ -176,7 +176,7 @@ class PlaylistPlugin(beets.plugins.BeetsPlugin): if is_relative: new_path = os.path.relpath(new_path, base_dir) line = line.replace(original_path, new_path) - if self.config['forward_slash'].get(): + if self.config['forward_slash']: line = pathlib_as_posix(line) tempfp.write(line) From dd9de059688f401f7ca5269da53506af60f38b43 Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:50:20 +0200 Subject: [PATCH 04/16] Review: Remove unnecessary split of concat --- beetsplug/smartplaylist.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/beetsplug/smartplaylist.py b/beetsplug/smartplaylist.py index a440cb7fd..757879770 100644 --- a/beetsplug/smartplaylist.py +++ b/beetsplug/smartplaylist.py @@ -209,7 +209,6 @@ class SmartPlaylistPlugin(BeetsPlugin): for path in m3us[m3u]: if self.config['forward_slash'].get(): path = pathlib_as_posix(path) - f.write(path) - f.write(b'\n') + f.write(path + b'\n') self._log.info(u"{0} playlists updated", len(self._matched_playlists)) From 3a5ea58f7a9d9867d5e7e06e600be08bf6f13746 Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:52:26 +0200 Subject: [PATCH 05/16] Review: format docstring on the following line --- beets/util/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/beets/util/__init__.py b/beets/util/__init__.py index 9c87e7994..2890576fd 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -224,7 +224,8 @@ def sorted_walk(path, ignore=(), ignore_hidden=False, logger=None): def pathlib_as_posix(path): """Return the string representation of the path with forward (/) - slashes.""" + slashes. + """ return path.replace(b'\\', b'/') def mkdirall(path): From aa1da3166fb80361bcf82c7c3cda10891865b6fe Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:53:17 +0200 Subject: [PATCH 06/16] Review: Remove unnecessary parens --- beetsplug/playlist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beetsplug/playlist.py b/beetsplug/playlist.py index 29639aba7..464d69caf 100644 --- a/beetsplug/playlist.py +++ b/beetsplug/playlist.py @@ -18,7 +18,7 @@ import os import fnmatch import tempfile import beets -from beets.util import (pathlib_as_posix) +from beets.util import pathlib_as_posix From ee7f93933685f61192f3b2c0162310003e3190fc Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:53:50 +0200 Subject: [PATCH 07/16] Review: Remove stray blank line --- beetsplug/playlist.py | 1 - 1 file changed, 1 deletion(-) diff --git a/beetsplug/playlist.py b/beetsplug/playlist.py index 464d69caf..3b8ca94c9 100644 --- a/beetsplug/playlist.py +++ b/beetsplug/playlist.py @@ -21,7 +21,6 @@ import beets from beets.util import pathlib_as_posix - class PlaylistQuery(beets.dbcore.Query): """Matches files listed by a playlist file. """ From 68ccfe0e6c62419010b09c5fbbcebf2dc36223dc Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:54:54 +0200 Subject: [PATCH 08/16] Review: Add missing blank line --- test/test_files.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_files.py b/test/test_files.py index 87e4862f3..969026b0f 100644 --- a/test/test_files.py +++ b/test/test_files.py @@ -194,6 +194,7 @@ class HelperTest(_common.TestCase): p = 'a/b/c' a = ['a', 'b', 'c'] self.assertEqual(util.components(p), a) + def test_forward_slash(self): p = r'C:\a\b\c' a = r'C:/a/b/c' From 076a82daa6f52dcc1176b3ae3b4b37dfabfaf8ef Mon Sep 17 00:00:00 2001 From: MartyLake Date: Tue, 23 Jul 2019 23:56:39 +0200 Subject: [PATCH 09/16] Review: Rename method --- beets/util/__init__.py | 2 +- beetsplug/playlist.py | 6 +++--- beetsplug/smartplaylist.py | 4 ++-- test/test_files.py | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/beets/util/__init__.py b/beets/util/__init__.py index 2890576fd..aae14ee63 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -222,7 +222,7 @@ def sorted_walk(path, ignore=(), ignore_hidden=False, logger=None): for res in sorted_walk(cur, ignore, ignore_hidden, logger): yield res -def pathlib_as_posix(path): +def path_as_posix(path): """Return the string representation of the path with forward (/) slashes. """ diff --git a/beetsplug/playlist.py b/beetsplug/playlist.py index 3b8ca94c9..302ddb56d 100644 --- a/beetsplug/playlist.py +++ b/beetsplug/playlist.py @@ -18,7 +18,7 @@ import os import fnmatch import tempfile import beets -from beets.util import pathlib_as_posix +from beets.util import path_as_posix class PlaylistQuery(beets.dbcore.Query): @@ -163,7 +163,7 @@ class PlaylistPlugin(beets.plugins.BeetsPlugin): new_path = self.changes[beets.util.normpath(lookup)] except KeyError: if self.config['forward_slash']: - line = pathlib_as_posix(line) + line = path_as_posix(line) tempfp.write(line) else: if new_path is None: @@ -176,7 +176,7 @@ class PlaylistPlugin(beets.plugins.BeetsPlugin): new_path = os.path.relpath(new_path, base_dir) line = line.replace(original_path, new_path) if self.config['forward_slash']: - line = pathlib_as_posix(line) + line = path_as_posix(line) tempfp.write(line) if changes or deletions: diff --git a/beetsplug/smartplaylist.py b/beetsplug/smartplaylist.py index 757879770..4ffdd21e7 100644 --- a/beetsplug/smartplaylist.py +++ b/beetsplug/smartplaylist.py @@ -21,7 +21,7 @@ from __future__ import division, absolute_import, print_function from beets.plugins import BeetsPlugin from beets import ui from beets.util import (mkdirall, normpath, sanitize_path, syspath, - bytestring_path, pathlib_as_posix) + bytestring_path, path_as_posix) from beets.library import Item, Album, parse_query_string from beets.dbcore import OrQuery from beets.dbcore.query import MultipleSort, ParsingError @@ -208,7 +208,7 @@ class SmartPlaylistPlugin(BeetsPlugin): with open(syspath(m3u_path), 'wb') as f: for path in m3us[m3u]: if self.config['forward_slash'].get(): - path = pathlib_as_posix(path) + path = path_as_posix(path) f.write(path + b'\n') self._log.info(u"{0} playlists updated", len(self._matched_playlists)) diff --git a/test/test_files.py b/test/test_files.py index 969026b0f..6a6fa3531 100644 --- a/test/test_files.py +++ b/test/test_files.py @@ -198,7 +198,7 @@ class HelperTest(_common.TestCase): def test_forward_slash(self): p = r'C:\a\b\c' a = r'C:/a/b/c' - self.assertEqual(util.pathlib_as_posix(p), a) + self.assertEqual(util.path_as_posix(p), a) class AlbumFileTest(_common.TestCase): From 5f9a394ca9b4f04c612b054baf102dda3ceedfce Mon Sep 17 00:00:00 2001 From: Paul Malcolm Date: Tue, 23 Jul 2019 19:55:28 -0400 Subject: [PATCH 10/16] Issue #2860 Fetch more acousticbrainz fields --- beetsplug/acousticbrainz.py | 8 ++++++++ docs/plugins/acousticbrainz.rst | 2 ++ test/test_acousticbrainz.py | 4 +++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/beetsplug/acousticbrainz.py b/beetsplug/acousticbrainz.py index 01f3ac6ac..725e0d634 100644 --- a/beetsplug/acousticbrainz.py +++ b/beetsplug/acousticbrainz.py @@ -74,6 +74,9 @@ ABSCHEME = { 'sad': 'mood_sad' } }, + 'moods_mirex': { + 'value': 'moods_mirex' + }, 'ismir04_rhythm': { 'value': 'rhythm' }, @@ -82,6 +85,9 @@ ABSCHEME = { 'tonal': 'tonal' } }, + 'timbre': { + 'value': 'timbre' + }, 'voice_instrumental': { 'value': 'voice_instrumental' }, @@ -124,7 +130,9 @@ class AcousticPlugin(plugins.BeetsPlugin): 'mood_party': types.Float(6), 'mood_relaxed': types.Float(6), 'mood_sad': types.Float(6), + 'moods_mirex': types.STRING, 'rhythm': types.Float(6), + 'timbre': types.STRING, 'tonal': types.Float(6), 'voice_instrumental': types.STRING, } diff --git a/docs/plugins/acousticbrainz.rst b/docs/plugins/acousticbrainz.rst index 7c24ffe0d..7d7aed237 100644 --- a/docs/plugins/acousticbrainz.rst +++ b/docs/plugins/acousticbrainz.rst @@ -38,7 +38,9 @@ these fields: * ``mood_party`` * ``mood_relaxed`` * ``mood_sad`` +* ``moods_mirex`` * ``rhythm`` +* ``timbre`` * ``tonal`` * ``voice_instrumental`` diff --git a/test/test_acousticbrainz.py b/test/test_acousticbrainz.py index 0b1407581..4c0b0137b 100644 --- a/test/test_acousticbrainz.py +++ b/test/test_acousticbrainz.py @@ -95,7 +95,9 @@ class MapDataToSchemeTest(unittest.TestCase): ('danceable', 0.143928021193), ('rhythm', 'VienneseWaltz'), ('mood_electronic', 0.339881360531), - ('mood_happy', 0.0894767045975) + ('mood_happy', 0.0894767045975), + ('moods_mirex', "Cluster3"), + ('timbre', "bright") } self.assertEqual(mapping, expected) From aa176255512be698bddb8c66c1c9924b155561d6 Mon Sep 17 00:00:00 2001 From: Paul Malcolm Date: Tue, 23 Jul 2019 19:56:02 -0400 Subject: [PATCH 11/16] changelog entry: additional acousticbrainz fields --- docs/changelog.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 2b6740d48..cd6863781 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -42,6 +42,10 @@ New features: new ``discogs_albumid`` field from the Discogs API. Thanks to :user:`thedevilisinthedetails`. :bug:`465` :bug:`3322` +* :doc:`/plugins/acousticbrainz`: The plugin now fetches two more additional + fields: ``moods_mirex`` and ``timbre``. + Thanks to :user:`malcops`. + :bug:`2860` Fixes: From c52973e1c06470ff9ecd948c51b85620c54a2712 Mon Sep 17 00:00:00 2001 From: MartyLake Date: Wed, 24 Jul 2019 09:53:54 +0200 Subject: [PATCH 12/16] Review: Adds missing point to finish sentences --- docs/plugins/playlist.rst | 2 +- docs/plugins/smartplaylist.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/plugins/playlist.rst b/docs/plugins/playlist.rst index 4cc226265..5abbe6dcf 100644 --- a/docs/plugins/playlist.rst +++ b/docs/plugins/playlist.rst @@ -49,4 +49,4 @@ other configuration options are: - **forward_slah**: Forces forward slashes in the generated playlist files. If you intend to use this plugin to generate playlists for MPD on Windows, set this to yes. - Default: Use system separator + Default: Use system separator. diff --git a/docs/plugins/smartplaylist.rst b/docs/plugins/smartplaylist.rst index 3d7e7a77b..2aef5e8f8 100644 --- a/docs/plugins/smartplaylist.rst +++ b/docs/plugins/smartplaylist.rst @@ -100,4 +100,4 @@ other configuration options are: - **forward_slah**: Forces forward slashes in the generated playlist files. If you intend to use this plugin to generate playlists for MPD on Windows, set this to yes. - Default: Use system separator + Default: Use system separator. From 7ee11b0f1a6ea6adf23ef82957ed1c2e092c30e4 Mon Sep 17 00:00:00 2001 From: MartyLake Date: Wed, 24 Jul 2019 10:08:40 +0200 Subject: [PATCH 13/16] Review: add missing lines --- beets/util/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/beets/util/__init__.py b/beets/util/__init__.py index aae14ee63..bb84aedc7 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -222,12 +222,14 @@ def sorted_walk(path, ignore=(), ignore_hidden=False, logger=None): for res in sorted_walk(cur, ignore, ignore_hidden, logger): yield res + def path_as_posix(path): """Return the string representation of the path with forward (/) slashes. """ return path.replace(b'\\', b'/') + def mkdirall(path): """Make all the enclosing directories of path (like mkdir -p on the parent). From 819f03f0e046bbad14d911bafa054a204101b41a Mon Sep 17 00:00:00 2001 From: MartyLake Date: Wed, 24 Jul 2019 10:11:32 +0200 Subject: [PATCH 14/16] Add special case for string --- beets/util/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/beets/util/__init__.py b/beets/util/__init__.py index bb84aedc7..cc23b6874 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -227,6 +227,8 @@ def path_as_posix(path): """Return the string representation of the path with forward (/) slashes. """ + if isinstance(path, str): + return path.replace('\\', '/') return path.replace(b'\\', b'/') From fb9666017133cd3951d8b993c9eef35a76d7753f Mon Sep 17 00:00:00 2001 From: MartyLake Date: Wed, 24 Jul 2019 18:09:54 +0200 Subject: [PATCH 15/16] Review: simpler implementation and test Because **all** the path are bytestrings --- beets/util/__init__.py | 2 -- test/test_files.py | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/beets/util/__init__.py b/beets/util/__init__.py index cc23b6874..bb84aedc7 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -227,8 +227,6 @@ def path_as_posix(path): """Return the string representation of the path with forward (/) slashes. """ - if isinstance(path, str): - return path.replace('\\', '/') return path.replace(b'\\', b'/') diff --git a/test/test_files.py b/test/test_files.py index 6a6fa3531..f31779672 100644 --- a/test/test_files.py +++ b/test/test_files.py @@ -196,8 +196,8 @@ class HelperTest(_common.TestCase): self.assertEqual(util.components(p), a) def test_forward_slash(self): - p = r'C:\a\b\c' - a = r'C:/a/b/c' + p = br'C:\a\b\c' + a = br'C:/a/b/c' self.assertEqual(util.path_as_posix(p), a) From 9392256993b0cf6f4e2a545d9c504decb71542d9 Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Wed, 24 Jul 2019 22:13:53 -0400 Subject: [PATCH 16/16] Spelling & changelog for #3334 --- docs/changelog.rst | 5 +++++ docs/plugins/playlist.rst | 2 +- docs/plugins/smartplaylist.rst | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index cd6863781..e6e846eef 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -46,6 +46,11 @@ New features: fields: ``moods_mirex`` and ``timbre``. Thanks to :user:`malcops`. :bug:`2860` +* :doc:`/plugins/playlist` and :doc:`/plugins/smartplaylist`: A new + ``forward_slash`` config option facilitates compatibility with MPD on + Windows. + Thanks to :user:`MartyLake`. + :bug:`3331` :bug:`3334` Fixes: diff --git a/docs/plugins/playlist.rst b/docs/plugins/playlist.rst index 5abbe6dcf..31609cb3c 100644 --- a/docs/plugins/playlist.rst +++ b/docs/plugins/playlist.rst @@ -46,7 +46,7 @@ other configuration options are: set it to ``playlist`` to use the playlist's parent directory or to ``library`` to use the library directory. Default: ``library`` -- **forward_slah**: Forces forward slashes in the generated playlist files. +- **forward_slash**: Forces forward slashes in the generated playlist files. If you intend to use this plugin to generate playlists for MPD on Windows, set this to yes. Default: Use system separator. diff --git a/docs/plugins/smartplaylist.rst b/docs/plugins/smartplaylist.rst index 2aef5e8f8..dd3ee45ba 100644 --- a/docs/plugins/smartplaylist.rst +++ b/docs/plugins/smartplaylist.rst @@ -14,7 +14,7 @@ Then configure your smart playlists like the following example:: smartplaylist: relative_to: ~/Music playlist_dir: ~/.mpd/playlists - forward_slah: no + forward_slash: no playlists: - name: all.m3u query: '' @@ -97,7 +97,7 @@ other configuration options are: directory. If you intend to use this plugin to generate playlists for MPD, point this to your MPD music directory. Default: Use absolute paths. -- **forward_slah**: Forces forward slashes in the generated playlist files. +- **forward_slash**: Forces forward slashes in the generated playlist files. If you intend to use this plugin to generate playlists for MPD on Windows, set this to yes. Default: Use system separator.