refactor: update IPC channel names for notifications

- Renamed IPC channels for notifications to improve clarity and consistency.
- Updated related handlers in the main process and preload scripts to reflect the new naming convention.
- Enhanced notification service to respect user settings before sending notifications.
This commit is contained in:
kangfenmao 2025-05-21 23:11:34 +08:00
parent b6675853ed
commit c49a262df6
4 changed files with 14 additions and 17 deletions

View File

@ -21,8 +21,8 @@ export enum IpcChannel {
App_InstallUvBinary = 'app:install-uv-binary', App_InstallUvBinary = 'app:install-uv-binary',
App_InstallBunBinary = 'app:install-bun-binary', App_InstallBunBinary = 'app:install-bun-binary',
App_Notification = 'app:notification', Notification_Send = 'notification:send',
App_OnNotificationClick = 'app:on-notification-click', Notification_OnClick = 'notification:on-click',
Webview_SetOpenLinkExternal = 'webview:set-open-link-external', Webview_SetOpenLinkExternal = 'webview:set-open-link-external',

View File

@ -204,10 +204,10 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) {
}) })
// notification // notification
ipcMain.handle(IpcChannel.App_Notification, async (_, notification: Notification) => { ipcMain.handle(IpcChannel.Notification_Send, async (_, notification: Notification) => {
await notificationService.sendNotification(notification) await notificationService.sendNotification(notification)
}) })
ipcMain.handle(IpcChannel.App_OnNotificationClick, (_, notification: Notification) => { ipcMain.handle(IpcChannel.Notification_OnClick, (_, notification: Notification) => {
mainWindow.webContents.send('notification-click', notification) mainWindow.webContents.send('notification-click', notification)
}) })

View File

@ -27,16 +27,7 @@ const api = {
getCacheSize: () => ipcRenderer.invoke(IpcChannel.App_GetCacheSize), getCacheSize: () => ipcRenderer.invoke(IpcChannel.App_GetCacheSize),
clearCache: () => ipcRenderer.invoke(IpcChannel.App_ClearCache), clearCache: () => ipcRenderer.invoke(IpcChannel.App_ClearCache),
notification: { notification: {
send: (notification: Notification) => ipcRenderer.invoke(IpcChannel.App_Notification, notification), send: (notification: Notification) => ipcRenderer.invoke(IpcChannel.Notification_Send, notification)
onClick: (callback: () => void) => {
const listener = () => {
callback()
}
ipcRenderer.on(IpcChannel.App_OnNotificationClick, listener)
return () => {
ipcRenderer.off(IpcChannel.App_OnNotificationClick, listener)
}
}
}, },
system: { system: {
getDeviceType: () => ipcRenderer.invoke(IpcChannel.System_GetDeviceType), getDeviceType: () => ipcRenderer.invoke(IpcChannel.System_GetDeviceType),

View File

@ -1,3 +1,5 @@
import store from '@renderer/store'
import { initialState as defaultNotificationSettings } from '@renderer/store/settings'
import type { Notification } from '@renderer/types/notification' import type { Notification } from '@renderer/types/notification'
import { NotificationQueue } from '../queue/NotificationQueue' import { NotificationQueue } from '../queue/NotificationQueue'
@ -23,7 +25,11 @@ export class NotificationService {
* @param notification * @param notification
*/ */
public async send(notification: Notification): Promise<void> { public async send(notification: Notification): Promise<void> {
await this.queue.add(notification) const notificationSettings = store.getState().settings.notification || defaultNotificationSettings
if (notificationSettings[notification.source]) {
this.queue.add(notification)
}
} }
/** /**
@ -33,8 +39,8 @@ export class NotificationService {
// Register an event listener for notification clicks // Register an event listener for notification clicks
window.electron.ipcRenderer.on('notification-click', (_event, notification: Notification) => { window.electron.ipcRenderer.on('notification-click', (_event, notification: Notification) => {
// 根据通知类型处理点击事件 // 根据通知类型处理点击事件
if (notification.type === 'action' && notification.onClick) { if (notification.type === 'action') {
notification.onClick() notification.onClick?.()
} }
}) })
} }