-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
smartplaylist: change encoding of additional field #5563
base: master
Are you sure you want to change the base?
smartplaylist: change encoding of additional field #5563
Conversation
Thank you for the PR! The changelog has not been updated, so here is a friendly reminder to check if you need to add an entry. |
25fe712
to
2a48922
Compare
dccfd83
to
ddcc2e1
Compare
Finding stuff about m3u(8) on the internet is difficult. Been there done that ;-) There is no real official standard about things. What i found useful is to look around what people do in the forums of VLC media player. I did not find the article I was looking for but I recall that I found threads there about when and how VLC is using url encoding and the opinion of the main developer. It might help, or confuse further. Hope it helps though! :-) |
ddcc2e1
to
a524f6a
Compare
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).
a524f6a
to
efd9ece
Compare
I just realized that in the docs for these parts of Also do the same with the paragraph below, describing how the resulting |
Description
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; see here and here).I introduced the generation of additional EXTM3U item fields earlier this year and I want to correct that now.
cc @j000
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 am adjusting correspondingly).
To Do
docs/
to describe it.)docs/changelog.rst
to the bottom of one of the lists near the top of the document.)