126 lines
4.8 KiB
Markdown
126 lines
4.8 KiB
Markdown
# Subsonic / OpenSubsonic compatibility
|
|
|
|
VibeSonic aims to eventually implement the Subsonic API (`/rest/*`) and
|
|
OpenSubsonic extensions. **Phase 1 implements none of this** — it only
|
|
builds the foundation (database schema, stable IDs, library indexing,
|
|
streaming, cover art) that the protocol layer will sit on top of in a
|
|
later phase.
|
|
|
|
This matrix will be filled in as `internal/subsonic` and
|
|
`internal/opensubsonic` are implemented. For now, every endpoint is
|
|
"Not yet implemented."
|
|
|
|
## System
|
|
|
|
| Endpoint | Status |
|
|
|---|---|
|
|
| `ping` | Not yet implemented |
|
|
| `getLicense` | Not yet implemented |
|
|
|
|
## Browsing (filesystem-style)
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getMusicFolders` | Not yet implemented | `music_folders` table and `internal/database` queries exist |
|
|
| `getIndexes` | Not yet implemented | `internal/library.ListDirectory` provides the foundation |
|
|
| `getMusicDirectory` | Not yet implemented | same |
|
|
|
|
## Browsing (ID3/tag-style)
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getArtists` | Not yet implemented | `database.ListArtists` exists |
|
|
| `getArtist` | Not yet implemented | `database.ListAlbumsByArtist` exists |
|
|
| `getAlbum` | Not yet implemented | `database.ListSongsByAlbum` exists |
|
|
| `getSong` | Not yet implemented | `database.GetSong` exists |
|
|
| `getGenres` | Not yet implemented | `database.ListGenres` exists |
|
|
| `getAlbumList` / `getAlbumList2` | Not yet implemented | |
|
|
| `getRandomSongs` | Not yet implemented | |
|
|
| `getSongsByGenre` | Not yet implemented | |
|
|
|
|
## Search
|
|
|
|
| Endpoint | Status |
|
|
|---|---|
|
|
| `search3` | Not yet implemented |
|
|
|
|
## Streaming / media retrieval
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `stream` | Not yet implemented | `internal/streaming` provides range-request-aware serving; the web UI's `/stream/{id}` route is the non-Subsonic equivalent used today |
|
|
| `download` | Not yet implemented | |
|
|
| `getCoverArt` | Not yet implemented | `internal/coverart` provides discovery + resize cache; the web UI's `/cover-art/{id}` route is the non-Subsonic equivalent used today |
|
|
| `getLyrics` / `getLyricsBySongId` | Not yet implemented | `lyrics`/`lyrics_lines`/`lyrics_cues` tables exist |
|
|
| `getAvatar` | Not yet implemented | |
|
|
|
|
## Playlists
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getPlaylists` | Not yet implemented | `database.ListPlaylistsVisibleToUser` exists; web UI has a playlists page |
|
|
| `getPlaylist` | Not yet implemented | |
|
|
| `createPlaylist` | Not yet implemented | |
|
|
| `updatePlaylist` | Not yet implemented | |
|
|
| `deletePlaylist` | Not yet implemented | |
|
|
|
|
## Favorites / ratings / activity
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `star` / `unstar` | Not yet implemented | `database.Star`/`Unstar` exist; web UI has favorite buttons |
|
|
| `setRating` | Not yet implemented | `database.SetRating` exists |
|
|
| `scrobble` | Not yet implemented | `scrobbles` table exists |
|
|
| `getStarred` / `getStarred2` | Not yet implemented | |
|
|
| `getNowPlaying` | Not yet implemented | `now_playing` table + `database.ListNowPlaying` exist |
|
|
|
|
## Bookmarks / play queue
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getBookmarks` / `createBookmark` / `deleteBookmark` | Not yet implemented | `database` functions exist |
|
|
| `getPlayQueue` / `savePlayQueue` | Not yet implemented | `database` functions exist |
|
|
|
|
## Sharing
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getShares` / `createShare` / `updateShare` / `deleteShare` | Not yet implemented | `shares`/`share_items` tables exist |
|
|
|
|
## Podcasts
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getPodcasts` | Not yet implemented | `podcast_channels`/`podcast_episodes` tables exist |
|
|
| `createPodcastChannel` / `deletePodcastChannel` | Not yet implemented | |
|
|
| `downloadPodcastEpisode` / `deletePodcastEpisode` | Not yet implemented | |
|
|
|
|
## Internet radio
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getInternetRadioStations` | Not yet implemented | `internet_radio_stations` table exists |
|
|
| `createInternetRadioStation` / `updateInternetRadioStation` / `deleteInternetRadioStation` | Not yet implemented | |
|
|
|
|
## Users / chat
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| `getUser` / `getUsers` | Not yet implemented | native web admin has a users page |
|
|
| `createUser` / `updateUser` / `deleteUser` | Not yet implemented | |
|
|
| `addChatMessage` / `getChatMessages` | Not yet implemented | `chat_messages` table exists |
|
|
|
|
## Transcoding
|
|
|
|
| Endpoint | Status | Notes |
|
|
|---|---|---|
|
|
| Transcoding profiles (`internal/transcoding`) | Not yet implemented | `transcode_profiles` table exists; Phase 1 only supports direct (non-transcoded) streaming |
|
|
|
|
## Authentication
|
|
|
|
Phase 1's `/rest/*` authentication (token-based `u`/`t`/`s` or API key)
|
|
is not yet implemented. When it is, it will authenticate independently
|
|
of the browser session/CSRF/external-auth flow used by the web UI, per
|
|
the project's design constraint that external auth must never interfere
|
|
with native Subsonic client authentication.
|