190 lines
5.6 KiB
JavaScript
190 lines
5.6 KiB
JavaScript
/*!
|
|
@file main.js
|
|
@brief Handles SD behavior
|
|
@author Valentin Reinbold
|
|
@copyright (c) 2021, Corsair Memory, Inc. All Rights Reserved.
|
|
*/
|
|
|
|
// Global web socket
|
|
var websocket = null;
|
|
|
|
// Global plugin settings
|
|
var globalSettings = {};
|
|
|
|
// Global settings
|
|
var settings = {};
|
|
|
|
// Setup the websocket and handle communication
|
|
function connectElgatoStreamDeckSocket(inPort, inUUID, inRegisterEvent, inInfo, inActionInfo) {
|
|
// Parse parameter from string to object
|
|
var actionInfo = JSON.parse(inActionInfo);
|
|
var info = JSON.parse(inInfo);
|
|
|
|
console.log("actionInfo", actionInfo);
|
|
console.log("info", info);
|
|
|
|
// Save global settings
|
|
settings = actionInfo['payload']['settings'];
|
|
|
|
// Retrieve language
|
|
var language = info['application']['language'];
|
|
|
|
// Retrieve action identifier
|
|
var action = actionInfo['action'];
|
|
|
|
// Open the web socket to Stream Deck
|
|
// Use 127.0.0.1 because Windows needs 300ms to resolve localhost
|
|
websocket = new WebSocket("ws://127.0.0.1:" + inPort);
|
|
|
|
// WebSocket is connected, send message
|
|
websocket.onopen = function () {
|
|
// Register property inspector to Stream Deck
|
|
registerPI(inRegisterEvent, inUUID);
|
|
|
|
// Request the global settings of the plugin
|
|
requestGlobalSettings(inUUID);
|
|
};
|
|
|
|
// Create actions
|
|
if (action == "com.elgato.discord.mute") {
|
|
var pi = new MutePI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.deafen") {
|
|
var pi = new DeafenPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.channel.voice") {
|
|
var pi = new VoiceChannelPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.channel.text") {
|
|
var pi = new TextChannelPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.pushto.talk") {
|
|
var pi = new PushToTalkPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.pushto.mute") {
|
|
var pi = new PushToMutePI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.volumecontrol") {
|
|
var pi = new VolumePI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.volumecontrolbutton") {
|
|
var pi = new VolumeButtonPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.uservolumecontrolbutton") {
|
|
var pi = new UserVolumeButtonPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.uservolumecontroldial") {
|
|
var pi = new UserVolumeDialPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.pushtotalktoggle") {
|
|
var pi = new PushToTalkTogglePI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.notifications") {
|
|
var pi = new NotificationsPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.setaudiodevice") {
|
|
var pi = new SetAudioDevicePI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.serverstats") {
|
|
var pi = new ServerStatsPI(inUUID, language);
|
|
}
|
|
else if (action == "com.elgato.discord.soundboard") {
|
|
var pi = new SoundboardPI(inUUID, language);
|
|
}
|
|
|
|
websocket.onmessage = function (evt) {
|
|
// Received message from Stream Deck
|
|
var jsonObj = JSON.parse(evt.data);
|
|
var event = jsonObj['event'];
|
|
var jsonPayload = jsonObj['payload'];
|
|
|
|
if(event == "didReceiveGlobalSettings") {
|
|
// Set global plugin settings
|
|
globalSettings = jsonPayload['settings'];
|
|
}
|
|
else if(event == "didReceiveSettings") {
|
|
// Save global settings after default was set
|
|
settings = jsonPayload['settings'];
|
|
}
|
|
else if(event == "sendToPropertyInspector") {
|
|
// Initialize & receive the new data
|
|
var data = jsonPayload ?? {};
|
|
|
|
// Load Property Inspector
|
|
pi.load(data);
|
|
}
|
|
};
|
|
}
|
|
|
|
// Register property inspector
|
|
function registerPI(inEvent, inUUID) {
|
|
if (websocket) {
|
|
const json = {
|
|
"event": inEvent,
|
|
"uuid": inUUID
|
|
};
|
|
websocket.send(JSON.stringify(json));
|
|
}
|
|
}
|
|
|
|
// Set data to plugin
|
|
function sendToPlugin(inAction, inContext, inData) {
|
|
if (websocket) {
|
|
const json = {
|
|
"action": inAction,
|
|
"event": "sendToPlugin",
|
|
"context": inContext,
|
|
"payload": inData
|
|
};
|
|
websocket.send(JSON.stringify(json));
|
|
}
|
|
}
|
|
|
|
// Save settings
|
|
function saveSettings(inUUID, inSettings) {
|
|
if (websocket) {
|
|
const json = {
|
|
"event": "setSettings",
|
|
"context": inUUID,
|
|
"payload": inSettings
|
|
};
|
|
websocket.send(JSON.stringify(json));
|
|
}
|
|
}
|
|
|
|
// Save global settings
|
|
function saveGlobalSettings(inUUID) {
|
|
if (websocket) {
|
|
const json = {
|
|
"event": "setGlobalSettings",
|
|
"context": inUUID,
|
|
"payload": globalSettings
|
|
};
|
|
websocket.send(JSON.stringify(json));
|
|
}
|
|
}
|
|
|
|
// Request global settings
|
|
function requestGlobalSettings(inUUID) {
|
|
if (websocket) {
|
|
const json = {
|
|
"event": "getGlobalSettings",
|
|
"context": inUUID
|
|
};
|
|
websocket.send(JSON.stringify(json));
|
|
}
|
|
}
|
|
|
|
//
|
|
function openURL(url) {
|
|
if (websocket) {
|
|
const json = {
|
|
"event": "openUrl",
|
|
"payload": {
|
|
"url": url
|
|
}
|
|
};
|
|
websocket.send(JSON.stringify(json));
|
|
}
|
|
}
|