From 91715829a4d19da854a874966abb7038370ae188 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 12 Oct 2024 09:48:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/modules/openApi/index.ts | 119 +++++++++++------- src/renderer/core/player/index.ts | 1 - .../core/player/registerRendererEvents.ts | 17 --- src/renderer/core/useApp/useDataInit.ts | 4 - 4 files changed, 77 insertions(+), 64 deletions(-) delete mode 100644 src/renderer/core/player/registerRendererEvents.ts diff --git a/src/main/modules/openApi/index.ts b/src/main/modules/openApi/index.ts index 44d86b7c..17d87d11 100644 --- a/src/main/modules/openApi/index.ts +++ b/src/main/modules/openApi/index.ts @@ -1,10 +1,20 @@ -import http, { type ServerResponse} from 'node:http' +import http from 'node:http' import querystring from 'node:querystring' import type { Socket } from 'node:net' import { getAddress } from '@common/utils/nodejs' -import { mainSend } from '@common/mainIpc' -import { BrowserWindow } from 'electron' -import { PLAYER_EVENT_NAME } from '@common/ipcNames' +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, @@ -40,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, { @@ -68,61 +75,89 @@ const handleSubscribePlayerStatus = (req: http.IncomingMessage, res: http.Server const handleStartServer = async(port: number, ip: string) => new Promise((resolve, reject) => { playerStatusKeys = Object.keys(global.lx.player_status) as SubscribeKeys[] - const browserWindow = BrowserWindow.getFocusedWindow() as BrowserWindow; httpServer = http.createServer((req, res): void => { const [endUrl, query] = `/${req.url?.split('/').at(-1) ?? ''}`.split('?') - const setResponse = (res: ServerResponse, code: number, contentType: string, msg: string | object) => { - res.setHeader('Content-Type', contentType || 'text/plain; charset=utf-8') - res.setHeader('Access-Control-Allow-Origin', '*') - res.statusCode = code || 200 - if (typeof msg === 'object') { - res.end(JSON.stringify(msg)); - } else { - res.end(msg); - } - } + let code = 200 + let msg = 'OK' switch (endUrl) { case '/status': handleSendStatus(res, query) return + // case '/test': + // code = 200 + // res.setHeader('Content-Type', 'text/html; charset=utf-8') + // msg = ` + // + // + // + // + // + // Nodejs Server-Sent Events + // + // + //

Hello SSE!

- case '/play': - mainSend(browserWindow, PLAYER_EVENT_NAME.player_play) - setResponse(res, 200, 'text/plain; charset=utf-8', 'OK') - break + //

List of Server-sent events

+ //
    - case '/pause': - mainSend(browserWindow, PLAYER_EVENT_NAME.player_pause) - setResponse(res, 200, 'text/plain; charset=utf-8', 'OK') - break + // + // + // ` + // break 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 - case '/subscribe-player-status': try { handleSubscribePlayerStatus(req, res, query) + return } catch (err) { - console.error(err) - setResponse(res, 500, 'text/plain; charset=utf-8', 'Error') + console.log(err) + code = 500 + msg = 'Error' } break - default: - setResponse(res, 401, 'text/plain; charset=utf-8', 'Forbidden') + code = 401 + msg = 'Forbidden' break } + sendResponse(res, code, msg) }) httpServer.on('error', error => { console.log(error) diff --git a/src/renderer/core/player/index.ts b/src/renderer/core/player/index.ts index 27b1c2ca..a63dbe4d 100644 --- a/src/renderer/core/player/index.ts +++ b/src/renderer/core/player/index.ts @@ -1,3 +1,2 @@ export * from './action' export * from './timeoutStop' -export * from './registerRendererEvents' diff --git a/src/renderer/core/player/registerRendererEvents.ts b/src/renderer/core/player/registerRendererEvents.ts deleted file mode 100644 index e6606b26..00000000 --- a/src/renderer/core/player/registerRendererEvents.ts +++ /dev/null @@ -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() }) - } -} diff --git a/src/renderer/core/useApp/useDataInit.ts b/src/renderer/core/useApp/useDataInit.ts index cc9e7a71..98ce2912 100644 --- a/src/renderer/core/useApp/useDataInit.ts +++ b/src/renderer/core/useApp/useDataInit.ts @@ -10,7 +10,6 @@ import { onBeforeUnmount } from '@common/utils/vueTools' import { appSetting } from '@renderer/store/setting' import { playMusicInfo } from '@renderer/store/player/state' import { initDislikeInfo, registerRemoteDislikeAction } from '@renderer/core/dislikeList' -import { registerPlayerAction } from '@renderer/core/player/' const initPrevPlayInfo = async() => { const info = await getPlayInfo() @@ -35,12 +34,10 @@ export default () => { let unregister: null | (() => void) = null let unregisterDislikeEvent: null | (() => void) = null - let unregisterPlayerEvent: null | (() => void) = null onBeforeUnmount(() => { if (unregister) unregister() if (unregisterDislikeEvent) unregisterDislikeEvent() - if (unregisterPlayerEvent) unregisterPlayerEvent() }) return async() => { @@ -55,7 +52,6 @@ export default () => { }) window.lxData.userLists = await getUserLists() // 获取用户列表 unregisterDislikeEvent = registerRemoteDislikeAction() - unregisterPlayerEvent = registerPlayerAction() // 注册播放器相关操作 await initDislikeInfo() // 获取不喜欢列表 await initPrevPlayInfo().catch(err => { log.error(err)