beets/test
Max Goltzsche 5d96509cfe
smartplaylist: change encoding of additional field
URL-encode additional item `fields` within generated EXTM3U playlists instead of JSON-encoding them.
This is because JSON-encoding additional fields/attributes made it difficult to parse the `EXTINF` line but using URL-encoding for these values makes parsing easy (because URL-encoded values cannot contain commas, quotation marks and spaces).

I introduced the generation of additional EXTM3U item fields earlier this year and I want to correct that now.

**Design/definition background:**
Unfortunately, I didn't find a clear definition of how additional playlist item attributes should be encoded - apparently there is none.
Given that item URIs within an M3U playlist can be URL-encoded already, defining the values of additional attributes to be URL-encoded is consistent design.
I didn't find examples of additional EXTM3U item attributes in the web where the attribute value contains a comma, space or quotation mark but examples that specified numeric IDs and URLs as attribute values.
Because the URL attribute examples I found didn't contain URL-encoded characters and because it is more readable and unproblematic for parsing, I've let the attribute URL encoding treat `:` and `/` as safe characters.

**Breaking change:**
While this is a breaking change in theory, in practice it is not since afaik all integrations of the smartplaylist plugin's additional EXTM3U item attribute generation feature (beets-webm3u) work with simple attribute values such as the item ID (numeric) whose formatting/encoding is not affected when changing from JSON to URL-encoding.
In other words the change is backward-compatible with the beets-webm3u plugin (which I'll adjust correspondingly after this beets PR was merged).
2025-02-01 01:14:27 +01:00
..
plugins smartplaylist: change encoding of additional field 2025-02-01 01:14:27 +01:00
rsrc Remove redundant lyrics test files 2025-01-19 01:32:17 +00:00
__init__.py Remove unused imports 2021-08-26 20:59:48 +10:00
conftest.py Configure integrated lyrics tests to only run on lyrics code changes 2025-01-19 01:48:03 +00:00
test_art_resize.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_autotag.py item assignment: set track distance configuration in tests explicitly 2024-12-31 08:13:13 +00:00
test_config_command.py Update CI config, minimum ruff version, docs and add changelog note 2024-12-10 06:10:03 +00:00
test_datequery.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_dbcore.py Use table-qualified names in any field query 2025-01-19 01:09:11 +00:00
test_files.py Clarify test_unsuccessful_reflink error message 2024-09-05 04:32:13 +01:00
test_hidden.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_importer.py fix #4840 and add to test case 2024-11-06 23:14:47 -05:00
test_library.py Remove _common.album and use Album instead 2024-10-16 12:37:22 +01:00
test_logging.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_m3ufile.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_mb.py Make this test ignore my local beets config 2024-08-12 08:49:30 +01:00
test_metasync.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_pipeline.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_plugins.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_query.py Use table-qualified names in any field query 2025-01-19 01:09:11 +00:00
test_release.py Fix release formatting for new versions of pandoc 2025-01-13 05:21:01 +00:00
test_sort.py lint 2024-12-31 15:14:32 -08:00
test_template.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_ui.py Ignore this test 2025-01-13 22:48:14 +00:00
test_ui_commands.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_ui_importer.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_ui_init.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_util.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_vfs.py Reformat the codebase 2024-09-21 11:57:48 +01:00
testall.py Remove def suite TestLoader definitions 2024-07-28 18:58:51 +01:00