name: Smart Playlist guid: dd2326e3-4d3e-4bfc-80e6-28502c1131df version: 0.4.0.0 targetAbi: 10.10.3.0 framework: net8.0 owner: redxef overview: Smart playlists with Lisp filter engine. description: | Create smart playlists with a Lisp filter engine. The same playlist definition can be used for multiple users. category: "General" artifacts: - jellyfin-smart-playlist.dll - YamlDotNet.dll changelog: | ## v0.4.0.0 - Add a basic UI to configure the playlists. - It's now possible to print log messages to the jellyfin log by calling `logd`, `logi`, `logw` or `loge` for the respective levels `debug`, `info`, `warning` or `error`. - Allow calling generic methods via `(invoke-generic object methodname args list-of-types)`. - Add quoting via single quote: `'`. - Add special case for `(quote
)` to be rendered as `'`. - It is now possible to include comments in the source via a semicolon (`;`). - Respect the `Enabled` flag and only process the playlists that are enabled. - New methods have been added: `rand`, `shuf`. - Add `find-artist`, `get-name` and `find-parent` default definitions. - Update YamlDotNet to v16.2.1. **Breaking changes**: - Rename global environment variables to be enclosed by `*`. **Fixes**: - The initialization of the executor now contains the same default definitions for the SortProgram and the normal Program. - The progress report now considers the SmartPlaylists and not the individual playlists per user. - It is now possible to pass builtins as arguments. Previously to get `(qsort > (list 1 2 3))` one had to write something like this: `(qsort (lambda (a b) (> a b)) (list 1 2 3))`. - A program no longer has to be a list, `t` is a valid program. - Fix list parsing in cases where a space was before the closing parenthesis. ## v0.3.0.0 - Add a second program (`SortProgram`) which is run after the filtering, this program should return the list of items, but in the order in which they should appear in the playlist. The default is `(begin items)` which returns the list as is. - Extend builtin lisp definitions: add `qsort` and string comparison methods - Extend default program definitions: add `all-genres` and `any-genres` to quickly specify a list of genres which to include (or excluding when negating) - Update Jellyfin to v 10.10.3 **Fixes**: - The progress report now correctly gives a percentage in the range [0, 100]. ## v0.2.2.0 - Update Jellyfin to v 10.10.2 ## v0.2.1.0 - Make default program configuration a textarea in the settings page - Add convinience definitions: `is-type`, `name-contains` - Update YamlDotNet to v 16.2.0 **Fixes**: - The default program was malformed, a closing bracket was at the wrong position - The `haskeys` function could only be called on Objects ## v0.2.0.0 - Switch to yaml loading, old json files are still accepted - Rework lisp interpreter to be more conventional - Use arbitrary strings as ids for playlists - Add configuration page with some default definitions for the filter expressions. **Breaking Changes**: - The lisp interpreter will now only detect strings in double quotes (`"`). - The interpreter will also not allow specifying lists without quoting them. `(1 2 3)` ... used to work but will no longer, replace by either specifying the list as `(list 1 2 3)` or `(quote (1 2 3))`. ## v0.1.1.0 - Initial Alpha release.