navidrome/server/jellyfin
Deluan ca38e50c4f feat(jellyfin): playback reporting and scrobbling
Add /Sessions/Playing[/Progress|/Stopped] and /Sessions/Capabilities[/Full]
handlers, backed by core/scrobbler.PlayTracker. A new withPlayer middleware
resolves/registers a model.Player from the Emby DeviceId header (used
directly as the stable player id, unlike Subsonic's cookie fallback) and
injects it into the request context for scrobbling.

The Stopped report calls ReportPlayback with IgnoreScrobble to end the
now-playing session without double-counting, then calls Submit as the
single source of the play-count increment and external scrobble.
2026-07-05 17:05:43 -04:00
..
dto refactor(jellyfin): use new(x) builtin instead of intPtr helper 2026-07-05 15:03:23 -04:00
annotations.go feat(jellyfin): favorites and rating write-back with library access control 2026-07-05 16:51:02 -04:00
annotations_test.go feat(jellyfin): favorites and rating write-back with library access control 2026-07-05 16:51:02 -04:00
api.go feat(jellyfin): playback reporting and scrobbling 2026-07-05 17:05:43 -04:00
api_test.go feat(jellyfin): wire and mount the router behind Jellyfin.Enabled 2026-07-05 14:18:39 -04:00
auth.go fix(jellyfin): reject empty login password, wire ServerName, add negative auth tests 2026-07-05 15:01:02 -04:00
auth_test.go fix(jellyfin): reject empty login password, wire ServerName, add negative auth tests 2026-07-05 15:01:02 -04:00
browsing.go refactor(jellyfin): share resolveLibraryScope between items and artists 2026-07-05 16:16:26 -04:00
browsing_test.go refactor(jellyfin): share resolveLibraryScope between items and artists 2026-07-05 16:16:26 -04:00
images.go fix(jellyfin): let net/http sniff image Content-Type instead of forcing jpeg 2026-07-05 16:27:25 -04:00
images_test.go fix(jellyfin): let net/http sniff image Content-Type instead of forcing jpeg 2026-07-05 16:27:25 -04:00
items.go refactor(jellyfin): share resolveLibraryScope between items and artists 2026-07-05 16:16:26 -04:00
items_test.go test(jellyfin): cover admin library-access path and drop nil test contexts 2026-07-05 16:04:10 -04:00
jellyfin_suite_test.go feat(jellyfin): package skeleton with System handshake endpoints 2026-07-05 14:03:40 -04:00
library.go refactor(jellyfin): share resolveLibraryScope between items and artists 2026-07-05 16:16:26 -04:00
middlewares.go feat(jellyfin): playback reporting and scrobbling 2026-07-05 17:05:43 -04:00
middlewares_test.go fix(jellyfin): reject empty login password, wire ServerName, add negative auth tests 2026-07-05 15:01:02 -04:00
sessions.go feat(jellyfin): playback reporting and scrobbling 2026-07-05 17:05:43 -04:00
sessions_test.go feat(jellyfin): playback reporting and scrobbling 2026-07-05 17:05:43 -04:00
stream.go feat(jellyfin): audio streaming and PlaybackInfo with library access control 2026-07-05 16:33:48 -04:00
stream_test.go feat(jellyfin): audio streaming and PlaybackInfo with library access control 2026-07-05 16:33:48 -04:00
system.go feat(jellyfin): advertise Jellyfin-compatible version, brand ServerName with Navidrome version 2026-07-05 14:38:43 -04:00
system_test.go feat(jellyfin): advertise Jellyfin-compatible version, brand ServerName with Navidrome version 2026-07-05 14:38:43 -04:00
users.go feat(jellyfin): full multi-library support with per-user access scoping 2026-07-05 15:53:02 -04:00
users_test.go feat(jellyfin): full multi-library support with per-user access scoping 2026-07-05 15:53:02 -04:00