diff --git a/src/dispatcher/server.js b/src/dispatcher/server.js index 882c76ffb..1266b6521 100644 --- a/src/dispatcher/server.js +++ b/src/dispatcher/server.js @@ -21,6 +21,13 @@ export default (store: Store, logger: Logger) => { type: 'NEW_CLIENT', payload: client, }); + // Wait 2 seconds, and then trigger another event so we can check it's displayed + setTimeout(() => { + store.dispatch({ + type: 'NEW_CLIENT_SANITY_CHECK', + payload: client, + }); + }, 2000); }); server.addListener('removed-client', (id: string) => { diff --git a/src/reducers/connections.js b/src/reducers/connections.js index 66dfc64bf..d9611a22f 100644 --- a/src/reducers/connections.js +++ b/src/reducers/connections.js @@ -70,6 +70,10 @@ export type Action = type: 'NEW_CLIENT', payload: Client, } + | { + type: 'NEW_CLIENT_SANITY_CHECK', + payload: Client, + } | { type: 'CLIENT_REMOVED', payload: string, @@ -237,16 +241,6 @@ export default function reducer( selectedPlugin = userPreferredPlugin; } - const matchingDeviceForClient = state.devices.filter( - device => payload.query.device_id === device.serial, - ); - if (matchingDeviceForClient.length === 0) { - console.error( - new RecurringError(`Client initialised for non-displayed device`), - payload.id, - ); - } - return { ...state, clients: state.clients.concat(payload), @@ -260,6 +254,26 @@ export default function reducer( selectedPlugin, }; } + case 'NEW_CLIENT_SANITY_CHECK': { + const {payload} = action; + // Check for clients initialised when there is no matching device + const clientIsStillConnected = state.clients.filter( + client => client.id == payload.query.device_id, + ); + if (clientIsStillConnected) { + const matchingDeviceForClient = state.devices.filter( + device => payload.query.device_id === device.serial, + ); + if (matchingDeviceForClient.length === 0) { + console.error( + new RecurringError(`Client initialised for non-displayed device`), + payload.id, + ); + } + } + + return state; + } case 'CLIENT_REMOVED': { const {payload} = action;