mirror of
https://github.com/stagehacks/Cue-View.git
synced 2026-07-26 09:18:39 +00:00
bugfix #46 dupe device loading
This commit is contained in:
+9
-6
@@ -95,12 +95,15 @@ window.init = function init() {
|
||||
};
|
||||
|
||||
document.getElementById('add-device-button').onchange = function addDeviceClick(e) {
|
||||
DEVICE.registerDevice({
|
||||
type: e.target.value,
|
||||
defaultName: 'New Device',
|
||||
port: undefined,
|
||||
addresses: [],
|
||||
});
|
||||
DEVICE.registerDevice(
|
||||
{
|
||||
type: e.target.value,
|
||||
defaultName: 'New Device',
|
||||
port: undefined,
|
||||
addresses: [],
|
||||
},
|
||||
'fromAddButton'
|
||||
);
|
||||
e.target.selectedIndex = 0;
|
||||
|
||||
SAVESLOTS.saveAll();
|
||||
|
||||
+25
-12
@@ -12,7 +12,7 @@ const SEARCH = require('./search.js');
|
||||
const devices = {};
|
||||
module.exports.all = devices;
|
||||
|
||||
function registerDevice(newDevice) {
|
||||
function registerDevice(newDevice, discoveryMethod) {
|
||||
if (PLUGINS.all[newDevice.type] === undefined) {
|
||||
console.error(`Plugin for device ${newDevice.type} does not exist.`);
|
||||
return true;
|
||||
@@ -23,17 +23,9 @@ function registerDevice(newDevice) {
|
||||
initElements[i].style.display = 'none';
|
||||
}
|
||||
|
||||
// only register device if it hasn't already been added
|
||||
if (newDevice.addresses.length > 0) {
|
||||
const existing = _.find(devices, (e) => {
|
||||
const typeMatch = e.type === newDevice.type;
|
||||
const addressMatch = JSON.stringify(e.addresses) === JSON.stringify(newDevice.addresses);
|
||||
return typeMatch && addressMatch;
|
||||
});
|
||||
|
||||
if (existing) {
|
||||
return false;
|
||||
}
|
||||
// prevent duplicate devices from being added via search
|
||||
if (isDeviceAlreadyAdded(newDevice) && discoveryMethod === 'fromSearch') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// console.log("Registered new "+newDevice.type)
|
||||
@@ -331,3 +323,24 @@ function heartbeat() {
|
||||
// }
|
||||
}
|
||||
setInterval(heartbeat, 100);
|
||||
|
||||
function isDeviceAlreadyAdded(newDevice) {
|
||||
let deviceAlreadyAdded = false;
|
||||
|
||||
if (newDevice.addresses.length === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let i = 0; i < Object.keys(devices).length; i++) {
|
||||
const device = devices[Object.keys(devices)[i]];
|
||||
const typeMatch = device.type === newDevice.type;
|
||||
const addressMatch = JSON.stringify(device.addresses) === JSON.stringify(newDevice.addresses);
|
||||
const idMatch = device.id === newDevice.id;
|
||||
if (typeMatch && addressMatch && !idMatch) {
|
||||
deviceAlreadyAdded = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return deviceAlreadyAdded;
|
||||
}
|
||||
module.exports.isDeviceAlreadyAdded = isDeviceAlreadyAdded;
|
||||
|
||||
+14
-12
@@ -25,6 +25,7 @@ if (storedDevices) {
|
||||
function loadSlot(slotIndex) {
|
||||
VIEW.toggleSlotButtons(slotIndex);
|
||||
activeSlot = slotIndex;
|
||||
console.log(DEVICE.all);
|
||||
|
||||
Object.keys(DEVICE.all).forEach((d) => {
|
||||
DEVICE.changePinIndex(DEVICE.all[d], false);
|
||||
@@ -57,15 +58,18 @@ module.exports.loadDevices = function loadDevices() {
|
||||
console.log(`Loading ${savedDevices.length} saved devices...`);
|
||||
|
||||
for (let i = 0; i < savedDevices.length; i++) {
|
||||
DEVICE.registerDevice({
|
||||
type: savedDevices[i].type,
|
||||
displayName: savedDevices[i].displayName,
|
||||
defaultName: savedDevices[i].defaultName,
|
||||
port: savedDevices[i].port,
|
||||
addresses: savedDevices[i].addresses,
|
||||
id: savedDevices[i].id,
|
||||
fields: savedDevices[i].fields,
|
||||
});
|
||||
DEVICE.registerDevice(
|
||||
{
|
||||
type: savedDevices[i].type,
|
||||
displayName: savedDevices[i].displayName,
|
||||
defaultName: savedDevices[i].defaultName,
|
||||
port: savedDevices[i].port,
|
||||
addresses: savedDevices[i].addresses,
|
||||
id: savedDevices[i].id,
|
||||
fields: savedDevices[i].fields,
|
||||
},
|
||||
'fromSave'
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -96,9 +100,7 @@ module.exports.saveAll = function saveAll() {
|
||||
});
|
||||
|
||||
localStorage.setItem('savedSlots', JSON.stringify(savedSlots));
|
||||
console.log(
|
||||
`Saved ${currentPins.length} pinned devices to slot ${activeSlot}!`
|
||||
);
|
||||
console.log(`Saved ${currentPins.length} pinned devices to slot ${activeSlot}!`);
|
||||
|
||||
savedDevices = [];
|
||||
let i = 0;
|
||||
|
||||
+36
-24
@@ -123,12 +123,15 @@ function searchBonjour(pluginType, pluginConfig) {
|
||||
}
|
||||
});
|
||||
|
||||
DEVICE.registerDevice({
|
||||
type: pluginType,
|
||||
defaultName: e.name,
|
||||
port: e.port,
|
||||
addresses: validAddresses,
|
||||
});
|
||||
DEVICE.registerDevice(
|
||||
{
|
||||
type: pluginType,
|
||||
defaultName: e.name,
|
||||
port: e.port,
|
||||
addresses: validAddresses,
|
||||
},
|
||||
'fromSearch'
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -147,12 +150,15 @@ function TCPtest(ipAddr, pluginType, pluginConfig) {
|
||||
client.end(
|
||||
'',
|
||||
'utf8',
|
||||
DEVICE.registerDevice({
|
||||
type: pluginType,
|
||||
defaultName: pluginConfig.defaultName,
|
||||
port: pluginConfig.defaultPort,
|
||||
addresses: [ipAddr],
|
||||
})
|
||||
DEVICE.registerDevice(
|
||||
{
|
||||
type: pluginType,
|
||||
defaultName: pluginConfig.defaultName,
|
||||
port: pluginConfig.defaultPort,
|
||||
addresses: [ipAddr],
|
||||
},
|
||||
'fromSearch'
|
||||
)
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -172,12 +178,15 @@ function searchUDP(pluginType, pluginConfig) {
|
||||
searchSockets[j].on('message', (msg, info) => {
|
||||
if (pluginConfig.searchOptions.validateResponse(msg, info, DEVICE.all)) {
|
||||
searchSockets[j].close();
|
||||
DEVICE.registerDevice({
|
||||
type: pluginType,
|
||||
defaultName: pluginConfig.defaultName,
|
||||
port: pluginConfig.defaultPort,
|
||||
addresses: [info.address],
|
||||
});
|
||||
DEVICE.registerDevice(
|
||||
{
|
||||
type: pluginType,
|
||||
defaultName: pluginConfig.defaultName,
|
||||
port: pluginConfig.defaultPort,
|
||||
addresses: [info.address],
|
||||
},
|
||||
'fromSearch'
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -201,12 +210,15 @@ function searchMulticast(pluginType, pluginConfig) {
|
||||
socket.on('message', (msg, info) => {
|
||||
if (pluginConfig.searchOptions.validateResponse(msg, info)) {
|
||||
socket.close(() => {
|
||||
DEVICE.registerDevice({
|
||||
type: pluginType,
|
||||
defaultName: pluginConfig.defaultName,
|
||||
port: pluginConfig.defaultPort,
|
||||
addresses: [info.address],
|
||||
});
|
||||
DEVICE.registerDevice(
|
||||
{
|
||||
type: pluginType,
|
||||
defaultName: pluginConfig.defaultName,
|
||||
port: pluginConfig.defaultPort,
|
||||
addresses: [info.address],
|
||||
},
|
||||
'fromSearch'
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user