diff --git a/TeamCord.Core/GUI/ChannelConnector.xaml.cs b/TeamCord.Core/GUI/ChannelConnector.xaml.cs index ab503c5..2164ea8 100644 --- a/TeamCord.Core/GUI/ChannelConnector.xaml.cs +++ b/TeamCord.Core/GUI/ChannelConnector.xaml.cs @@ -12,9 +12,9 @@ namespace TeamCord.GUI public partial class ChannelConnector : Window { private IList _servers; - private Action _resultCallback; + private Action _resultCallback; - public ChannelConnector(IList servers, Action resultCallback) + public ChannelConnector(IList servers, Action resultCallback) { _servers = servers; _resultCallback = resultCallback; @@ -28,6 +28,7 @@ private void LoadItems() { var mItem = new TreeViewItem(); mItem.Header = v.Name; + mItem.DataContext = v; foreach (var x in v.VoiceChannels) { var subItem = new RadioButton @@ -52,8 +53,8 @@ private void button_Apply_Click(object sender, RoutedEventArgs e) { if (x.IsChecked ?? false) { - var id = ((TCChannel)x.DataContext).Id; - _resultCallback(id); + //var id = ((TCChannel)x.DataContext).Id; + _resultCallback(((TCServer)v.DataContext).Name, (TCChannel)x.DataContext); Close(); return; } diff --git a/TeamCord.Plugin/Helpers.cs b/TeamCord.Plugin/Helpers.cs index cedd1ca..856df05 100644 --- a/TeamCord.Plugin/Helpers.cs +++ b/TeamCord.Plugin/Helpers.cs @@ -106,6 +106,11 @@ public static string RemoveClientID(string clientDescription) return clientDescription; } + /// + /// Build a json string for a Teamspeak channel desciption to a linked Discord channel + /// + /// + /// public static string ChannelIDToJsonString(ulong channelID) { var val = new TS3Json(new TS3ChannelJson(channelID)); @@ -113,6 +118,20 @@ public static string ChannelIDToJsonString(ulong channelID) return json; } + /// + /// Build a json string for a Teamspeak channel desciption to a linked Discord channel + /// + /// + /// + /// + /// + public static string ChannelIDToJsonString(ulong channelID, string serverName, string channelName) + { + var val = new TS3Json(new TS3ChannelJson(channelID, serverName, channelName)); + var json = JsonConvert.SerializeObject(val); + return json; + } + public static string DiscordIDToJsonString(ulong discordID) { var val = new TS3Json(new TS3ClientJson(discordID)); diff --git a/TeamCord.Plugin/TS3Json.cs b/TeamCord.Plugin/TS3Json.cs index 8dccc08..b1643b4 100644 --- a/TeamCord.Plugin/TS3Json.cs +++ b/TeamCord.Plugin/TS3Json.cs @@ -20,9 +20,15 @@ internal class TS3ChannelJson [JsonProperty("Channel")] public virtual ulong ChannelID { get; set; } - public TS3ChannelJson(ulong channelID) + public virtual string ServerName { get; set; } + + public virtual string ChannelName { get; set; } + + public TS3ChannelJson(ulong channelID, string serverName = null, string channelName = null) { ChannelID = channelID; + ServerName = serverName; + ChannelName = channelName; } } diff --git a/TeamCord.Plugin/TSPlugin.cs b/TeamCord.Plugin/TSPlugin.cs index 4929016..99c0b6f 100644 --- a/TeamCord.Plugin/TSPlugin.cs +++ b/TeamCord.Plugin/TSPlugin.cs @@ -242,9 +242,9 @@ public void LinkDiscordChannel(ulong serverConnectionHandlerID, ulong ts3Channel var list = ConnectionHandler.GetServerVoiceChannelList(); ChannelConnector c = new ChannelConnector(list, callback); c.ShowDialog(); - void callback(ulong channelID) + void callback(string serverName, TCChannel channel) { - var jsonString = Helpers.ChannelIDToJsonString(channelID); + var jsonString = Helpers.ChannelIDToJsonString(channel.Id, serverName, channel.Name); var err = Functions.getChannelVariableAsString(serverConnectionHandlerID, ts3ChannelID, ChannelProperties.CHANNEL_DESCRIPTION, out var currentDescription); //first remove all channelIDs which were set before in the description currentDescription = Helpers.RemoveChannelID(currentDescription).TrimEnd(null); @@ -323,6 +323,11 @@ public void Ts3ServerChanged(ulong serverConnectionHandler) Functions.getCurrentPlaybackDeviceName(serverConnectionHandler, out string currentPlaybackDevice, out bool defaultDevice); Functions.getCurrentPlayBackMode(serverConnectionHandler, out string mode); + //if the teamspeak speakers set to windows default abort + if (mode == null) + { + return; + } Functions.getPlaybackDeviceList(mode, out IntPtr ptr); unsafe {