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