优化代码

This commit is contained in:
lyswhut 2024-10-12 09:48:08 +08:00
parent a0fad0767e
commit 91715829a4
4 changed files with 77 additions and 64 deletions

View File

@ -1,10 +1,20 @@
import http, { type ServerResponse} from 'node:http' 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 { mainSend } from '@common/mainIpc' import { sendTaskbarButtonClick } from '@main/modules/winMain'
import { BrowserWindow } from 'electron'
import { PLAYER_EVENT_NAME } from '@common/ipcNames' 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,
@ -40,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, {
@ -68,61 +75,89 @@ const handleSubscribePlayerStatus = (req: http.IncomingMessage, res: http.Server
const handleStartServer = async(port: number, ip: string) => new Promise<void>((resolve, reject) => { const handleStartServer = async(port: number, ip: string) => new Promise<void>((resolve, reject) => {
playerStatusKeys = Object.keys(global.lx.player_status) as SubscribeKeys[] playerStatusKeys = Object.keys(global.lx.player_status) as SubscribeKeys[]
const browserWindow = BrowserWindow.getFocusedWindow() as BrowserWindow;
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('?')
const setResponse = (res: ServerResponse, code: number, contentType: string, msg: string | object) => { let code = 200
res.setHeader('Content-Type', contentType || 'text/plain; charset=utf-8') let msg = 'OK'
res.setHeader('Access-Control-Allow-Origin', '*')
res.statusCode = code || 200
if (typeof msg === 'object') {
res.end(JSON.stringify(msg));
} else {
res.end(msg);
}
}
switch (endUrl) { switch (endUrl) {
case '/status': case '/status':
handleSendStatus(res, query) handleSendStatus(res, query)
return return
// case '/test':
// code = 200
// res.setHeader('Content-Type', 'text/html; charset=utf-8')
// msg = `<!DOCTYPE html>
// <html lang="en">
// <head>
// <meta charset="UTF-8" />
// <meta http-equiv="X-UA-Compatible" content="IE=edge" />
// <meta name="viewport" content="width=device-width, initial-scale=1.0" />
// <title>Nodejs Server-Sent Events</title>
// </head>
// <body>
// <h1>Hello SSE!</h1>
case '/play': // <h2>List of Server-sent events</h2>
mainSend(browserWindow, PLAYER_EVENT_NAME.player_play) // <ul id="sse-list"></ul>
setResponse(res, 200, 'text/plain; charset=utf-8', 'OK')
break
case '/pause': // <script>
mainSend(browserWindow, PLAYER_EVENT_NAME.player_pause) // const subscription = new EventSource('/subscribe-player-status');
setResponse(res, 200, 'text/plain; charset=utf-8', 'OK')
break
case '/play-prev': // // Default events
mainSend(browserWindow, PLAYER_EVENT_NAME.invoke_play_prev) // subscription.addEventListener('open', () => {
setResponse(res, 200, 'text/plain; charset=utf-8', 'OK') // console.log('Connection opened')
break // });
case '/play-next':
mainSend(browserWindow, PLAYER_EVENT_NAME.invoke_play_next)
setResponse(res, 200, 'text/plain; charset=utf-8', 'OK')
break
// subscription.addEventListener('error', (err) => {
// console.error(err)
// });
// subscription.addEventListener('lyricLineText', (event) => {
// console.log(event.data)
// });
// subscription.addEventListener('progress', (event) => {
// console.log(event.data)
// });
// subscription.addEventListener('name', (event) => {
// console.log(event.data)
// });
// subscription.addEventListener('singer', (event) => {
// console.log(event.data)
// });
// </script>
// </body>
// </html>`
// break
case '/lyric': case '/lyric':
setResponse(res, 200, 'text/plain; charset=utf-8', global.lx.player_status.lyric) 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 break
case '/subscribe-player-status': case '/subscribe-player-status':
try { try {
handleSubscribePlayerStatus(req, res, query) handleSubscribePlayerStatus(req, res, query)
return
} catch (err) { } catch (err) {
console.error(err) console.log(err)
setResponse(res, 500, 'text/plain; charset=utf-8', 'Error') code = 500
msg = 'Error'
} }
break break
default: default:
setResponse(res, 401, 'text/plain; charset=utf-8', 'Forbidden') code = 401
msg = 'Forbidden'
break break
} }
sendResponse(res, code, msg)
}) })
httpServer.on('error', error => { httpServer.on('error', error => {
console.log(error) console.log(error)

View File

@ -1,3 +1,2 @@
export * from './action' export * from './action'
export * from './timeoutStop' export * from './timeoutStop'
export * from './registerRendererEvents'

View File

@ -1,17 +0,0 @@
import { pause, play, playPrev, playNext } from '@renderer/core/player/index'
import { PLAYER_EVENT_NAME } from '@common/ipcNames'
import { rendererOff, rendererOn } from '@common/rendererIpc'
export const registerPlayerAction = () => {
rendererOn(PLAYER_EVENT_NAME.player_play, play)
rendererOn(PLAYER_EVENT_NAME.player_pause, pause)
rendererOn(PLAYER_EVENT_NAME.invoke_play_prev, () => { playPrev() })
rendererOn(PLAYER_EVENT_NAME.invoke_play_next, () => { playNext() })
return () => {
rendererOff(PLAYER_EVENT_NAME.player_play, play)
rendererOff(PLAYER_EVENT_NAME.player_pause, pause)
rendererOff(PLAYER_EVENT_NAME.invoke_play_prev, () => { playPrev() })
rendererOff(PLAYER_EVENT_NAME.invoke_play_next, () => { playNext() })
}
}

View File

@ -10,7 +10,6 @@ import { onBeforeUnmount } from '@common/utils/vueTools'
import { appSetting } from '@renderer/store/setting' import { appSetting } from '@renderer/store/setting'
import { playMusicInfo } from '@renderer/store/player/state' import { playMusicInfo } from '@renderer/store/player/state'
import { initDislikeInfo, registerRemoteDislikeAction } from '@renderer/core/dislikeList' import { initDislikeInfo, registerRemoteDislikeAction } from '@renderer/core/dislikeList'
import { registerPlayerAction } from '@renderer/core/player/'
const initPrevPlayInfo = async() => { const initPrevPlayInfo = async() => {
const info = await getPlayInfo() const info = await getPlayInfo()
@ -35,12 +34,10 @@ export default () => {
let unregister: null | (() => void) = null let unregister: null | (() => void) = null
let unregisterDislikeEvent: null | (() => void) = null let unregisterDislikeEvent: null | (() => void) = null
let unregisterPlayerEvent: null | (() => void) = null
onBeforeUnmount(() => { onBeforeUnmount(() => {
if (unregister) unregister() if (unregister) unregister()
if (unregisterDislikeEvent) unregisterDislikeEvent() if (unregisterDislikeEvent) unregisterDislikeEvent()
if (unregisterPlayerEvent) unregisterPlayerEvent()
}) })
return async() => { return async() => {
@ -55,7 +52,6 @@ export default () => {
}) })
window.lxData.userLists = await getUserLists() // 获取用户列表 window.lxData.userLists = await getUserLists() // 获取用户列表
unregisterDislikeEvent = registerRemoteDislikeAction() unregisterDislikeEvent = registerRemoteDislikeAction()
unregisterPlayerEvent = registerPlayerAction() // 注册播放器相关操作
await initDislikeInfo() // 获取不喜欢列表 await initDislikeInfo() // 获取不喜欢列表
await initPrevPlayInfo().catch(err => { await initPrevPlayInfo().catch(err => {
log.error(err) log.error(err)