@@ -10,6 +10,32 @@ type DiscordRpcModule = typeof import("@discord-rpc");
1010let nativeSmtc : NativeSmtcModule | null = null ;
1111let discordRpcNative : DiscordRpcModule | null = null ;
1212
13+ /**
14+ * 注册 IPC 处理函数
15+ * @param module 模块
16+ * @param moduleName 模块名称
17+ * @param channel 信道
18+ * @param handler 处理函数
19+ * @param errorContext 错误上下文
20+ */
21+ const registerHandler = < M , K extends keyof IpcChannelMap > (
22+ module : M | null ,
23+ moduleName : string ,
24+ channel : K ,
25+ handler : ( module : M , payload : IpcChannelMap [ K ] ) => void ,
26+ errorContext : string ,
27+ ) => {
28+ ipcMain . on ( channel , ( _ , payload : IpcChannelMap [ K ] ) => {
29+ if ( module ) {
30+ try {
31+ handler ( module , payload ) ;
32+ } catch ( e ) {
33+ processLog . error ( `[${ moduleName } ] ${ errorContext } 失败` , e ) ;
34+ }
35+ }
36+ } ) ;
37+ } ;
38+
1339export default function initSmtcIpc ( ) {
1440 // 加载 SMTC 原生模块(仅 Windows)
1541 nativeSmtc = loadNativeModule ( "smtc-for-splayer.node" , "smtc-for-splayer" ) ;
@@ -53,91 +79,71 @@ export default function initSmtcIpc() {
5379 }
5480 }
5581
56- // 注册原生 SMTC 事件处理器
57- const registerNativeSmtcHandler = < K extends keyof IpcChannelMap > (
58- channel : K ,
59- handler : ( module : NativeSmtcModule , payload : IpcChannelMap [ K ] ) => void ,
60- errorContext : string ,
61- ) => {
62- ipcMain . on ( channel , ( _ , payload : IpcChannelMap [ K ] ) => {
63- if ( nativeSmtc ) {
64- try {
65- handler ( nativeSmtc , payload ) ;
66- } catch ( e ) {
67- processLog . error ( `[SMTC] ${ errorContext } 失败` , e ) ;
68- }
69- }
70- } ) ;
71- } ;
72-
73- // 注册 Discord RPC 事件处理器
74- const registerDiscordRpcHandler = < K extends keyof IpcChannelMap > (
75- channel : K ,
76- handler : ( module : DiscordRpcModule , payload : IpcChannelMap [ K ] ) => void ,
77- errorContext : string ,
78- ) => {
79- ipcMain . on ( channel , ( _ , payload : IpcChannelMap [ K ] ) => {
80- if ( discordRpcNative ) {
81- try {
82- handler ( discordRpcNative , payload ) ;
83- } catch ( e ) {
84- processLog . error ( `[Discord RPC] ${ errorContext } 失败` , e ) ;
85- }
86- }
87- } ) ;
88- } ;
89-
9082 // 元数据 - Discord
91- registerDiscordRpcHandler (
83+ registerHandler (
84+ discordRpcNative ,
85+ "Discord RPC" ,
9286 "discord-update-metadata" ,
9387 ( mod , payload ) => mod . updateMetadata ( payload ) ,
9488 "updateMetadata" ,
9589 ) ;
9690
9791 // 元数据 - Native SMTC
98- registerNativeSmtcHandler (
92+ registerHandler (
93+ nativeSmtc ,
94+ "SMTC" ,
9995 "smtc-update-metadata" ,
10096 ( mod , payload ) => mod . updateMetadata ( payload ) ,
10197 "updateMetadata" ,
10298 ) ;
10399
104100 // 播放状态 - Discord
105- registerDiscordRpcHandler (
101+ registerHandler (
102+ discordRpcNative ,
103+ "Discord RPC" ,
106104 "discord-update-play-state" ,
107105 ( mod , payload ) => mod . updatePlayState ( payload ) ,
108106 "updatePlayState" ,
109107 ) ;
110108
111109 // 播放状态 - Native SMTC
112- registerNativeSmtcHandler (
110+ registerHandler (
111+ nativeSmtc ,
112+ "SMTC" ,
113113 "smtc-update-play-state" ,
114114 ( mod , payload ) => mod . updatePlayState ( payload ) ,
115115 "updatePlayState" ,
116116 ) ;
117117
118118 // 进度信息 - Discord
119- registerDiscordRpcHandler (
119+ registerHandler (
120+ discordRpcNative ,
121+ "Discord RPC" ,
120122 "discord-update-timeline" ,
121123 ( mod , payload ) => mod . updateTimeline ( payload ) ,
122124 "updateTimeline" ,
123125 ) ;
124126
125127 // 进度信息 - Native SMTC
126- registerNativeSmtcHandler (
128+ registerHandler (
129+ nativeSmtc ,
130+ "SMTC" ,
127131 "smtc-update-timeline" ,
128132 ( mod , payload ) => mod . updateTimeline ( payload ) ,
129133 "updateTimeline" ,
130134 ) ;
131135
132136 // 播放模式 - Native SMTC
133- registerNativeSmtcHandler (
137+ registerHandler (
138+ nativeSmtc ,
139+ "SMTC" ,
134140 "smtc-update-play-mode" ,
135141 ( mod , payload ) => mod . updatePlayMode ( payload ) ,
136142 "updatePlayMode" ,
137143 ) ;
138144
139145 // Discord - 开启
140- ipcMain . on ( "smtc -enable-discord " , ( ) => {
146+ ipcMain . on ( "discord -enable" , ( ) => {
141147 if ( discordRpcNative ) {
142148 try {
143149 discordRpcNative . enable ( ) ;
@@ -148,7 +154,7 @@ export default function initSmtcIpc() {
148154 } ) ;
149155
150156 // Discord - 关闭
151- ipcMain . on ( "smtc -disable-discord " , ( ) => {
157+ ipcMain . on ( "discord -disable" , ( ) => {
152158 if ( discordRpcNative ) {
153159 try {
154160 discordRpcNative . disable ( ) ;
@@ -159,8 +165,10 @@ export default function initSmtcIpc() {
159165 } ) ;
160166
161167 // Discord - 更新配置
162- registerDiscordRpcHandler (
163- "smtc-update-discord-config" ,
168+ registerHandler (
169+ discordRpcNative ,
170+ "Discord RPC" ,
171+ "discord-update-config" ,
164172 ( mod , payload ) => mod . updateConfig ( payload ) ,
165173 "updateConfig" ,
166174 ) ;
0 commit comments