diff --git a/main/ipc.js b/main/ipc.js index c9ef307d..31442399 100644 --- a/main/ipc.js +++ b/main/ipc.js @@ -81,10 +81,10 @@ function init () { if (name.startsWith('wt-')) { if (e.sender.browserWindowOptions.title === 'webtorrent-hidden-window') { windows.main.send(name, ...args) - log('webtorrent ipc: sent %s', name) + log('webtorrent: got %s', name) } else { windows.webtorrent.send(name, ...args) - log('webtorrent ipc: receieved %s', name) + log('webtorrent: sent %s', name) } return } diff --git a/main/windows.js b/main/windows.js index add3837e..bbee87af 100644 --- a/main/windows.js +++ b/main/windows.js @@ -82,7 +82,7 @@ function createMainWindow () { backgroundColor: '#282828', darkTheme: true, // Forces dark theme (GTK+3) icon: config.APP_ICON + '.png', - minWidth: 375, + minWidth: 425, minHeight: 38 + (120 * 2), // header height + 2 torrents show: false, // Hide window until DOM finishes loading title: config.APP_WINDOW_TITLE, diff --git a/renderer/index.js b/renderer/index.js index 46b30d84..42a8f341 100644 --- a/renderer/index.js +++ b/renderer/index.js @@ -207,8 +207,8 @@ function dispatch (action, ...args) { if (action === 'openDevice') { lazyLoadCast().open(args[0] /* deviceType */) } - if (action === 'stopCasting') { - lazyLoadCast().stopCasting() + if (action === 'closeDevice') { + lazyLoadCast().close() } if (action === 'setDimensions') { setDimensions(args[0] /* dimensions */) diff --git a/renderer/lib/cast.js b/renderer/lib/cast.js index b9400669..b4b19a6e 100644 --- a/renderer/lib/cast.js +++ b/renderer/lib/cast.js @@ -1,25 +1,27 @@ -var chromecasts = require('chromecasts')() -var airplay = require('airplay-js') -var dlnacasts = require('dlnacasts')() - -var config = require('../../config') -var state = require('../state') - // The Cast module talks to Airplay and Chromecast // * Modifies state when things change // * Starts and stops casting, provides remote video controls module.exports = { init, open, - stopCasting, + close, playPause, seek, setVolume } +var airplay = require('airplay-js') +var chromecasts = require('chromecasts')() +var dlnacasts = require('dlnacasts')() + +var config = require('../../config') +var state = require('../state') + // Callback to notify module users when state has changed var update +var statusInterval = null + // chromecast player implementation function chromecastPlayer (player) { function addEvents () { @@ -65,7 +67,7 @@ function chromecastPlayer (player) { player.stop(callback) } - function status (state) { + function status () { player.status(function (err, status) { if (err) return console.log('error getting %s status: %o', state.playing.location, err) state.playing.isPaused = status.playerState === 'PAUSED' @@ -122,7 +124,7 @@ function airplayPlayer (player) { player.stop(callback) } - function status (state) { + function status () { player.status(function (status) { state.playing.isPaused = status.rate === 0 state.playing.currentTime = status.position @@ -201,7 +203,7 @@ function dlnaPlayer (player) { player.stop(callback) } - function status (state) { + function status () { player.status(function (err, status) { if (err) return console.log('error getting %s status: %o', state.playing.location, err) state.playing.isPaused = status.playerState === 'PAUSED' @@ -240,9 +242,6 @@ function dlnaPlayer (player) { function init (callback) { update = callback - // Start polling Chromecast or Airplay, whenever we're connected - setInterval(() => pollCastStatus(state), 1000) - // Listen for devices: Chromecast, DLNA and Airplay chromecasts.on('update', function (player) { state.devices.chromecast = chromecastPlayer(player) @@ -258,12 +257,14 @@ function init (callback) { }).start() } -// Update our state from the remote TV -function pollCastStatus (state) { - var device = getDevice() - if (device) { - device.status(state) - } +// Start polling cast device state, whenever we're connected +function startStatusInterval () { + statusInterval = setInterval(function () { + var device = getDevice() + if (device) { + device.status() + } + }, 1000) } function open (location) { @@ -275,16 +276,18 @@ function open (location) { var device = getDevice(location) if (device) { getDevice(location).open() + startStatusInterval() } update() } -// Stops Chromecast or Airplay, move video back to local screen -function stopCasting () { +// Stops casting, move video back to local screen +function close () { var device = getDevice() if (device) { device.stop(stoppedCasting) + clearInterval(statusInterval) } else { stoppedCasting() } @@ -305,6 +308,8 @@ function getDevice (location) { return state.devices.airplay } else if (state.playing.location === 'dlna') { return state.devices.dlna + } else { + return null } } diff --git a/renderer/views/player.js b/renderer/views/player.js index 919899c8..d2ecf918 100644 --- a/renderer/views/player.js +++ b/renderer/views/player.js @@ -245,7 +245,7 @@ function renderPlayerControls (state) { chromecastClass = 'active' dlnaClass = 'disabled' airplayClass = 'disabled' - chromecastHandler = dispatcher('stopCasting') + chromecastHandler = dispatcher('closeDevice') airplayHandler = undefined dlnaHandler = undefined } else if (isOnAirplay) { @@ -253,7 +253,7 @@ function renderPlayerControls (state) { dlnaClass = 'disabled' airplayClass = 'active' chromecastHandler = undefined - airplayHandler = dispatcher('stopCasting') + airplayHandler = dispatcher('closeDevice') dlnaHandler = undefined } else if (isOnDlna) { chromecastClass = 'disabled' @@ -261,7 +261,7 @@ function renderPlayerControls (state) { airplayClass = 'disabled' chromecastHandler = undefined airplayHandler = undefined - dlnaHandler = dispatcher('stopCasting') + dlnaHandler = dispatcher('closeDevice') } else { chromecastClass = '' airplayClass = ''