/// <summary> /// Show the settings dialogue /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void settingsCommand(object sender, EventArgs e) { if (_plexService != null) { Settings settings = null; try { settings = Settings.Deserialize(_plexService.GetSettings()); } catch { disconnect(); } if (settings != null) { //Save the current server port setting for reference int oldPort = settings.ServerPort; SettingsWindowViewModel settingsViewModel = new SettingsWindowViewModel(settings); SettingsWindow settingsWindow = new SettingsWindow(settingsViewModel); if (settingsWindow.ShowDialog() == true) { PlexState status = PlexState.Pending; try { _plexService.SetSettings(settingsViewModel.WorkingSettings.Serialize()); status = _plexService.GetStatus(); } catch (Exception ex) { disconnect(); MessageBox.Show("Unable to save settings" + Environment.NewLine + ex.Message); } //The only setting that would require a restart of the service is the listening port. //If that gets changed notify the user to restart the service from the service snap in if (settingsViewModel.WorkingSettings.ServerPort != oldPort) { MessageBox.Show("Server port changed! You will need to restart the service from the services snap in for the change to be applied", "Settings changed!", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } } }
/// <summary> /// build the context menu each time it opens to ensure appropriate options /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ContextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel = false; _notifyIcon.ContextMenuStrip.Items.Clear(); //see if we are still connected. if (_plexService == null) { Connect(); } if (_plexService != null)// && ((ICommunicationObject)_plexService).State == CommunicationState.Opened) { var settings = Settings.Deserialize(_plexService.GetSettings()); try { var state = _plexService.GetStatus(); switch (state) { case PlexState.Running: _notifyIcon.ContextMenuStrip.Items.Add("Open Web Manager", null, OpenManager_Click); _notifyIcon.ContextMenuStrip.Items.Add("Stop Plex", null, StopPlex_Click); break; case PlexState.Stopped: _notifyIcon.ContextMenuStrip.Items.Add("Start Plex", null, StartPlex_Click); break; case PlexState.Pending: _notifyIcon.ContextMenuStrip.Items.Add("Restart Pending"); break; case PlexState.Stopping: _notifyIcon.ContextMenuStrip.Items.Add("Stopping"); break; default: _notifyIcon.ContextMenuStrip.Items.Add("Plex state unknown"); break; } _notifyIcon.ContextMenuStrip.Items.Add("View Logs", null, ViewLogs_Click); _notifyIcon.ContextMenuStrip.Items.Add(new ToolStripSeparator()); var auxAppsToLink = settings.AuxiliaryApplications.Where(aux => !string.IsNullOrEmpty(aux.Url)).ToList(); if (auxAppsToLink.Count > 0) { var auxAppsItem = new ToolStripMenuItem { Text = "Auxiliary Applications" }; auxAppsToLink.ForEach(aux => { auxAppsItem.DropDownItems.Add(aux.Name, null, (s, a) => { try { Process.Start(aux.Url); } catch (Exception ex) { MessageBox.Show(ex.Message, "Woops!", MessageBoxButtons.OK, MessageBoxIcon.Error); } }); }); _notifyIcon.ContextMenuStrip.Items.Add(auxAppsItem); _notifyIcon.ContextMenuStrip.Items.Add(new ToolStripSeparator()); } var settingsItem = _notifyIcon.ContextMenuStrip.Items.Add("Settings", null, SettingsCommand); if (_settingsWindow != null) { settingsItem.Enabled = false; } } catch { Disconnect(); _notifyIcon.ContextMenuStrip.Items.Add("Unable to connect to service. Check settings"); } } else { Disconnect(); _notifyIcon.ContextMenuStrip.Items.Add("Unable to connect to service. Check settings"); } _notifyIcon.ContextMenuStrip.Items.Add(new ToolStripSeparator()); var connectionSettingsItem = _notifyIcon.ContextMenuStrip.Items.Add("Connection Settings", null, ConnectionSettingsCommand); if (_connectionSettingsWindow != null) { connectionSettingsItem.Enabled = false; } var aboutItem = _notifyIcon.ContextMenuStrip.Items.Add("About", null, AboutCommand); if (AboutWindow.Shown) { aboutItem.Enabled = false; } _notifyIcon.ContextMenuStrip.Items.Add(new ToolStripSeparator()); var exitItem = _notifyIcon.ContextMenuStrip.Items.Add("Exit", null, ExitCommand); if (AboutWindow.Shown || _connectionSettingsWindow != null || _settingsWindow != null) { exitItem.Enabled = false; } }
/// <summary> /// Show the settings dialogue /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SettingsCommand(object sender, EventArgs e) { if (_plexService != null) { Settings settings = null; try { settings = Settings.Deserialize(_plexService.GetSettings()); } catch { Disconnect(); } if (settings != null) { //Save the current server port setting for reference int oldPort = settings.ServerPort; SettingsWindowViewModel settingsViewModel = new SettingsWindowViewModel(settings); settingsViewModel.AuxAppStartRequest += (s, args) => { var requester = s as AuxiliaryApplicationViewModel; if (requester != null) { _plexService.StartAuxApp(requester.Name); requester.Running = _plexService.IsAuxAppRunning(requester.Name); } }; settingsViewModel.AuxAppStopRequest += (s, args) => { var requester = s as AuxiliaryApplicationViewModel; if (requester != null) { _plexService.StopAuxApp(requester.Name); requester.Running = _plexService.IsAuxAppRunning(requester.Name); } }; settingsViewModel.AuxAppCheckRunRequest += (s, args) => { var requester = s as AuxiliaryApplicationViewModel; if (requester != null) { requester.Running = _plexService.IsAuxAppRunning(requester.Name); } }; SettingsWindow settingsWindow = new SettingsWindow(settingsViewModel); if (settingsWindow.ShowDialog() == true) { PlexState status = PlexState.Pending; try { _plexService.SetSettings(settingsViewModel.WorkingSettings.Serialize()); status = _plexService.GetStatus(); } catch (Exception ex) { Disconnect(); System.Windows.MessageBox.Show("Unable to save settings" + Environment.NewLine + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); } //The only setting that would require a restart of the service is the listening port. //If that gets changed notify the user to restart the service from the service snap in if (settingsViewModel.WorkingSettings.ServerPort != oldPort) { System.Windows.MessageBox.Show("Server port changed! You will need to restart the service from the services snap in for the change to be applied", "Settings changed!", MessageBoxButton.OK, MessageBoxImage.Information); } } } } }