From 489bbb6902ecbef22377d2d20fdd8b6e0bb7c043 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 12 Oct 2024 09:59:04 +0800 Subject: [PATCH] =?UTF-8?q?Open=20API=20=E6=96=B0=E5=A2=9E=E6=92=AD?= =?UTF-8?q?=E6=94=BE=E5=99=A8=E6=92=AD=E6=94=BE/=E6=9A=82=E5=81=9C?= =?UTF-8?q?=E3=80=81=E5=88=87=E6=AD=8C=E3=80=81=E6=94=B6=E8=97=8F=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E6=92=AD=E6=94=BE=E6=AD=8C=E6=9B=B2=E8=B0=83=E7=94=A8?= =?UTF-8?q?=EF=BC=8C=E8=AF=A6=E6=83=85=E7=9C=8B=E5=BC=80=E6=94=BEAPI?= =?UTF-8?q?=E6=96=87=E6=A1=A3=20(=E5=8E=9F=E5=A7=8B=20PR=20#2077)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/main/modules/openApi/index.ts | 47 +++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index bb18c613..2c5d03dc 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -2,6 +2,7 @@ - 新增托盘图标颜色 跟随系统亮暗模式 设置,可以在 设置-其他 启用 (#2016) - 支持本地同名 `krc` 格式歌词文件的读取(#2053) +- Open API 新增播放器播放/暂停、切歌、收藏当前播放歌曲调用,详情看开放API文档 (原始 PR #2077) ### 优化 diff --git a/src/main/modules/openApi/index.ts b/src/main/modules/openApi/index.ts index 342caa1f..ce2c59d3 100644 --- a/src/main/modules/openApi/index.ts +++ b/src/main/modules/openApi/index.ts @@ -2,6 +2,19 @@ import http from 'node:http' import querystring from 'node:querystring' import type { Socket } from 'node:net' import { getAddress } from '@common/utils/nodejs' +import { sendTaskbarButtonClick } from '@main/modules/winMain' + +const sendResponse = (res: http.ServerResponse, code = 200, msg: string | Record = 'OK', contentType = 'text/plain; charset=utf-8') => { + res.writeHead(code, { + 'Content-Type': contentType, + 'Access-Control-Allow-Origin': '*', + }) + if (typeof msg === 'object') { + res.end(JSON.stringify(msg)) + } else { + res.end(msg) + } +} let status: LX.OpenAPI.Status = { status: false, @@ -37,10 +50,7 @@ const handleSendStatus = (res: http.ServerResponse, query? const keys = parseFilter(querystring.parse(query ?? '').filter) const resp: Partial> = {} for (const k of keys) resp[k] = global.lx.player_status[k] - res.setHeader('Content-Type', 'application/json; charset=utf-8') - res.setHeader('Access-Control-Allow-Origin', '*') - res.writeHead(200) - res.end(JSON.stringify(resp)) + sendResponse(res, 200, resp, 'application/json; charset=utf-8') } const handleSubscribePlayerStatus = (req: http.IncomingMessage, res: http.ServerResponse, query?: string) => { res.writeHead(200, { @@ -67,8 +77,8 @@ const handleStartServer = async(port: number, ip: string) => new Promise(( playerStatusKeys = Object.keys(global.lx.player_status) as SubscribeKeys[] httpServer = http.createServer((req, res): void => { const [endUrl, query] = `/${req.url?.split('/').at(-1) ?? ''}`.split('?') - let code - let msg + let code = 200 + let msg = 'OK' switch (endUrl) { case '/status': handleSendStatus(res, query) @@ -118,11 +128,26 @@ const handleStartServer = async(port: number, ip: string) => new Promise(( // ` // break case '/lyric': - code = 200 - res.setHeader('Content-Type', 'text/plain; charset=utf-8') - res.setHeader('Access-Control-Allow-Origin', '*') msg = global.lx.player_status.lyric break + case '/play': + sendTaskbarButtonClick('play') + break + case '/pause': + sendTaskbarButtonClick('pause') + break + case '/skip-next': + sendTaskbarButtonClick('next') + break + case '/skip-prev': + sendTaskbarButtonClick('prev') + break + case '/collect': + sendTaskbarButtonClick('collect') + break + case '/uncollect': + sendTaskbarButtonClick('unCollect') + break case '/subscribe-player-status': try { handleSubscribePlayerStatus(req, res, query) @@ -138,9 +163,7 @@ const handleStartServer = async(port: number, ip: string) => new Promise(( msg = 'Forbidden' break } - if (!code) return - res.writeHead(code) - res.end(msg) + sendResponse(res, code, msg) }) httpServer.on('error', error => { console.log(error)