using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using JD.Interfaces.Remoting; using JD.Remoting.Services; using JD.Remoting.WPF.Module.Settings; using Plume.Icons; using Plume.Interfaces.WPF; using Plume.Interfaces.WPF.Actions; using Plume.Interfaces.WPF.Notifications; namespace JD.Remoting.WPF.Actions { public class ConnectAction : Plume.Interfaces.WPF.Actions.Action { public ConnectAction(EngineConnection connection) :base($"{connection}", $"Connect the application to {connection}", StandardIcon.Wifi) { CommandParameter = connection; } /// public override void Execute(IActionContext context, EngineConnection connection) { var app = Application.Current as IWpfApplication; INotificationManager notificationService = app.NotificationManager; IPluginService pluginService = app.ServiceManager.GetPluginService(); pluginService?.Start(new EndPointId(connection.Ip, connection.Port)); Task.Delay(500).ContinueWith(task => { foreach (IPlugin plugin in pluginService) { if (!plugin.IsConnected) { notificationService.ShowError($"Unable to connect the plugin ({plugin.Name}) to the engine; target: {pluginService.EndPointId}"); } } }); } /// public override bool CanExecute(IActionContext context, EngineConnection parameter) { return true; } public static MenuItem GetMenu() { var app = Application.Current as IWpfApplication; var connectToMenuItem = new MenuItem { Header = "Connect", Icon = new Icon(StandardIcon.Wifi).ToImage(16, 16) }; var remotingSettings = app.SettingsManager.Get(); if (remotingSettings == null) return null; remotingSettings.PropertyChanged += (sender, args) => { UpdateConnectionsMenus(connectToMenuItem, remotingSettings); }; remotingSettings.Connections.CollectionChanged += (sender, args) => { UpdateConnectionsMenus(connectToMenuItem, remotingSettings); }; UpdateConnectionsMenus(connectToMenuItem, remotingSettings); return connectToMenuItem; } private static void UpdateConnectionsMenus(MenuItem parentMenu, RemotingSettings settings) { parentMenu.Items.Clear(); var connections = settings.Connections.ToList(); connections.Insert(0, EngineConnection.Default); foreach (var connection in connections) { var action = new ConnectAction(connection); parentMenu.Items.Add(action.ToMenuItem()); } } } }