From 69e54c305252db38bd0ff234c59b82edac5fa3ff Mon Sep 17 00:00:00 2001 From: "Robin E. R. Davies" Date: Fri, 16 Jan 2026 12:29:47 -0500 Subject: [PATCH] Prune snapshot values --- vite/src/pipedal/Pedalboard.tsx | 2 +- vite/src/pipedal/PiPedalModel.tsx | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/vite/src/pipedal/Pedalboard.tsx b/vite/src/pipedal/Pedalboard.tsx index fde63cf..dbc11a7 100644 --- a/vite/src/pipedal/Pedalboard.tsx +++ b/vite/src/pipedal/Pedalboard.tsx @@ -514,7 +514,7 @@ export class Pedalboard implements Deserializable { } return null; } - deleteItem_(instanceId: number,items: PedalboardItem[]): number | null + private deleteItem_(instanceId: number,items: PedalboardItem[]): number | null { for (let i = 0; i < items.length; ++i) { diff --git a/vite/src/pipedal/PiPedalModel.tsx b/vite/src/pipedal/PiPedalModel.tsx index 0f971c0..7ea9471 100644 --- a/vite/src/pipedal/PiPedalModel.tsx +++ b/vite/src/pipedal/PiPedalModel.tsx @@ -1538,15 +1538,39 @@ export class PiPedalModel //implements PiPedalModel selectSnapshot(index: number) { this.webSocket?.send("setSnapshot", index); } + + private pruneSnapshotValues(pedalboard: Pedalboard) + { + let validPluginIds: Set = new Set(); + + for (let item of pedalboard.items) { + validPluginIds.add(item.instanceId); + } + for (let snapshot of pedalboard.snapshots) { + if (snapshot) { + let ix = 0; + while (ix < snapshot.values.length) { + let value = snapshot.values[ix]; + if (validPluginIds.has(value.instanceId)) { + ix++; + } else { + snapshot.values.splice(ix, 1); + } + } + } + } + } setSnapshots(snapshots: (Snapshot | null)[], selectedSnapshot: number) { let pedalboard = this.pedalboard.get().clone(); pedalboard.snapshots = snapshots; if (selectedSnapshot !== -1) { pedalboard.selectedSnapshot = selectedSnapshot; } + this.pruneSnapshotValues(pedalboard); + this.setModelPedalboard(pedalboard); - this.webSocket?.send("setSnapshots", { snapshots: snapshots, selectedSnapshot: selectedSnapshot }); + this.webSocket?.send("setSnapshots", { snapshots: pedalboard.snapshots, selectedSnapshot: selectedSnapshot }); } setInputVolume(volume_db: number): void { @@ -1841,6 +1865,7 @@ export class PiPedalModel //implements PiPedalModel let result = newPedalboard.deleteItem(instanceId); if (result !== null) { newPedalboard.selectedPlugin = result; + this.pruneSnapshotValues(newPedalboard); this.setModelPedalboard(newPedalboard); this.updateServerPedalboard(); }