diff --git a/index.js b/index.js index 67371a47..c169f9d4 100644 --- a/index.js +++ b/index.js @@ -35,10 +35,6 @@ app.on('activate', function () { } }) -app.on('browser-window-focus', function () { - setBadge('') -}) - app.on('window-all-closed', function () { if (process.platform !== 'darwin') { app.quit() @@ -133,11 +129,7 @@ function setAspectRatio (aspectRatio, extraSize) { // Display string in dock badging area (OS X) function setBadge (text) { debug('setBadge %s', text) - if (mainWindow && !mainWindow.isFocused()) { - if (text === '+') { - // special value to increment the badge number - text = (Number(app.dock.getBadge()) || 0) + 1 - } + if (mainWindow) { app.dock.setBadge(String(text)) } } diff --git a/main/index.js b/main/index.js index 800c9906..45a0f579 100644 --- a/main/index.js +++ b/main/index.js @@ -36,6 +36,11 @@ var state = global.state = { }, view: { title: 'WebTorrent', + dock: { + badge: 0, + progress: 0 + }, + isFocused: true, client: null, // TODO: remove this from the view savedWindowBounds: null, history: [], @@ -48,17 +53,17 @@ var state = global.state = { var client, currentVDom, rootElement, updateThrottled function init () { + client = global.client = new WebTorrent() + client.on('warning', onWarning) + client.on('error', onError) + state.view.client = client + currentVDom = App(state, dispatch) rootElement = createElement(currentVDom) document.body.appendChild(rootElement) updateThrottled = throttle(update, 1000) - client = new WebTorrent() - client.on('warning', onWarning) - client.on('error', onError) - state.view.client = client - dragDrop('body', onFiles) chromecasts.on('update', function (player) { @@ -73,6 +78,16 @@ function init () { document.addEventListener('paste', function () { electron.ipcRenderer.send('addTorrentFromPaste') }) + + window.addEventListener('focus', function () { + state.view.isFocused = true + if (state.view.dock.badge > 0) electron.ipcRenderer.send('setBadge', '') + state.view.dock.badge = 0 + }) + + window.addEventListener('blur', function () { + state.view.isFocused = false + }) } init() @@ -90,15 +105,16 @@ setInterval(function () { }, 1000) function updateDockIcon () { - if (state.view.client) { - var progress = state.view.client.progress - var activeTorrentsExist = state.view.client.torrents.some(function (torrent) { - return torrent.progress !== 1 - }) - // Hide progress bar when client has no torrents, or progress is 100% - if (!activeTorrentsExist || progress === 1) { - progress = -1 - } + var progress = state.view.client.progress + var activeTorrentsExist = state.view.client.torrents.some(function (torrent) { + return torrent.progress !== 1 + }) + // Hide progress bar when client has no torrents, or progress is 100% + if (!activeTorrentsExist || progress === 1) { + progress = -1 + } + if (progress !== state.view.dock.progress) { + state.view.dock.progress = progress electron.ipcRenderer.send('setProgress', progress) } } @@ -175,7 +191,10 @@ function seed (files) { function addTorrentEvents (torrent) { torrent.on('infoHash', update) torrent.on('done', function () { - electron.ipcRenderer.send('setBadge', '+') + if (!state.view.isFocused) { + state.view.dock.badge += 1 + electron.ipcRenderer.send('setBadge', state.view.dock.badge) + } update() }) torrent.on('download', updateThrottled)