Commit graph

8 commits

Author SHA1 Message Date
Deluan
ce7e7513fb fix(jellyfin): map LastPlayedDate and omit zero track/disc numbers 2026-07-05 14:46:12 -04:00
Deluan
2a18863c06 feat(jellyfin): advertise Jellyfin-compatible version, brand ServerName with Navidrome version 2026-07-05 14:38:43 -04:00
Deluan
da9bb25313 test(jellyfin): cover GenreToBaseItem mapper 2026-07-05 14:27:14 -04:00
Deluan
2e0e3264c7 feat(jellyfin): add Jellyfin DTOs and model mappers
Adds BaseItemDto, QueryResult, UserItemDataDto, UserDto,
AuthenticationResult, MediaSourceInfo, PlaybackInfoResponse,
NameGuidPair and SessionInfo DTOs to server/jellyfin/dto, plus
model-to-DTO mappers for songs, albums, artists and genres that
later browse/stream/write endpoints will consume.
2026-07-05 14:26:24 -04:00
Deluan
8a4b7d1221 feat(jellyfin): wire and mount the router behind Jellyfin.Enabled
Add jellyfin.New to the shared Wire provider set and a
CreateJellyfinAPIRouter injector, then mount the router at /jellyfin
in startServer(), gated by conf.Server.Jellyfin.Enabled, mirroring the
existing LastFM/ListenBrainz router mounts.
2026-07-05 14:18:39 -04:00
Deluan
73376f519d fix(jellyfin): memoize stable server Id and cover get-or-create path 2026-07-05 14:13:18 -04:00
Deluan
910c239e29 test(jellyfin): cover ping and quickConnectEnabled handlers
Both were added alongside the System/Info/Public handshake endpoint but
had no direct test coverage.
2026-07-05 14:05:09 -04:00
Deluan
b38750fd5b feat(jellyfin): package skeleton with System handshake endpoints
Adds server/jellyfin: the Router (mirrors server/subsonic and
server/public), its Wire-friendly New(...) constructor, a chi routes()
table, and the ok() JSON response helper. Implements the unauthenticated
handshake surface Jellyfin clients probe first: GET /System/Info/Public,
GET+POST /System/Ping, and GET /QuickConnect/Enabled (quick connect is
unsupported, so it always reports disabled).

The public info payload's Id must be stable across restarts (Jellyfin
clients cache ServerId), so it reuses the get-or-create Property pattern
already used for InsightsID in core/metrics/insights.go: fetch
consts.JellyfinServerIDKey from the Property repository, generating and
persisting a new UUID on first read. A dedicated key (rather than the
existing InsightsID) keeps the anonymous telemetry identifier from being
exposed on this unauthenticated endpoint.
2026-07-05 14:03:40 -04:00