mirror of
https://github.com/jeffvli/feishin.git
synced 2024-11-20 14:37:06 +01:00
[bugfix]: fix jellyfin add to playlist
This commit is contained in:
parent
297d6f0d2e
commit
d1bcd2b2fb
@ -63,6 +63,7 @@ import { JFSongListSort, JFSortOrder } from '/@/renderer/api/jellyfin.types';
|
|||||||
import isElectron from 'is-electron';
|
import isElectron from 'is-electron';
|
||||||
import { ServerFeature } from '/@/renderer/api/features-types';
|
import { ServerFeature } from '/@/renderer/api/features-types';
|
||||||
import { VersionInfo, getFeatures } from '/@/renderer/api/utils';
|
import { VersionInfo, getFeatures } from '/@/renderer/api/utils';
|
||||||
|
import chunk from 'lodash/chunk';
|
||||||
|
|
||||||
const formatCommaDelimitedString = (value: string[]) => {
|
const formatCommaDelimitedString = (value: string[]) => {
|
||||||
return value.join(',');
|
return value.join(',');
|
||||||
@ -473,6 +474,11 @@ const getSongList = async (args: SongListArgs): Promise<SongListResponse> => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Limit the query to 50 at a time to be *extremely* conservative on the
|
||||||
|
// length of the full URL, since the ids are part of the query string and
|
||||||
|
// not the POST body
|
||||||
|
const MAX_ITEMS_PER_PLAYLIST_ADD = 50;
|
||||||
|
|
||||||
const addToPlaylist = async (args: AddToPlaylistArgs): Promise<AddToPlaylistResponse> => {
|
const addToPlaylist = async (args: AddToPlaylistArgs): Promise<AddToPlaylistResponse> => {
|
||||||
const { query, body, apiClientProps } = args;
|
const { query, body, apiClientProps } = args;
|
||||||
|
|
||||||
@ -480,13 +486,16 @@ const addToPlaylist = async (args: AddToPlaylistArgs): Promise<AddToPlaylistResp
|
|||||||
throw new Error('No userId found');
|
throw new Error('No userId found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const chunks = chunk(body.songId, MAX_ITEMS_PER_PLAYLIST_ADD);
|
||||||
|
|
||||||
|
for (const chunk of chunks) {
|
||||||
const res = await jfApiClient(apiClientProps).addToPlaylist({
|
const res = await jfApiClient(apiClientProps).addToPlaylist({
|
||||||
body: null,
|
body: null,
|
||||||
params: {
|
params: {
|
||||||
id: query.id,
|
id: query.id,
|
||||||
},
|
},
|
||||||
query: {
|
query: {
|
||||||
Ids: body.songId,
|
Ids: chunk.join(','),
|
||||||
UserId: apiClientProps.server?.userId,
|
UserId: apiClientProps.server?.userId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -494,6 +503,7 @@ const addToPlaylist = async (args: AddToPlaylistArgs): Promise<AddToPlaylistResp
|
|||||||
if (res.status !== 204) {
|
if (res.status !== 204) {
|
||||||
throw new Error('Failed to add to playlist');
|
throw new Error('Failed to add to playlist');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
@ -503,19 +513,23 @@ const removeFromPlaylist = async (
|
|||||||
): Promise<RemoveFromPlaylistResponse> => {
|
): Promise<RemoveFromPlaylistResponse> => {
|
||||||
const { query, apiClientProps } = args;
|
const { query, apiClientProps } = args;
|
||||||
|
|
||||||
|
const chunks = chunk(query.songId, MAX_ITEMS_PER_PLAYLIST_ADD);
|
||||||
|
|
||||||
|
for (const chunk of chunks) {
|
||||||
const res = await jfApiClient(apiClientProps).removeFromPlaylist({
|
const res = await jfApiClient(apiClientProps).removeFromPlaylist({
|
||||||
body: null,
|
body: null,
|
||||||
params: {
|
params: {
|
||||||
id: query.id,
|
id: query.id,
|
||||||
},
|
},
|
||||||
query: {
|
query: {
|
||||||
EntryIds: query.songId,
|
EntryIds: chunk.join(','),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.status !== 204) {
|
if (res.status !== 204) {
|
||||||
throw new Error('Failed to remove from playlist');
|
throw new Error('Failed to remove from playlist');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
@ -609,14 +609,14 @@ const addToPlaylist = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const addToPlaylistParameters = z.object({
|
const addToPlaylistParameters = z.object({
|
||||||
Ids: z.array(z.string()),
|
Ids: z.string(),
|
||||||
UserId: z.string(),
|
UserId: z.string(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const removeFromPlaylist = z.null();
|
const removeFromPlaylist = z.null();
|
||||||
|
|
||||||
const removeFromPlaylistParameters = z.object({
|
const removeFromPlaylistParameters = z.object({
|
||||||
EntryIds: z.array(z.string()),
|
EntryIds: z.string(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const deletePlaylist = z.null();
|
const deletePlaylist = z.null();
|
||||||
|
Loading…
Reference in New Issue
Block a user