[PLUGIN] Jellyfin

Updated Jellyfin plugin v1.0.1, which you can find in the beta channel of plugin store.

What’s new

  • Support for multiple user accounts on same Jellyfin server
  • Gapless playback
  • Report playback state to Jellyfin server (intended for server-side scrobbler plugins)

The plugin has been rewritten in Typescript and utilizes the Jellyfin SDK library for API calls, hence the major version change. If you spot any regressions or bugs in general, please report them here or on the plugin’s Github repo.

To install from beta channel:

  • Uninstall current version.
  • Enable Plugins Test Mode in http://<volumio address>/dev
  • Restart Volumio.
  • Find the Jellyfin plugin in the plugin store. Click the Details button under it and choose latest beta version to install.

je vergeet er een yoki drink :laughing:

Updated v1.0.4:

  • Adding songs to and removing songs from Favorites in Volumio will also trigger update on Jellyfin server (you can choose to only update on server in plugin settings)
  • Album view: show similar albums
  • Artist view: show albums under ‘Albums’ (where artist is the album artist) and ‘Appears On’ (where artist is contributing artist)
  • General bug fixes

Notes about the Favorites feature

Due to Volumio’s sketchy, bug-ridden and inconsistent implementation of the Favorites feature, there are a few things you should note:

  1. In Volumio, clicking the heart icon of a song when browsing the library will mark it as favorite, but the heart icon will not stay ‘on’. You would have to navigate out of the view and then back in in order to see the updated status.
  2. Also on the browsing screen, clicking the heart icon of a song that has been marked favorite will not unmark it. You would have to do it in Volumio → Favorites. You can also unmark the song on the player screen while it is playing.
  3. When playing a song with the Jellyfin plugin, the favorite status is reflected correctly by the heart icon on the player screen. However, during this time if you mark or unmark another song from any source as favorite, the heart icon will change to show the updated status of that song instead.
  4. The heart icon on the player screen can be used to mark or unmark a song as favorite while it is playing. However, if the song is not playing, Volumio will bypass the custom logic implemented in the Jellyfin plugin. The result is that the favorite status of the song will not be updated on the Jellyfin server and the song’s URI added to Favorites will not be one canonicalized by the plugin.

Hi @patrickkfkan ,

Thanks for that great plugin I use since quite a while with no problems till recently ! I didn’t use it during few weeks as I was on travel and now when I use it I can’t change of page when browsing in Genre for example.
It displays first page when I access Genre and when I click on next page it just refreshes same page ! Same issue whatever I use the web browser on volumio, the mobile Volumio app or even through my home automation system that controls Volumio
Jellyfin server 10.8.1 (hosted on Internet)
Volumio 3.512
Plug in version: 1.0.6
Let me know if you need any tests or anything that can help to fix the issue ?

Thanks

Vincèn

Hi, could you send me some logs so I can see what’s happening?

sure here it is :wink: I did 3 clics on next page on Genre so you should get some datas for debug in logs below. Let me know if you need any other tests :wink:

Thanks

