This repository has been archived by the owner on Feb 13, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added Toggle Away Status & Change Nickname, Code Cleanup
- Loading branch information
Showing
14 changed files
with
547 additions
and
3 deletions.
There are no files selected for viewing
210 changes: 210 additions & 0 deletions
210
streamdeck-teamspeak3integration/Actions/TeamSpeak3AwayStatusAction.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
136 changes: 136 additions & 0 deletions
136
streamdeck-teamspeak3integration/Actions/TeamSpeak3ChangeNicknameAction.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.