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, getPlaylistList: jfController.getPlaylistList,
getPlaylistSongList: jfController.getPlaylistSongList, getPlaylistSongList: jfController.getPlaylistSongList,
getRandomSongList: jfController.getRandomSongList, getRandomSongList: jfController.getRandomSongList,
getSongDetail: undefined, getSongDetail: jfController.getSongDetail,
getSongList: jfController.getSongList, getSongList: jfController.getSongList,
getTopSongs: jfController.getTopSongList, getTopSongs: jfController.getTopSongList,
getUserList: undefined, getUserList: undefined,

View file

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

View file

@ -47,6 +47,8 @@ import {
LyricsArgs, LyricsArgs,
LyricsResponse, LyricsResponse,
genreListSortMap, genreListSortMap,
SongDetailArgs,
SongDetailResponse,
} from '/@/renderer/api/types'; } from '/@/renderer/api/types';
import { jfApiClient } from '/@/renderer/api/jellyfin/jellyfin-api'; import { jfApiClient } from '/@/renderer/api/jellyfin/jellyfin-api';
import { jfNormalize } from './jellyfin-normalize'; 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]); 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 = { export const jfController = {
addToPlaylist, addToPlaylist,
authenticate, authenticate,
@ -959,6 +978,7 @@ export const jfController = {
getPlaylistList, getPlaylistList,
getPlaylistSongList, getPlaylistSongList,
getRandomSongList, getRandomSongList,
getSongDetail,
getSongList, getSongList,
getTopSongList, getTopSongList,
removeFromPlaylist, removeFromPlaylist,