mirror of
https://github.com/jeffvli/feishin.git
synced 2026-08-08 21:32:59 +02:00
add library rescan to server selector menu
This commit is contained in:
@@ -1046,6 +1046,18 @@ export const controller: GeneralController = {
|
||||
server.type,
|
||||
)?.(addContext({ ...args, apiClientProps: { ...args.apiClientProps, server } }));
|
||||
},
|
||||
startLibraryScan(args) {
|
||||
const server = getServerById(args.apiClientProps.serverId);
|
||||
|
||||
if (!server) {
|
||||
throw new Error(`${i18n.t('error.apiRouteError')}: startLibraryScan`);
|
||||
}
|
||||
|
||||
return apiController(
|
||||
'startLibraryScan',
|
||||
server.type,
|
||||
)?.(addContext({ ...args, apiClientProps: { ...args.apiClientProps, server } }));
|
||||
},
|
||||
updateInternetRadioStation(args) {
|
||||
const server = getServerById(args.apiClientProps.serverId);
|
||||
|
||||
|
||||
@@ -314,7 +314,12 @@ export const contract = c.router({
|
||||
method: 'POST',
|
||||
path: 'Items/:id/Refresh',
|
||||
query: z.object({
|
||||
ImageRefreshMode: z.string().optional(),
|
||||
MetadataRefreshMode: z.string().optional(),
|
||||
Recursive: z.boolean().optional(),
|
||||
RegenerateTrickplay: z.boolean().optional(),
|
||||
ReplaceAllImages: z.boolean().optional(),
|
||||
ReplaceAllMetadata: z.boolean().optional(),
|
||||
}),
|
||||
responses: {
|
||||
204: z.null(),
|
||||
|
||||
@@ -1917,6 +1917,54 @@ export const JellyfinController: InternalControllerEndpoint = {
|
||||
|
||||
return null;
|
||||
},
|
||||
startLibraryScan: async (args) => {
|
||||
const { apiClientProps } = args;
|
||||
const server = apiClientProps.server;
|
||||
const userId = server?.userId;
|
||||
|
||||
if (!userId) {
|
||||
throw new Error('No userId found');
|
||||
}
|
||||
|
||||
let musicFolderIds = server.musicFolderId?.filter(Boolean) ?? [];
|
||||
|
||||
if (musicFolderIds.length === 0) {
|
||||
const res = await jfApiClient(apiClientProps).getMusicFolderList({
|
||||
params: { userId },
|
||||
});
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error('Failed to get music folders');
|
||||
}
|
||||
|
||||
musicFolderIds = res.body.Items.filter(
|
||||
(folder) => folder.CollectionType === jfType._enum.collection.MUSIC,
|
||||
).map((folder) => folder.Id);
|
||||
}
|
||||
|
||||
if (musicFolderIds.length === 0) {
|
||||
throw new Error('No music folders found');
|
||||
}
|
||||
|
||||
await Promise.all(
|
||||
musicFolderIds.map((id) =>
|
||||
jfApiClient(apiClientProps).refreshItem({
|
||||
body: null,
|
||||
params: { id },
|
||||
query: {
|
||||
ImageRefreshMode: 'Default',
|
||||
MetadataRefreshMode: 'Default',
|
||||
Recursive: true,
|
||||
RegenerateTrickplay: false,
|
||||
ReplaceAllImages: false,
|
||||
ReplaceAllMetadata: false,
|
||||
},
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
return null;
|
||||
},
|
||||
updateInternetRadioStation: async (args) => {
|
||||
const { apiClientProps, body, query } = args;
|
||||
|
||||
|
||||
@@ -1187,6 +1187,7 @@ export const NavidromeController: InternalControllerEndpoint = {
|
||||
id: res.body.data.id,
|
||||
};
|
||||
},
|
||||
startLibraryScan: SubsonicController.startLibraryScan,
|
||||
updateInternetRadioStation: async (args) => {
|
||||
const { apiClientProps, body, query } = args;
|
||||
|
||||
|
||||
@@ -2366,6 +2366,17 @@ export const SubsonicController: InternalControllerEndpoint = {
|
||||
|
||||
return null;
|
||||
},
|
||||
startLibraryScan: async (args) => {
|
||||
const { apiClientProps } = args;
|
||||
|
||||
const res = await ssApiClient(apiClientProps).startScan({ query: {} });
|
||||
|
||||
if (res.status !== 200) {
|
||||
throw new Error('Failed to start library scan');
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
updateInternetRadioStation: async (args) => {
|
||||
const { apiClientProps, body, query } = args;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user