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); return ctx.body(null);
}); });
app.openapi(routes.search, async (ctx) => { app.openapi(routes.search, async (ctx) => {
const { query } = ctx.req.valid('json'); const { query, params, continuation } = ctx.req.valid('json');
const response = await controller.search(query); const response = await controller.search(query, params, continuation);
ctx.status(200); ctx.status(200);
return ctx.json(response as object); return ctx.json(response as object);

View File

@ -2,4 +2,6 @@ import { z } from '@hono/zod-openapi';
export const SearchSchema = z.object({ export const SearchSchema = z.object({
query: z.string(), 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'), clearQueue: () => win.webContents.send('ytmd:clear-queue'),
search: (query: string) => search: (query: string, params?: string, continuation?: string) =>
new Promise((resolve) => { new Promise((resolve) => {
ipcMain.once('ytmd:search-results', (_, result) => { ipcMain.once('ytmd:search-results', (_, result) => {
resolve(result as string); 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) => { window.ipcRenderer.on(
const app = document.querySelector<YouTubeMusicAppElement>('ytmusic-app'); 'ytmd:search',
const searchBox = async (_, query: string, params?: string, continuation?: string) => {
document.querySelector<SearchBoxElement>('ytmusic-search-box'); 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', { const result = await app.networkManager.fetch('/search', {
query, query,
suggestStats: searchBox.getSearchboxStats(), 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 video = document.querySelector('video')!;
const audioContext = new AudioContext(); const audioContext = new AudioContext();