Open API 新增播放器播放/暂停、切歌、收藏当前播放歌曲调用,详情看开放API文档 (原始 PR #2077)
parent
86af25bde3
commit
489bbb6902
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
- 新增托盘图标颜色 跟随系统亮暗模式 设置,可以在 设置-其他 启用 (#2016)
|
- 新增托盘图标颜色 跟随系统亮暗模式 设置,可以在 设置-其他 启用 (#2016)
|
||||||
- 支持本地同名 `krc` 格式歌词文件的读取(#2053)
|
- 支持本地同名 `krc` 格式歌词文件的读取(#2053)
|
||||||
|
- Open API 新增播放器播放/暂停、切歌、收藏当前播放歌曲调用,详情看开放API文档 (原始 PR #2077)
|
||||||
|
|
||||||
### 优化
|
### 优化
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,19 @@ import http from 'node:http'
|
||||||
import querystring from 'node:querystring'
|
import querystring from 'node:querystring'
|
||||||
import type { Socket } from 'node:net'
|
import type { Socket } from 'node:net'
|
||||||
import { getAddress } from '@common/utils/nodejs'
|
import { getAddress } from '@common/utils/nodejs'
|
||||||
|
import { sendTaskbarButtonClick } from '@main/modules/winMain'
|
||||||
|
|
||||||
|
const sendResponse = (res: http.ServerResponse, code = 200, msg: string | Record<any, unknown> = '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 = {
|
let status: LX.OpenAPI.Status = {
|
||||||
status: false,
|
status: false,
|
||||||
|
@ -37,10 +50,7 @@ const handleSendStatus = (res: http.ServerResponse<http.IncomingMessage>, query?
|
||||||
const keys = parseFilter(querystring.parse(query ?? '').filter)
|
const keys = parseFilter(querystring.parse(query ?? '').filter)
|
||||||
const resp: Partial<Record<SubscribeKeys, any>> = {}
|
const resp: Partial<Record<SubscribeKeys, any>> = {}
|
||||||
for (const k of keys) resp[k] = global.lx.player_status[k]
|
for (const k of keys) resp[k] = global.lx.player_status[k]
|
||||||
res.setHeader('Content-Type', 'application/json; charset=utf-8')
|
sendResponse(res, 200, resp, 'application/json; charset=utf-8')
|
||||||
res.setHeader('Access-Control-Allow-Origin', '*')
|
|
||||||
res.writeHead(200)
|
|
||||||
res.end(JSON.stringify(resp))
|
|
||||||
}
|
}
|
||||||
const handleSubscribePlayerStatus = (req: http.IncomingMessage, res: http.ServerResponse<http.IncomingMessage>, query?: string) => {
|
const handleSubscribePlayerStatus = (req: http.IncomingMessage, res: http.ServerResponse<http.IncomingMessage>, query?: string) => {
|
||||||
res.writeHead(200, {
|
res.writeHead(200, {
|
||||||
|
@ -67,8 +77,8 @@ const handleStartServer = async(port: number, ip: string) => new Promise<void>((
|
||||||
playerStatusKeys = Object.keys(global.lx.player_status) as SubscribeKeys[]
|
playerStatusKeys = Object.keys(global.lx.player_status) as SubscribeKeys[]
|
||||||
httpServer = http.createServer((req, res): void => {
|
httpServer = http.createServer((req, res): void => {
|
||||||
const [endUrl, query] = `/${req.url?.split('/').at(-1) ?? ''}`.split('?')
|
const [endUrl, query] = `/${req.url?.split('/').at(-1) ?? ''}`.split('?')
|
||||||
let code
|
let code = 200
|
||||||
let msg
|
let msg = 'OK'
|
||||||
switch (endUrl) {
|
switch (endUrl) {
|
||||||
case '/status':
|
case '/status':
|
||||||
handleSendStatus(res, query)
|
handleSendStatus(res, query)
|
||||||
|
@ -118,11 +128,26 @@ const handleStartServer = async(port: number, ip: string) => new Promise<void>((
|
||||||
// </html>`
|
// </html>`
|
||||||
// break
|
// break
|
||||||
case '/lyric':
|
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
|
msg = global.lx.player_status.lyric
|
||||||
break
|
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':
|
case '/subscribe-player-status':
|
||||||
try {
|
try {
|
||||||
handleSubscribePlayerStatus(req, res, query)
|
handleSubscribePlayerStatus(req, res, query)
|
||||||
|
@ -138,9 +163,7 @@ const handleStartServer = async(port: number, ip: string) => new Promise<void>((
|
||||||
msg = 'Forbidden'
|
msg = 'Forbidden'
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if (!code) return
|
sendResponse(res, code, msg)
|
||||||
res.writeHead(code)
|
|
||||||
res.end(msg)
|
|
||||||
})
|
})
|
||||||
httpServer.on('error', error => {
|
httpServer.on('error', error => {
|
||||||
console.log(error)
|
console.log(error)
|
||||||
|
|
Loading…
Reference in New Issue