mirror of
https://github.com/beetbox/beets.git
synced 2026-01-30 12:02:41 +01:00
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). |
||
|---|---|---|
| .. | ||
| plugins | ||
| rsrc | ||
| __init__.py | ||
| conftest.py | ||
| test_art_resize.py | ||
| test_autotag.py | ||
| test_config_command.py | ||
| test_datequery.py | ||
| test_dbcore.py | ||
| test_files.py | ||
| test_hidden.py | ||
| test_importer.py | ||
| test_library.py | ||
| test_logging.py | ||
| test_m3ufile.py | ||
| test_mb.py | ||
| test_metasync.py | ||
| test_pipeline.py | ||
| test_plugins.py | ||
| test_query.py | ||
| test_release.py | ||
| test_sort.py | ||
| test_template.py | ||
| test_ui.py | ||
| test_ui_commands.py | ||
| test_ui_importer.py | ||
| test_ui_init.py | ||
| test_util.py | ||
| test_vfs.py | ||
| testall.py | ||