diff --git a/main.js b/main.js index aa6b406..a8f7f6d 100644 --- a/main.js +++ b/main.js @@ -24,9 +24,9 @@ const menuTemplate = [ submenu: [ { label: 'Clear Saved Data', - id: 'resetViews', + id: 'clearSavedData', click(menuItem, window, event) { - mainWindow.webContents.send('resetViews'); + mainWindow.webContents.send('clearSavedData'); }, }, { diff --git a/preload.js b/preload.js index b37ec92..383f92b 100644 --- a/preload.js +++ b/preload.js @@ -174,8 +174,8 @@ ipcRenderer.on('deleteActive', (event, message) => { VIEW.selectPreviousDevice(); }); -ipcRenderer.on('resetViews', (event, message) => { - SAVESLOTS.resetSlots(); +ipcRenderer.on('clearSavedData', (event, message) => { + SAVESLOTS.clearSavedData(); }); ipcRenderer.on('loadSlot', (event, slot) => { diff --git a/src/device.js b/src/device.js index 6baf5e4..b57e4cb 100644 --- a/src/device.js +++ b/src/device.js @@ -223,8 +223,7 @@ module.exports.deleteActive = function deleteActive() { if (choice) { VIEW.removeDeviceFromList(device); delete devices[device.id]; - SAVESLOTS.deleteFromSlots(device); - SAVESLOTS.saveAll(); + SAVESLOTS.removeDevice(device); SAVESLOTS.reloadActiveSlot(); } }; diff --git a/src/saveSlots.js b/src/saveSlots.js index 2dc4aad..bd9a8d0 100644 --- a/src/saveSlots.js +++ b/src/saveSlots.js @@ -8,6 +8,13 @@ let savedDevices = []; const storedSlots = localStorage.getItem('savedSlots'); if (storedSlots) { savedSlots = JSON.parse(storedSlots); + // can probably be removed but I've noticed some older versions left some [null] slots in the savedSlots + savedSlots = savedSlots.map((savedSlot) => { + if (savedSlot.length === 1 && savedSlot[0] === null) { + return []; + } + return savedSlot; + }); } const storedDevices = localStorage.getItem('savedDevices'); @@ -68,12 +75,26 @@ module.exports.saveAll = function saveAll() { savedSlots[activeSlot] = []; for (let i = 0; i < currentPins.length; i++) { - savedSlots[activeSlot][i] = { - addresses: currentPins[i].addresses, - type: currentPins[i].type, - id: currentPins[i].id, - }; + if (currentPins[i]) { + // only include saved devices + if (currentPins[i].id in DEVICE.all) { + savedSlots[activeSlot][i] = { + addresses: currentPins[i].addresses, + type: currentPins[i].type, + id: currentPins[i].id, + }; + } + } } + + // can probably be removed but I've noticed some older versions left some [null] slots in the savedSlots + savedSlots = savedSlots.map((savedSlot) => { + if (savedSlot.length === 1 && savedSlot[0] === null) { + return []; + } + return savedSlot; + }); + localStorage.setItem('savedSlots', JSON.stringify(savedSlots)); console.log( `Saved ${currentPins.length} pinned devices to slot ${activeSlot}!` @@ -94,24 +115,29 @@ module.exports.saveAll = function saveAll() { }; i++; }); + localStorage.setItem('savedDevices', JSON.stringify(savedDevices)); + console.log(`Saved ${savedDevices.length} devices to storage!`); }; -module.exports.deleteFromSlots = function deleteFromSlots(device) { - for (let i = 1; i <= 3; i++) { - console.log(savedSlots); - for (let j = 0; j < savedSlots[i].length; j++) { - if (savedSlots[i][j].id === device.id) { - delete savedSlots[i][j]; - } - } +module.exports.removeDevice = function removeDevice(_device) { + // remove devices from local savedDevices + savedDevices = savedDevices.filter((device) => device.id !== _device.id); + + // remove devices from all saved slots + for (let i = 1; i < savedSlots.length; i++) { + savedSlots[i] = savedSlots[i].filter((device) => device.id !== _device.id); } + + // things might have changed so run a save + this.saveAll(); }; module.exports.reloadActiveSlot = function reloadActiveSlot() { loadSlot(activeSlot); }; -module.exports.resetSlots = function resetSlots() { - localStorage.clear(); +module.exports.clearSavedData = function clearSavedData() { + localStorage.removeItem('savedSlots'); + localStorage.removeItem('savedDevices'); };