mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
properly implement Jellyfin getSongDetail (#298)
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user