44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
		
			
		
	
	
			44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
| 
								 | 
							
								import { Tray, ipcMain, BrowserWindow, app, Notification } from 'electron';
							 | 
						||
| 
								 | 
							
								import type { NotificationConstructorOptions, IpcMainInvokeEvent } from 'electron';
							 | 
						||
| 
								 | 
							
								import { openInBrowser } from '../utils';
							 | 
						||
| 
								 | 
							
								import { omit } from 'lodash-es';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ipcMain.on('open-in-browser', (event: IpcMainInvokeEvent, url: string) => openInBrowser(url));
							 | 
						||
| 
								 | 
							
								// 处理任务栏闪烁
							 | 
						||
| 
								 | 
							
								ipcMain.on('notify-flash', (event: IpcMainInvokeEvent, count: number = 0) => {
							 | 
						||
| 
								 | 
							
								  const win = BrowserWindow.getAllWindows()[0];
							 | 
						||
| 
								 | 
							
								  if (!win) return;
							 | 
						||
| 
								 | 
							
								  if (win.isFocused()) return;
							 | 
						||
| 
								 | 
							
								  if (process.platform === 'win32') {
							 | 
						||
| 
								 | 
							
								    // windows
							 | 
						||
| 
								 | 
							
								    win.flashFrame(true);
							 | 
						||
| 
								 | 
							
								  } else if (process.platform === 'darwin') {
							 | 
						||
| 
								 | 
							
								    // Mac
							 | 
						||
| 
								 | 
							
								    if (app.dock) {
							 | 
						||
| 
								 | 
							
								      app.dock.bounce('informational');
							 | 
						||
| 
								 | 
							
								      // 设置角标(未读消息)
							 | 
						||
| 
								 | 
							
								      if (count > 0) {
							 | 
						||
| 
								 | 
							
								        app.dock.setBadge(count.toString());
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        app.dock.setBadge('');
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								// 通知 (点击通知打开指定页面)
							 | 
						||
| 
								 | 
							
								ipcMain.on('notify-with-path', (event: IpcMainInvokeEvent, options: NotificationConstructorOptions & { path: string }) => {
							 | 
						||
| 
								 | 
							
								  const win = BrowserWindow.getAllWindows()[0];
							 | 
						||
| 
								 | 
							
								  if (!win) return;
							 | 
						||
| 
								 | 
							
								  if (win.isFocused()) return;
							 | 
						||
| 
								 | 
							
								  const notification = new Notification({
							 | 
						||
| 
								 | 
							
								    ...omit(options, 'path'),
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  notification.on('click', () => {
							 | 
						||
| 
								 | 
							
								    if (win.isMinimized()) win.restore();
							 | 
						||
| 
								 | 
							
								    win.show();
							 | 
						||
| 
								 | 
							
								    win.focus();
							 | 
						||
| 
								 | 
							
								    // win.webContents.send('navigate-to', options.path);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  notification.show();
							 | 
						||
| 
								 | 
							
								});
							 |