properly implement Jellyfin getSongDetail (#298)

This commit is contained in:
Kendall Garner 2023-10-17 23:05:44 +00:00 committed by GitHub
parent c7aa5d09c9
commit 5fdf4c06f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 2 deletions

View file

@ -128,7 +128,7 @@ const endpoints: ApiController = {
getPlaylistList: jfController.getPlaylistList,
getPlaylistSongList: jfController.getPlaylistSongList,
getRandomSongList: jfController.getRandomSongList,
getSongDetail: undefined,
getSongDetail: jfController.getSongDetail,
getSongList: jfController.getSongList,
getTopSongs: jfController.getTopSongList,
getUserList: undefined,

View file

@ -160,7 +160,7 @@ export const contract = c.router({
},
getSongDetail: {
method: 'GET',
path: 'song/:id',
path: 'users/:userId/items/:id',
responses: {
200: jfType._response.song,
400: jfType._response.error,

View file

@ -47,6 +47,8 @@ import {
LyricsArgs,
LyricsResponse,
genreListSortMap,
SongDetailArgs,
SongDetailResponse,
} from '/@/renderer/api/types';
import { jfApiClient } from '/@/renderer/api/jellyfin/jellyfin-api';
import { jfNormalize } from './jellyfin-normalize';
@ -940,6 +942,23 @@ const getLyrics = async (args: LyricsArgs): Promise<LyricsResponse> => {
return res.body.Lyrics.map((lyric) => [lyric.Start! / 1e4, lyric.Text]);
};
const getSongDetail = async (args: SongDetailArgs): Promise<SongDetailResponse> => {
const { query, apiClientProps } = args;
const res = await jfApiClient(apiClientProps).getSongDetail({
params: {
id: query.id,
userId: apiClientProps.server?.userId ?? '',
},
});
if (res.status !== 200) {
throw new Error('Failed to get song detail');
}
return jfNormalize.song(res.body, apiClientProps.server, '');
};
export const jfController = {
addToPlaylist,
authenticate,
@ -959,6 +978,7 @@ export const jfController = {
getPlaylistList,
getPlaylistSongList,
getRandomSongList,
getSongDetail,
getSongList,
getTopSongList,
removeFromPlaylist,