From 160659b089c00130a6d2b1577ab73260d6310d51 Mon Sep 17 00:00:00 2001 From: BarRaider Date: Sat, 2 Mar 2019 22:37:51 -0800 Subject: [PATCH] v1.3 - Upgraded to StreamDeck-Tools v2.0 --- DelayedText/App.config | 10 +- DelayedText/DelayedText.csproj | 33 +++-- DelayedText/DelayedTextInput.cs | 44 +++--- DelayedText/Program.cs | 4 +- .../PropertyInspector/DelayedText/Index.html | 10 +- DelayedText/PropertyInspector/sdpi.css | 6 + .../{Index.js => sdtools.common.js} | 127 +++++++++++------- DelayedText/manifest.json | 8 +- DelayedText/packages.config | 6 +- README.md | 9 +- 10 files changed, 149 insertions(+), 108 deletions(-) rename DelayedText/PropertyInspector/{Index.js => sdtools.common.js} (64%) diff --git a/DelayedText/App.config b/DelayedText/App.config index 56efbc7..14a15fc 100644 --- a/DelayedText/App.config +++ b/DelayedText/App.config @@ -1,6 +1,14 @@ - + + + + + + + + + \ No newline at end of file diff --git a/DelayedText/DelayedText.csproj b/DelayedText/DelayedText.csproj index a7ea193..010d837 100644 --- a/DelayedText/DelayedText.csproj +++ b/DelayedText/DelayedText.csproj @@ -34,20 +34,31 @@ - ..\packages\CommandLineParser.2.4.3\lib\netstandard2.0\CommandLine.dll + ..\..\..\DotNet\StreamDeck\packages\CommandLineParser.2.4.3\lib\netstandard2.0\CommandLine.dll - ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll + ..\..\..\DotNet\StreamDeck\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - ..\packages\streamdeck-client-csharp.0.1.2-preview\lib\netstandard2.0\streamdeck-client-csharp.dll + + ..\..\..\DotNet\StreamDeck\packages\NLog.4.5.11\lib\net45\NLog.dll + + + ..\..\..\DotNet\StreamDeck\packages\streamdeck-client-csharp.4.1.0\lib\netstandard2.0\streamdeck-client-csharp.dll + + + ..\..\..\DotNet\StreamDeck\packages\StreamDeck-Tools.2.0.0\lib\net472\StreamDeckTools.dll + - - ..\packages\System.Drawing.Common.4.6.0-preview.18571.3\lib\net461\System.Drawing.Common.dll + + ..\..\..\DotNet\StreamDeck\packages\System.Drawing.Common.4.5.1\lib\net461\System.Drawing.Common.dll + + + + @@ -70,12 +81,6 @@ - - - {dabbd97d-6687-4cbd-a19e-ac9ffa3cef03} - barraider-sdtools - - PreserveNewest @@ -104,10 +109,10 @@ PreserveNewest - + PreserveNewest - + PreserveNewest diff --git a/DelayedText/DelayedTextInput.cs b/DelayedText/DelayedTextInput.cs index 029ad91..0cfea5b 100644 --- a/DelayedText/DelayedTextInput.cs +++ b/DelayedText/DelayedTextInput.cs @@ -11,6 +11,7 @@ namespace Delayedtext { + [PluginActionId("com.barraider.delayedtext")] public class DelayedTextInput : PluginBase { private class PluginSettings @@ -46,20 +47,22 @@ public static PluginSettings CreateDefaultSettings() #region Public Methods - public DelayedTextInput(SDConnection connection, JObject settings) : base(connection, settings) + public DelayedTextInput(SDConnection connection, InitialPayload payload) : base(connection, payload) { - if (settings == null || settings.Count == 0) + if (payload.Settings == null || payload.Settings.Count == 0) { this.settings = PluginSettings.CreateDefaultSettings(); + Connection.SetSettingsAsync(JObject.FromObject(settings)); } else { - this.settings = settings.ToObject(); + this.settings = payload.Settings.ToObject(); } } - public override void KeyPressed() + public override void KeyPressed(KeyPayload payload) { + Logger.Instance.LogMessage(TracingLevel.INFO, "Key Pressed"); if (inputRunning) { return; @@ -68,7 +71,7 @@ public override void KeyPressed() SendInput(); } - public override void KeyReleased() + public override void KeyReleased(KeyPayload payload) { } @@ -78,32 +81,20 @@ public override void OnTick() public override void Dispose() { + Logger.Instance.LogMessage(TracingLevel.INFO, "Destructor called"); } - public override void UpdateSettings(JObject payload) + public override void ReceivedSettings(ReceivedSettingsPayload payload) { - if (payload["property_inspector"] != null) - { - switch (payload["property_inspector"].ToString().ToLower()) - { - case "propertyinspectorconnected": - Connection.SendToPropertyInspectorAsync(JObject.FromObject(settings)); - break; - - case "propertyinspectorwilldisappear": - Connection.SetSettingsAsync(JObject.FromObject(settings)); - break; - - case "updatesettings": - settings.Delay = (int)payload["delay"]; - settings.InputText = (string)payload["inputText"]; - settings.EnterMode = (bool)payload["enterMode"]; - Connection.SetSettingsAsync(JObject.FromObject(settings)); - break; - } - } + // New in StreamDeck-Tools v2.0: + Tools.AutoPopulateSettings(settings, payload.Settings); + Logger.Instance.LogMessage(TracingLevel.INFO, $"Settings loaded: {payload.Settings}"); } + public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload) + { } + + #endregion #region Private Methods @@ -137,7 +128,6 @@ await Task.Run(() => }); inputRunning = false; } - #endregion } } diff --git a/DelayedText/Program.cs b/DelayedText/Program.cs index ebd61b4..27300df 100644 --- a/DelayedText/Program.cs +++ b/DelayedText/Program.cs @@ -12,9 +12,7 @@ static void Main(string[] args) // Uncomment this line of code to allow for debugging //while (!System.Diagnostics.Debugger.IsAttached) { System.Threading.Thread.Sleep(100); } - List supportedActionIds = new List(); - supportedActionIds.Add(new PluginActionId("com.barraider.delayedtext", typeof(DelayedTextInput))); - SDWrapper.Run(args, supportedActionIds.ToArray()); + SDWrapper.Run(args); } } } diff --git a/DelayedText/PropertyInspector/DelayedText/Index.html b/DelayedText/PropertyInspector/DelayedText/Index.html index 3eaf9d2..e18a40e 100644 --- a/DelayedText/PropertyInspector/DelayedText/Index.html +++ b/DelayedText/PropertyInspector/DelayedText/Index.html @@ -11,25 +11,25 @@
- For feedback/suggestions contact me at https://BarRaider.github.io + For feedback/suggestions contact me at https://BarRaider.github.io
Text
- +
Enter key
- +
Delay (ms)
- +
@@ -40,6 +40,6 @@
- + diff --git a/DelayedText/PropertyInspector/sdpi.css b/DelayedText/PropertyInspector/sdpi.css index 48a476f..b9f6a90 100644 --- a/DelayedText/PropertyInspector/sdpi.css +++ b/DelayedText/PropertyInspector/sdpi.css @@ -1,3 +1,9 @@ +.linkspan { + cursor: pointer; + color: #7397d2; + text-decoration: underline; +} + html { --sdpi-bgcolor: #2D2D2D; --sdpi-background: #3D3D3D; diff --git a/DelayedText/PropertyInspector/Index.js b/DelayedText/PropertyInspector/sdtools.common.js similarity index 64% rename from DelayedText/PropertyInspector/Index.js rename to DelayedText/PropertyInspector/sdtools.common.js index 54747b9..450d8e9 100644 --- a/DelayedText/PropertyInspector/Index.js +++ b/DelayedText/PropertyInspector/sdtools.common.js @@ -1,76 +1,101 @@ var websocket = null, uuid = null, + registerEventName = null, actionInfo = {}, inInfo = {}, runningApps = [], isQT = navigator.appVersion.includes('QtWebEngine'); -function connectSocket(inPort, inUUID, inRegisterEvent, inInfo, inActionInfo) { +function connectElgatoStreamDeckSocket(inPort, inUUID, inRegisterEvent, inInfo, inActionInfo) { uuid = inUUID; + registerEventName = inRegisterEvent; + console.log(uuid, inActionInfo); actionInfo = JSON.parse(inActionInfo); // cache the info inInfo = JSON.parse(inInfo); websocket = new WebSocket('ws://localhost:' + inPort); addDynamicStyles(inInfo.colors); - websocket.onopen = function () { - var json = { - event: inRegisterEvent, - uuid: inUUID - }; - - websocket.send(JSON.stringify(json)); + websocket.onopen = websocketOnOpen; + websocket.onmessage = websocketOnMessage; + loadConfiguration(actionInfo.payload.settings); +} - // Notify the plugin that we are connected - sendValueToPlugin('propertyInspectorConnected', 'property_inspector'); +function websocketOnOpen() { + var json = { + event: registerEventName, + uuid: uuid }; + websocket.send(JSON.stringify(json)); - websocket.onmessage = function (evt) { - // Received message from Stream Deck - var jsonObj = JSON.parse(evt.data); + // Notify the plugin that we are connected + sendValueToPlugin('propertyInspectorConnected', 'property_inspector'); +} - if (jsonObj.event === 'sendToPropertyInspector') { - var payload = jsonObj.payload; +function websocketOnMessage(evt) { + // Received message from Stream Deck + var jsonObj = JSON.parse(evt.data); - var inputText = document.getElementById('inputText'); - inputText.value = payload['inputText']; + if (jsonObj.event === 'sendToPropertyInspector') { + var payload = jsonObj.payload; + loadConfiguration(payload); + } + else if (jsonObj.event === 'didReceiveSettings') { + var payload = jsonObj.payload; + loadConfiguration(payload.settings); + } + else { + console.log("Unhandled websocketOnMessage: " + jsonObj.event); + } +} - var enterMode = document.getElementById('enterMode'); - enterMode.checked = payload['enterMode']; +function loadConfiguration(payload) { + console.log('loadConfiguration'); + console.log(payload); + for (var key in payload) { + try { + var elem = document.getElementById(key); + if (elem.classList.contains("sdCheckbox")) { // Checkbox + elem.checked = payload[key]; + } + else if (elem.classList.contains("sdFile")) { // File - var delay = document.getElementById('delay'); - delay.value = payload['delay']; - updateDelayLabel(); + } + else { // Normal value + elem.value = payload[key]; + } + console.log("Load: " + key + "=" + payload[key]); } - }; + catch (err) { + console.log("loadConfiguration failed for key: " + key + " - " + err); + } + } } -function updateSettings() { - var inputText = document.getElementById('inputText'); - var delay = document.getElementById('delay'); - var enterMode = document.getElementById('enterMode'); +function setSettings() { var payload = {}; + var elements = document.getElementsByClassName("sdProperty"); - updateDelayLabel(); - payload.property_inspector = 'updateSettings'; - payload.inputText = inputText.value; - payload.delay = delay.value; - payload.enterMode = enterMode.checked; - sendPayloadToPlugin(payload); -} - -function updateDelayLabel() { - var delayLabel = document.getElementById('delay_label'); - var delay = document.getElementById('delay'); + Array.prototype.forEach.call(elements, function (elem) { + var key = elem.id; + if (elem.classList.contains("sdCheckbox")) { // Checkbox + payload[key] = elem.checked; + } + else if (elem.classList.contains("sdFile")) { // File - delayLabel.innerText = delay.value + " ms (Use left/right keys for added precision)"; + } + else { // Normal value + payload[key] = elem.value; + } + console.log("Save: " + key + "<=" + payload[key]); + }); + setSettingsToPlugin(payload); } -function sendPayloadToPlugin(payload) { +function setSettingsToPlugin(payload) { if (websocket && (websocket.readyState === 1)) { const json = { - 'action': actionInfo['action'], - 'event': 'sendToPlugin', + 'event': 'setSettings', 'context': uuid, 'payload': payload }; @@ -78,27 +103,27 @@ function sendPayloadToPlugin(payload) { } } -function openWebsite() { +// our method to pass values to the plugin +function sendValueToPlugin(value, param) { if (websocket && (websocket.readyState === 1)) { const json = { - 'event': 'openUrl', + 'action': actionInfo['action'], + 'event': 'sendToPlugin', + 'context': uuid, 'payload': { - 'url': 'https://BarRaider.github.io' + [param]: value } }; websocket.send(JSON.stringify(json)); } } -// our method to pass values to the plugin -function sendValueToPlugin(value, param) { +function openWebsite() { if (websocket && (websocket.readyState === 1)) { const json = { - 'action': actionInfo['action'], - 'event': 'sendToPlugin', - 'context': uuid, + 'event': 'openUrl', 'payload': { - [param]: value + 'url': 'https://BarRaider.github.io' } }; websocket.send(JSON.stringify(json)); diff --git a/DelayedText/manifest.json b/DelayedText/manifest.json index 2a4cc8b..c06cd03 100644 --- a/DelayedText/manifest.json +++ b/DelayedText/manifest.json @@ -21,7 +21,7 @@ "Name": "Delayed Text Input", "Icon": "Images/pluginIcon", "URL": "https://barraider.github.io/", - "Version": "1.2", + "Version": "1.3", "CodePath": "com.barraider.delayedtext", "Category": "BarRaider", "CategoryIcon": "Images/categoryIcon", @@ -30,5 +30,9 @@ "Platform": "windows", "MinimumVersion": "10" } - ] + ], + "SDKVersion": 2, + "Software": { + "MinimumVersion": "4.1" + } } diff --git a/DelayedText/packages.config b/DelayedText/packages.config index 75278cf..c9fb599 100644 --- a/DelayedText/packages.config +++ b/DelayedText/packages.config @@ -3,6 +3,8 @@ - - + + + + \ No newline at end of file diff --git a/README.md b/README.md index 2b17254..bf2640c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # streamdeck-delayedtext A C# delayed text inputer for the Elgato Stream Deck device. +## Dependencies +This plugin uses the [StreamDeck-Tools](https://github.com/BarRaider/streamdeck-tools) v2.0 + ## Current functionality - Simulates keyboard input - You can choose the delay between each character (between 1ms to 2000ms) @@ -14,10 +17,10 @@ Install by clicking the com.barraider.delayedtext.streamDeckPlugin file in the R https://github.com/BarRaider/streamdeck-delayedtext/releases ## I found a bug, who do I contact? -Just head over to the issues page and create a new issue. +For support please contact the developer. Contact information is available at https://barraider.github.io -## Dependencies -This library uses the [streamdeck-client-csharp](https://github.com/TyrenDe/streamdeck-client-csharp) wrapper +## I have a feature request, who do I contact? +Please contact the developer. Contact information is available at https://barraider.github.io ## License MIT License