Starting Live Log...
info: Listing playlists
info: Listing playlists
info: CoreCommandRouter::executeOnPlugin: system , getPrivacySettings
info: CALLMETHOD: system_controller my_volumio retreiveBackendEventStates undefined
info: CoreCommandRouter::executeOnPlugin: my_volumio , retreiveBackendEventStates
info: Received Get System Version
info: CoreCommandRouter::executeOnPlugin: system , getSystemVersion
info: CALLMETHOD: system_controller system enableLiveLog true
info: CoreCommandRouter::executeOnPlugin: system , enableLiveLog
info: Launching a new LiveLog session
info: CoreCommandRouter::volumioGetState
info: CoreCommandRouter::volumioGetQueue
info: CoreStateMachine::getQueue
info: CorePlayQueue::getQueue
info: CoreCommandRouter::executeOnPlugin: jellyfin , handleBrowseUri
info: [jellyfin-browse] browseUri: jellyfin
info: Preload queue cleared
info: CoreCommandRouter::executeOnPlugin: jellyfin , handleBrowseUri
info: [jellyfin-browse] browseUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026
info: Preload queue cleared
info: Preload queue cleared
info: CoreCommandRouter::executeOnPlugin: jellyfin , handleBrowseUri
info: [jellyfin-browse] browseUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc
info: CoreCommandRouter::volumioGetState
info: Listing playlists
info: Listing playlists
info: Preload queue cleared
info: Preload queue cleared
info: Preload queue cleared
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=088fcd90a0ee2b8f11d51a9cc34d24f0
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=7075475f37d152b5aacfc9451f78845b
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=6c380d9cd0c95db856c44ea4df65b8ae
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=467f0773ccee61cb106bbb1bb2c3e150
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=c7ed7864c77fe869bd9f9f07b73edec2
info: Preload queue cleared
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=c7ed7864c77fe869bd9f9f07b73edec2
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=7075475f37d152b5aacfc9451f78845b
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=6c380d9cd0c95db856c44ea4df65b8ae
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=467f0773ccee61cb106bbb1bb2c3e150
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=088fcd90a0ee2b8f11d51a9cc34d24f0
info: Preload queue cleared
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=9b786438839a3770f6d4cf0682f9b30d
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=d4a2f252042bbfd3703a5620434f30b0
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=129541ab4f94d097bd4c5149f927f648
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=c7ccc780aaac33dcf8286b60e9dde5ac
info: Preloading song: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=afb350aa9952580f93262a373ecc0452
info: Exploding uri jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=9b786438839a3770f6d4cf0682f9b30d in service jellyfin
info: [jellyfin-browse] explodeUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=9b786438839a3770f6d4cf0682f9b30d
info: Exploding uri jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=d4a2f252042bbfd3703a5620434f30b0 in service jellyfin
info: [jellyfin-browse] explodeUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=d4a2f252042bbfd3703a5620434f30b0
info: Exploding uri jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=129541ab4f94d097bd4c5149f927f648 in service jellyfin
info: [jellyfin-browse] explodeUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=129541ab4f94d097bd4c5149f927f648
info: Exploding uri jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=c7ccc780aaac33dcf8286b60e9dde5ac in service jellyfin
info: [jellyfin-browse] explodeUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=c7ccc780aaac33dcf8286b60e9dde5ac
info: Exploding uri jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=afb350aa9952580f93262a373ecc0452 in service jellyfin
info: [jellyfin-browse] explodeUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/song@songId=afb350aa9952580f93262a373ecc0452
info: CoreCommandRouter::executeOnPlugin: jellyfin , handleBrowseUri
info: [jellyfin-browse] browseUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/genres@parentId=43d6ea74e04389601bd171db1aa31edc
info: Preload queue cleared
info: CoreCommandRouter::volumioGetState
info: CoreCommandRouter::executeOnPlugin: jellyfin , handleBrowseUri
info: [jellyfin-browse] browseUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/genres@parentId=43d6ea74e04389601bd171db1aa31edc@startIndex=47@noExplode=1
info: Preload queue cleared
info: CoreCommandRouter::executeOnPlugin: jellyfin , handleBrowseUri
info: [jellyfin-browse] browseUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/genres@parentId=43d6ea74e04389601bd171db1aa31edc@startIndex=47@noExplode=1
info: Preload queue cleared
info: CoreCommandRouter::volumioGetState
info: Listing playlists
info: Listing playlists
info: CoreCommandRouter::executeOnPlugin: jellyfin , handleBrowseUri
info: [jellyfin-browse] browseUri: jellyfin/vincen@fd578c24cb1d4dffa5db9f4d24e98026/library@parentId=43d6ea74e04389601bd171db1aa31edc/genres@parentId=43d6ea74e04389601bd171db1aa31edc@startIndex=47@noExplode=1
info: Preload queue cleared
info: CoreCommandRouter::volumioGetState
process exited with code null

The browseUri entries all show the same startIndex, so something is definitely wrong here.

Unfortunately, my Jellyfin server recently died (hardware problem) and I haven’t got around to fixing it yet. So it would probably be towards the end of next week before I could start working on this.

On the other hand, have you tried reinstalling the plugin followed by reboot, and also restart your Jellyfin server? If there’s a cache on your server, could you perhaps clear that as well?

oki so there is a bug somewhere :wink:

No problem :wink:

Jellyfin server has already been restarted few times and for plugin I uninstalled it, restarted volumio, reinstalled but still exactly the same :frowning:

@vincen ,

The pagination issue has been fixed in Jellyfin plugin v1.0.7. You can install it from beta channel of plugin store:

  • Uninstall current version.
  • Enable Plugins Test Mode in http://<volumio address>/dev
  • Find the Jellyfin plugin in the plugin store. Click the Details button under it and choose latest beta version to install.
  • Restart Volumio.

@Wheaten , is it still possible to move posts starting from [PLUGIN] Jellyfin Server - #7 to the Jellyfin plugin thread? Current thread is for the server plugin. Thanks.

Yes it is possible, give me a few minutes

1 Like

@patrickkfkan Thanks for the update. I’ll test it as soon as I’m back home in around 2 weeks and will let you know :wink:

@patrickkfkan Thanks for the update it’s all good now and works perfect with emby :+1: