diff --git a/vite/src/pipedal/PiPedalModel.tsx b/vite/src/pipedal/PiPedalModel.tsx index 1c4db09..4d4d64e 100644 --- a/vite/src/pipedal/PiPedalModel.tsx +++ b/vite/src/pipedal/PiPedalModel.tsx @@ -2343,6 +2343,22 @@ export class PiPedalModel //implements PiPedalModel } } setPatchProperty(instanceId: number, uri: string, value: any): Promise { + // Audio related properties are written without waiting for a reply. + // These URIs correspond to Toob player audio state. The server + // broadcasts changes via on...changed messages, so we don't + // need to wait for the reply when updating them. + const audioProps = [ + "http://two-play.com/plugins/toob-player#audioFile", + "http://two-play.com/plugins/toob-player#loop", + "http://two-play.com/plugins/toob-player#seek", + ]; + if (audioProps.indexOf(uri) >= 0) { + if (this.webSocket) { + this.webSocket.send("setPatchProperty", { instanceId: instanceId, propertyUri: uri, value: value }); + } + return Promise.resolve(true); + } + let result = new Promise((resolve, reject) => { if (this.webSocket) { this.webSocket.request( @@ -2983,7 +2999,7 @@ export class PiPedalModel //implements PiPedalModel // notify the server. let ws = this.webSocket; if (!ws) { - reject("Not connected."); + resolve(); return; } ws.request( @@ -2994,7 +3010,8 @@ export class PiPedalModel //implements PiPedalModel resolve(); }) .catch((err) => { - reject(err); + // ignore expected disconnects/errors + resolve(); }); }); @@ -3049,7 +3066,8 @@ export class PiPedalModel //implements PiPedalModel resolve(); }) .catch((err) => { - reject(err); + // ignore expected disconnects/errors + resolve(); }); //resolve();