7 Commits
Author SHA1 Message Date
owen 866f243f1b weee 2026-08-23 14:13:18 -05:00
owenandClaude Sonnet 5 ec28053d36 Implement songLyrics extension: getLyricsBySongId with real word/syllable cues
Adds getLyricsBySongId (versions 1 and 2 of the songLyrics extension,
gated by the enhanced param): returns every stored structuredLyrics
entry for a song, including line-level start times for synced lyrics
and, only when a source actually provided word/syllable timing (an
Enhanced LRC sidecar) and enhanced=true was requested, cueLine/cue
data with the precomputed UTF-8 byte offsets. Plain and non-enhanced
synced lyrics never get fabricated cue data.

Removes the now-dead SetSongLyrics writer (superseded by
database.InsertLyrics); SongLyricsPlainText keeps serving the legacy
getLyrics endpoint unchanged.

Adds a scanner integration test proving a sidecar .lrc (with an
Enhanced LRC line) is discovered and indexed during a real scan.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014r98AtcBbevpscWLsfwVvv
2026-08-23 08:19:41 -05:00
owen 4a5add80b6 OpenSubsonic: playbackReport extension (reportPlayback), integrated with now-playing/history 2026-08-23 08:08:35 -05:00
owen d92a25b141 Subsonic: internet radio, chat, bookmarks, play queue, scanner status endpoints 2026-08-23 00:21:13 -05:00
owen c7b472ab99 Subsonic: media retrieval endpoints (stream, download, getCoverArt, getLyrics, getAvatar, hls, getCaptions) with real transcoding, embedded lyrics extraction, and folder permission enforcement 2026-08-23 00:15:00 -05:00
owen a297454065 Subsonic: album/song lists (getAlbumList/2, getRandomSongs, getSongsByGenre, getNowPlaying, getStarred/2) and search (search, search2, search3) 2026-08-23 00:08:06 -05:00
owen f40a011c46 Subsonic: browsing endpoints (getMusicFolders, getIndexes, getMusicDirectory, getGenres, getArtists/Artist, getAlbum, getSong, getVideos/VideoInfo, getArtistInfo/2, getAlbumInfo/2, getSimilarSongs/2, getTopSongs) 2026-08-23 00:06:08 -05:00