Skip to content
This repository has been archived by the owner on Feb 13, 2023. It is now read-only.

Commit

Permalink
Added Toggle Away Status & Change Nickname, Code Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
ZerGo0 committed Jan 11, 2020
1 parent 4fbb425 commit 1ada322
Show file tree
Hide file tree
Showing 14 changed files with 547 additions and 3 deletions.
210 changes: 210 additions & 0 deletions streamdeck-teamspeak3integration/Actions/TeamSpeak3AwayStatusAction.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
using System;
using System.Threading.Tasks;

using BarRaider.SdTools;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

using PrimS.Telnet;

using streamdeck_client_csharp;
using streamdeck_client_csharp.Events;

using ZerGo0.TeamSpeak3Integration.Helpers;

using KeyPayload = BarRaider.SdTools.KeyPayload;

namespace ZerGo0.TeamSpeak3Integration.Actions
{
[PluginActionId("com.zergo0.teamspeak3integration.toggleawaystatus")]
public class TeamSpeak3AwayStatusAction : PluginBase
{
public TeamSpeak3AwayStatusAction(SDConnection connection, InitialPayload payload) : base(connection, payload)
{
if (payload.Settings == null || payload.Settings.Count == 0)
_settings = PluginSettings.CreateDefaultSettings();
else
_settings = payload.Settings.ToObject<PluginSettings>();
connection.StreamDeckConnection.OnSendToPlugin += StreamDeckConnection_OnSendToPlugin;

SaveSettings();
}

public override void Dispose()
{
_telnetclient?.Dispose();
Connection.StreamDeckConnection.OnSendToPlugin -= StreamDeckConnection_OnSendToPlugin;
Logger.Instance.LogMessage(TracingLevel.INFO, "Destructor called");
}

public override async void KeyPressed(KeyPayload payload)
{
Logger.Instance.LogMessage(TracingLevel.INFO, "Key Pressed");

if (_telnetclient == null || !_telnetclient.IsConnected)
{
_telnetclient = await TeamSpeak3Telnet.SetupTelnetClient(_settings.ApiKey);
if (_telnetclient == null) return;
}

await ToggleAwayStatus(_telnetclient);
}

public override void KeyReleased(KeyPayload payload)
{
}

public override async void OnTick()
{
try
{
if (_telnetclient == null || !_telnetclient.IsConnected)
{
_telnetclient = await TeamSpeak3Telnet.SetupTelnetClient(_settings.ApiKey);
if (_telnetclient == null) return;
}

var clientId = await TeamSpeak3Telnet.GetClientId(_telnetclient);
if (clientId == null)
{
_telnetclient?.Dispose();
return;
}

var awayStatus = await TeamSpeak3Telnet.GetAwayStatus(_telnetclient, clientId);
if (awayStatus == _savedSatus)
{
await SetAwayStatusImage(awayStatus);
return;
}

switch (awayStatus)
{
case -1:
return;
case 0:
await SetAwayStatusImage();
break;
case 1:
await SetAwayStatusImage(1);
break;
}

_savedSatus = awayStatus;
}
catch (Exception)
{
_telnetclient?.Dispose();
_telnetclient = null;
await SetAwayStatusImage();
}
}

public override void ReceivedSettings(ReceivedSettingsPayload payload)
{
Tools.AutoPopulateSettings(_settings, payload.Settings);
SaveSettings();
}

public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload)
{
}

private class PluginSettings
{
[JsonProperty(PropertyName = "apiKey")]
public string ApiKey { get; set; }

[JsonProperty(PropertyName = "awayStatusMessage")]
public string AwayStatusMessage { get; set; }

public static PluginSettings CreateDefaultSettings()
{
var instance = new PluginSettings
{
ApiKey = string.Empty,
AwayStatusMessage = string.Empty
};

return instance;
}
}

#region Private Members

private readonly PluginSettings _settings;
private int _savedSatus;
private Client _telnetclient;

#endregion

#region Private Methods

private Task SaveSettings()
{
return Connection.SetSettingsAsync(JObject.FromObject(_settings));
}

private async void StreamDeckConnection_OnSendToPlugin(object sender,
StreamDeckEventReceivedEventArgs<SendToPluginEvent> e)
{
var payload = e.Event.Payload;
if (Connection.ContextId != e.Event.Context) return;
}

private async Task ToggleAwayStatus(Client telnetClient)
{
try
{
var clientId = await TeamSpeak3Telnet.GetClientId(telnetClient);
if (clientId == null)
{
_telnetclient?.Dispose();
return;
}

var awayStatus = await TeamSpeak3Telnet.GetAwayStatus(telnetClient, clientId);
var setAwayStatus = false;
switch (awayStatus)
{
case -1:
return;
case 0:
setAwayStatus = await TeamSpeak3Telnet.SetAwayStatus(telnetClient, "1");
if (_settings.AwayStatusMessage.Length > 0)
await TeamSpeak3Telnet.SetAwayMessage(telnetClient, _settings.AwayStatusMessage);
await SetAwayStatusImage(1);
break;
case 1:
setAwayStatus = await TeamSpeak3Telnet.SetAwayStatus(telnetClient, "0");
await SetAwayStatusImage();
break;
}

if (!setAwayStatus) return;
}
catch (Exception)
{
_telnetclient?.Dispose();
_telnetclient = null;
await SetAwayStatusImage();
}
}

private async Task SetAwayStatusImage(int muted = 0)
{
switch (muted)
{
case 0:
await Connection.SetStateAsync(0);
break;
case 1:
await Connection.SetStateAsync(1);
break;
}
}

#endregion
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
using System;
using System.Threading.Tasks;

using BarRaider.SdTools;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

using PrimS.Telnet;

using streamdeck_client_csharp;
using streamdeck_client_csharp.Events;

using ZerGo0.TeamSpeak3Integration.Helpers;

using KeyPayload = BarRaider.SdTools.KeyPayload;

namespace ZerGo0.TeamSpeak3Integration.Actions
{
[PluginActionId("com.zergo0.teamspeak3integration.changenickname")]
public class TeamSpeak3ChangeNicknameAction : PluginBase
{
public TeamSpeak3ChangeNicknameAction(SDConnection connection, InitialPayload payload) : base(connection,
payload)
{
if (payload.Settings == null || payload.Settings.Count == 0)
_settings = PluginSettings.CreateDefaultSettings();
else
_settings = payload.Settings.ToObject<PluginSettings>();
connection.StreamDeckConnection.OnSendToPlugin += StreamDeckConnection_OnSendToPlugin;

SaveSettings();
}

public override void Dispose()
{
_telnetclient?.Dispose();
Connection.StreamDeckConnection.OnSendToPlugin -= StreamDeckConnection_OnSendToPlugin;
Logger.Instance.LogMessage(TracingLevel.INFO, "Destructor called");
}

public override async void KeyPressed(KeyPayload payload)
{
Logger.Instance.LogMessage(TracingLevel.INFO, "Key Pressed");

if (_telnetclient == null || !_telnetclient.IsConnected)
{
_telnetclient = await TeamSpeak3Telnet.SetupTelnetClient(_settings.ApiKey);
if (_telnetclient == null) return;
}

await ChangeNickname(_telnetclient);
}

public override void KeyReleased(KeyPayload payload)
{
}

public override async void OnTick()
{
}

public override void ReceivedSettings(ReceivedSettingsPayload payload)
{
Tools.AutoPopulateSettings(_settings, payload.Settings);
SaveSettings();
}

public override void ReceivedGlobalSettings(ReceivedGlobalSettingsPayload payload)
{
}

private class PluginSettings
{
[JsonProperty(PropertyName = "apiKey")]
public string ApiKey { get; set; }

[JsonProperty(PropertyName = "nickName")]
public string NickName { get; set; }

public static PluginSettings CreateDefaultSettings()
{
var instance = new PluginSettings
{
ApiKey = string.Empty,
NickName = string.Empty
};

return instance;
}
}

#region Private Members

private readonly PluginSettings _settings;
private Client _telnetclient;

#endregion

#region Private Methods

private Task SaveSettings()
{
return Connection.SetSettingsAsync(JObject.FromObject(_settings));
}

private async void StreamDeckConnection_OnSendToPlugin(object sender,
StreamDeckEventReceivedEventArgs<SendToPluginEvent> e)
{
var payload = e.Event.Payload;
if (Connection.ContextId != e.Event.Context) return;
}

private async Task ChangeNickname(Client telnetClient)
{
try
{
var clientId = await TeamSpeak3Telnet.GetClientId(telnetClient);
if (clientId == null)
{
_telnetclient?.Dispose();
return;
}

await TeamSpeak3Telnet.ChangeNickname(_telnetclient, _settings.NickName);
}
catch (Exception)
{
_telnetclient?.Dispose();
_telnetclient = null;
}
}

#endregion
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public override async void OnTick()
{
_telnetclient?.Dispose();
_telnetclient = null;
//await SetOutputStatusImage(0);
await SetOutputStatusImage();
}
}

Expand Down
Loading

0 comments on commit 1ada322

Please sign in to comment.