Files

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));
}
}