feat(api-server): add optional params for search (#3440)

This commit is contained in:
Franz DC
2025-06-30 11:46:43 +08:00
committed by GitHub
parent a702a3284c
commit 89479a5045
4 changed files with 22 additions and 15 deletions

View File

@ -754,8 +754,8 @@ export const register = (
return ctx.body(null);
});
app.openapi(routes.search, async (ctx) => {
const { query } = ctx.req.valid('json');
const response = await controller.search(query);
const { query, params, continuation } = ctx.req.valid('json');
const response = await controller.search(query, params, continuation);
ctx.status(200);
return ctx.json(response as object);

View File

@ -2,4 +2,6 @@ import { z } from '@hono/zod-openapi';
export const SearchSchema = z.object({
query: z.string(),
params: z.string().optional(),
continuation: z.string().optional(),
});

View File

@ -134,12 +134,12 @@ export default (win: BrowserWindow) => {
},
clearQueue: () => win.webContents.send('ytmd:clear-queue'),
search: (query: string) =>
search: (query: string, params?: string, continuation?: string) =>
new Promise((resolve) => {
ipcMain.once('ytmd:search-results', (_, result) => {
resolve(result as string);
});
win.webContents.send('ytmd:search', query);
win.webContents.send('ytmd:search', query, params, continuation);
}),
};
};

View File

@ -277,20 +277,25 @@ async function onApiLoaded() {
});
});
window.ipcRenderer.on('ytmd:search', async (_, query: string) => {
const app = document.querySelector<YouTubeMusicAppElement>('ytmusic-app');
const searchBox =
document.querySelector<SearchBoxElement>('ytmusic-search-box');
window.ipcRenderer.on(
'ytmd:search',
async (_, query: string, params?: string, continuation?: string) => {
const app = document.querySelector<YouTubeMusicAppElement>('ytmusic-app');
const searchBox =
document.querySelector<SearchBoxElement>('ytmusic-search-box');
if (!app || !searchBox) return;
if (!app || !searchBox) return;
const result = await app.networkManager.fetch('/search', {
query,
suggestStats: searchBox.getSearchboxStats(),
});
const result = await app.networkManager.fetch('/search', {
query,
params,
continuation,
suggestStats: searchBox.getSearchboxStats(),
});
window.ipcRenderer.send('ytmd:search-results', result);
});
window.ipcRenderer.send('ytmd:search-results', result);
},
);
const video = document.querySelector('video')!;
const audioContext = new AudioContext();