diff --git a/desktop/main.js b/desktop/main.js --- a/desktop/main.js +++ b/desktop/main.js @@ -70,6 +70,14 @@ } }); + ipcMain.on('set-badge', (event, value) => { + if (value) { + app.dock.setBadge(value.toString()); + } else { + app.dock.setBadge(''); + } + }); + win.webContents.setWindowOpenHandler(({ url }) => { shell.openExternal(url); return { action: 'deny' }; diff --git a/desktop/preload.js b/desktop/preload.js --- a/desktop/preload.js +++ b/desktop/preload.js @@ -2,6 +2,7 @@ const bridge = { onNavigate: callback => ipcRenderer.on('on-navigate', callback), + setBadge: value => ipcRenderer.send('set-badge', value), onTopBarDoubleClick: () => ipcRenderer.send('on-top-bar-double-click'), }; diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -263,6 +263,7 @@ const boundUnreadCount = useSelector(unreadCount); React.useEffect(() => { document.title = getTitle(boundUnreadCount); + electron?.setBadge?.(boundUnreadCount === 0 ? null : boundUnreadCount); }, [boundUnreadCount]); const dispatch = useDispatch(); diff --git a/web/electron.js b/web/electron.js --- a/web/electron.js +++ b/web/electron.js @@ -6,6 +6,7 @@ onNavigate: ( (event: any, { canGoBack: boolean, canGoForward: boolean }) => void, ) => void, + setBadge: (value: string | number | null) => void, onTopBarDoubleClick: () => {}, } = typeof electronContextBridge === 'undefined' ? null : electronContextBridge;