diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cf8863..a9bbbad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,19 @@ # Changelog +## [1.0.7] - 2020-08-07 +- Fix issues when waking up from sleep where dynamically rendered images may cause buttons to fail to work. + +## [1.0.6] - 2020-08-04 +- Add ability to show current volume on volume set button + +### Changed + ## [1.0.5] - 2020-06-27 ### Changed - Fixed race condition in cover art rendering -* Fixed an issue causing the cover art to not always be rendered -* Fixed an issue causing the Play button to not update correctly -* Fixed issue where previous cover art was not removed if the next track didn't have cover art available -* Fixed an issue when adding buttons and the default zone wasn't set -* Added ability to reconnect to Roon Core by pressing any key when disconnected +- Fixed an issue causing the cover art to not always be rendered +- Fixed an issue causing the Play button to not update correctly +- Fixed issue where previous cover art was not removed if the next track didn't have cover art available +- Fixed an issue when adding buttons and the default zone wasn't set +- Added ability to reconnect to Roon Core by pressing any key when disconnected diff --git a/Sources/manifest.json b/Sources/manifest.json index 0520708..14f037c 100644 --- a/Sources/manifest.json +++ b/Sources/manifest.json @@ -257,7 +257,7 @@ "CategoryIcon": "plug-in/images/roon-category", "PropertyInspectorPath": "property-inspector/index.html", "URL": "https://bliny.net/streamdeck-roon/", - "Version": "1.0.5", + "Version": "1.0.7", "OS": [ { "Platform": "mac", diff --git a/Sources/plug-in/js/Actions/PlayActionBase.js b/Sources/plug-in/js/Actions/PlayActionBase.js index 8e7829c..eb48e8e 100644 --- a/Sources/plug-in/js/Actions/PlayActionBase.js +++ b/Sources/plug-in/js/Actions/PlayActionBase.js @@ -26,12 +26,13 @@ export default class PlayActionBase extends ActionBase { width: 144, height: 144, }; + + // Trigger image updates based on this Action's custom settings once base image is ready + this.showCoverArt = config && config.settings && config.settings.showCoverArt; + this.showSeekPosition = config && config.settings && config.settings.showSeekPosition; }; - defaultPlayImage.src = PlayImage; - // Trigger image updates based on this Action's custom settings - this.showCoverArt = config && config.settings && config.settings.showCoverArt; - this.showSeekPosition = config && config.settings && config.settings.showSeekPosition; + defaultPlayImage.src = PlayImage; } // ******************************************** diff --git a/Sources/plug-in/js/Actions/VolumeSetAction.js b/Sources/plug-in/js/Actions/VolumeSetAction.js index 1a2940f..98882f0 100644 --- a/Sources/plug-in/js/Actions/VolumeSetAction.js +++ b/Sources/plug-in/js/Actions/VolumeSetAction.js @@ -1,6 +1,7 @@ import ActionBase from "./ActionBase"; import debug from "debug"; import { VolumeSetDisabled } from "../DataImages/volume-set-key-disabled"; +import { VolumeSetImage } from "../DataImages/volume-set-key"; const ACTION_NAME = "volume-set"; const ACTION_UUID = `net.bliny.roon.${ACTION_NAME}`; @@ -15,6 +16,21 @@ export default class VolumeSetAction extends ActionBase { super(config); log("ctor"); + + // Create image data objects for default images + const defaultVolumeImage = new Image(); + defaultVolumeImage.onload = () => { + this._defaultVolumeImageData = { + image: defaultVolumeImage, + width: 144, + height: 144, + }; + + // Trigger image updates based on this Action's custom settings once base image is ready + this.showCoverArt = config && config.settings && config.settings.showCoverArt; + this.showCurrentVolume = config && config.settings && config.settings.showCurrentVolume; + }; + defaultVolumeImage.src = VolumeSetImage; } // ******************************************** @@ -24,9 +40,32 @@ export default class VolumeSetAction extends ActionBase { return ACTION_UUID; } + get defaultVolumeImageData() { + return this._defaultVolumeImageData; + } + + get showCurrentVolume() { + return this._showCurrentVolume; + } + + set showCurrentVolume(value) { + if(value !== this._showCurrentVolume) { + this._showCurrentVolume = (value === true); + this.renderImage(); + } + } + // ******************************************** // * Private methods, event handlers // ******************************************** + onSettingsUpdated(settings) { + super.onSettingsUpdated(settings); + + if(settings) { + this.showCurrentVolume = settings.showCurrentVolume; + } + } + onKeyUp(data) { super.onKeyUp(data); @@ -50,16 +89,67 @@ export default class VolumeSetAction extends ActionBase { onRoonActiveOutputChanged(activeOutput) { super.onRoonActiveOutputChanged(activeOutput); - if(activeOutput !== null && activeOutput.volume) { - this.setImage(undefined); - } else { - this.setImage(this.getDisabledImageWhenRequested()); - } + this.renderImage(); } // ******************************************** // * Private methods // ******************************************** + formatVolume(volume) { + const type = volume.type === "db" ? " dB" : ""; + // return "0"; + return `${volume.value}${type}`; + } + + renderImage() { + if(this.showCurrentVolume === true && this.roonActiveOutput !== null && this.roonActiveOutput.volume) { + const { image, width, height } = this.defaultVolumeImageData; + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + + const canvasContext = canvas.getContext("2d"); + const volumeText = this.formatVolume(this.roonActiveOutput.volume); + + // Render icon + canvasContext.drawImage(image, 0, 0); + + let font; + let left; + if(volumeText.length <= 3) { + left = 70; + font = "36px Arial"; + } else if(volumeText.length <= 6) { + left = 62; + font = "26px Arial"; + } else { + left = 62; + font = "20px Arial"; + } + + canvasContext.font = font; + canvasContext.textAlign = "left"; + canvasContext.textBaseline = "middle"; + canvasContext.shadowColor = "#000000"; + canvasContext.shadowBlur = 1; + canvasContext.lineWidth = 3; + canvasContext.strokeStyle = "#000000"; + canvasContext.strokeText(volumeText, left, height / 2 + 2); + canvasContext.fillStyle = "#ffffff"; + canvasContext.fillText(volumeText, left, height / 2 + 2); + + // Set the image on the button + const dataUri = canvas.toDataURL("image/png"); + this.setImage(dataUri); + } else { + if(this.roonActiveOutput !== null && this.roonActiveOutput.volume) { + this.setImage(undefined); + } else { + this.setImage(this.getDisabledImageWhenRequested()); + } + } + } + getDisabledImage() { return VolumeSetDisabled; } diff --git a/Sources/plug-in/js/DataImages/volume-set-key.js b/Sources/plug-in/js/DataImages/volume-set-key.js new file mode 100644 index 0000000..7777520 --- /dev/null +++ b/Sources/plug-in/js/DataImages/volume-set-key.js @@ -0,0 +1 @@ +export const VolumeSetImage = "data:image/png;base64,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"; diff --git a/Sources/plug-in/js/index.js b/Sources/plug-in/js/index.js index 3b4d1e4..75f905a 100644 --- a/Sources/plug-in/js/index.js +++ b/Sources/plug-in/js/index.js @@ -10,7 +10,7 @@ const roonLog = debug("roon"); const roonSubscribeLog = debug("roon:subscribe"); const roonUpdateLog = debug("roon:update"); -const VERSION_NUMBER = "1.0.5"; +const VERSION_NUMBER = "1.0.7"; // TODO: Adjust log level from config // debug.enable("plug-in,roon,roon:subscribe,roon:update,action:*"); diff --git a/Sources/property-inspector/index.html b/Sources/property-inspector/index.html index 0fb78cd..9f1b83a 100644 --- a/Sources/property-inspector/index.html +++ b/Sources/property-inspector/index.html @@ -60,16 +60,16 @@ -