Created
April 5, 2017 18:18
-
-
Save kelsos/bb671334249c6655766f46d004c0215c to your computer and use it in GitHub Desktop.
old window
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
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel; | |
using System.Diagnostics; | |
using System.Drawing; | |
using System.Text.RegularExpressions; | |
using System.Windows.Forms; | |
using MusicBeeRemote.Core.Logging; | |
using MusicBeeRemote.Core.Network; | |
using MusicBeeRemote.PartyMode.Core.View; | |
using MusicBeeRemote.PartyMode.Core.ViewModel; | |
using TinyMessenger; | |
namespace MusicBeeRemote.Core.Settings.Dialog | |
{ | |
/// <summary> | |
/// Represents the Settings and monitoring dialog of the plugin. | |
/// </summary> | |
public partial class InfoWindow : Form, SocketTester.IConnectionListener | |
{ | |
private readonly PersistanceManager _settings; | |
private readonly ITinyMessengerHub _hub; | |
private BindingList<string> _ipAddressBinding; | |
private SocketTester _socketTester; | |
/// <summary> | |
/// </summary> | |
public InfoWindow(PersistanceManager settings, PartyModeViewModel viewModel, ITinyMessengerHub hub) | |
{ | |
_settings = settings; | |
_hub = hub; | |
InitializeComponent(); | |
_ipAddressBinding = new BindingList<string>(); | |
var partyModeView = new PartyModeView {DataContext = viewModel}; | |
partyModeView.InitializeComponent(); | |
elementHost1.Dock = DockStyle.Fill; | |
elementHost1.Child = partyModeView; | |
helpButton.Click += HelpButtonClick; | |
} | |
/// <summary> | |
/// Updates the visual indicator with the current Socket server status. | |
/// </summary> | |
/// <param name="isRunning"></param> | |
public void UpdateSocketStatus(bool isRunning) | |
{ | |
if (InvokeRequired) | |
{ | |
Invoke(new MethodInvoker(() => UpdateSocketStatus(isRunning))); | |
return; | |
} | |
if (isRunning) | |
{ | |
StatusLabelValue.Text = @"Running"; | |
StatusLabelValue.ForeColor = Color.Green; | |
} | |
else | |
{ | |
StatusLabelValue.Text = @"Stopped"; | |
StatusLabelValue.ForeColor = Color.Red; | |
} | |
} | |
private void HelpButtonClick(object sender, EventArgs e) | |
{ | |
Process.Start("http://kelsos.net/musicbeeremote/help/"); | |
} | |
private void InfoWindowLoad(object sender, EventArgs e) | |
{ | |
InternalIpList.DataSource = Tools.GetPrivateAddressList(); | |
VersionLabel.Text = _settings.UserSettingsModel.CurrentVersion; | |
portNumericUpDown.Value = _settings.UserSettingsModel.ListeningPort; | |
UpdateFilteringSelection(_settings.UserSettingsModel.FilterSelection); | |
AllowedAddressesComboBox.DataSource = _ipAddressBinding; | |
DebugEnabled.Checked = _settings.UserSettingsModel.DebugLogEnabled; | |
FirewallCheckbox.Checked = _settings.UserSettingsModel.UpdateFirewall; | |
_socketTester = new SocketTester(_settings) {ConnectionListener = this}; | |
_socketTester.VerifyConnection(); | |
} | |
private void SelectionFilteringComboBoxSelectedIndexChanged(object sender, EventArgs e) | |
{ | |
switch (SelectionFilteringComboBox.SelectedIndex) | |
{ | |
case 0: | |
AddressLabel.Enabled = false; | |
IpAddressInputTextBox.Enabled = false; | |
rangeNumericUpDown.Enabled = false; | |
AddAddressButton.Enabled = false; | |
RemoveAddressButton.Enabled = false; | |
AllowedAddressesComboBox.Enabled = false; | |
AllowedLabel.Enabled = false; | |
_settings.UserSettingsModel.FilterSelection = FilteringSelection.All; | |
break; | |
case 1: | |
AddressLabel.Enabled = true; | |
IpAddressInputTextBox.Enabled = true; | |
rangeNumericUpDown.Enabled = true; | |
AddAddressButton.Enabled = false; | |
RemoveAddressButton.Enabled = false; | |
AllowedAddressesComboBox.Enabled = false; | |
AllowedLabel.Enabled = false; | |
_settings.UserSettingsModel.FilterSelection = FilteringSelection.Range; | |
break; | |
case 2: | |
AddressLabel.Enabled = true; | |
IpAddressInputTextBox.Enabled = true; | |
rangeNumericUpDown.Enabled = false; | |
AddAddressButton.Enabled = true; | |
RemoveAddressButton.Enabled = true; | |
AllowedAddressesComboBox.Enabled = true; | |
AllowedLabel.Enabled = true; | |
_settings.UserSettingsModel.FilterSelection = FilteringSelection.Specific; | |
break; | |
} | |
} | |
private void UpdateFilteringSelection(FilteringSelection selection) | |
{ | |
switch (selection) | |
{ | |
case FilteringSelection.All: | |
SelectionFilteringComboBox.SelectedIndex = 0; | |
break; | |
case FilteringSelection.Range: | |
IpAddressInputTextBox.Text = _settings.UserSettingsModel.BaseIp; | |
rangeNumericUpDown.Value = _settings.UserSettingsModel.LastOctetMax; | |
SelectionFilteringComboBox.SelectedIndex = 1; | |
break; | |
case FilteringSelection.Specific: | |
_ipAddressBinding = new BindingList<string>(_settings.UserSettingsModel.IpAddressList); | |
SelectionFilteringComboBox.SelectedIndex = 2; | |
break; | |
default: | |
SelectionFilteringComboBox.SelectedIndex = 0; | |
break; | |
} | |
} | |
private void HandleSaveButtonClick(object sender, EventArgs e) | |
{ | |
_settings.UserSettingsModel.ListeningPort = (uint) portNumericUpDown.Value; | |
switch (SelectionFilteringComboBox.SelectedIndex) | |
{ | |
case 0: | |
break; | |
case 1: | |
_settings.UserSettingsModel.BaseIp = IpAddressInputTextBox.Text; | |
_settings.UserSettingsModel.LastOctetMax = (uint) rangeNumericUpDown.Value; | |
break; | |
case 2: | |
_settings.UserSettingsModel.IpAddressList = new List<string>(_ipAddressBinding); | |
break; | |
} | |
_settings.UserSettingsModel.UpdateFirewall = FirewallCheckbox.Checked; | |
_settings.SaveSettings(); | |
if (FirewallCheckbox.Checked) | |
{ | |
UpdateFirewallRules(_settings.UserSettingsModel.ListeningPort); | |
} | |
_socketTester = new SocketTester(_settings) {ConnectionListener = this}; | |
_socketTester.VerifyConnection(); | |
} | |
private void AddAddressButtonClick(object sender, EventArgs e) | |
{ | |
if (!IsAddressValid()) return; | |
if (!_ipAddressBinding.Contains(IpAddressInputTextBox.Text)) | |
{ | |
_ipAddressBinding.Add(IpAddressInputTextBox.Text); | |
} | |
} | |
private void RemoveAddressButtonClick(object sender, EventArgs e) | |
{ | |
_ipAddressBinding.Remove(AllowedAddressesComboBox.Text); | |
} | |
private bool IsAddressValid() | |
{ | |
const string pattern = | |
@"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"; | |
return Regex.IsMatch(IpAddressInputTextBox.Text, pattern); | |
} | |
private void HandleIpAddressInputTextBoxTextChanged(object sender, EventArgs e) | |
{ | |
var isAddressValid = IsAddressValid(); | |
IpAddressInputTextBox.BackColor = isAddressValid ? Color.LightGreen : Color.Red; | |
if (!isAddressValid || SelectionFilteringComboBox.SelectedIndex != 1) | |
{ | |
return; | |
} | |
var addressSplit = IpAddressInputTextBox.Text.Split(".".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); | |
rangeNumericUpDown.Minimum = int.Parse(addressSplit[3]); | |
} | |
private void DebugCheckboxCheckedChanged(object sender, EventArgs e) | |
{ | |
var settings = _settings; | |
settings.UserSettingsModel.DebugLogEnabled = DebugEnabled.Checked; | |
_hub.PublishAsync(new DebugSettingsModifiedEvent(settings.UserSettingsModel.DebugLogEnabled)); | |
} | |
private void OpenLogButtonClick(object sender, EventArgs e) | |
{ | |
// if (File.Exists(_settings.FullLogPath)) | |
// { | |
// //Process.Start(_settings.FullLogPath); | |
// } | |
// else | |
// { | |
// MessageBox.Show(Resources.InfoWindow_OpenLogButtonClick_Log_file_doesn_t_exist); | |
// } | |
} | |
/// <summary> | |
/// When called it will execute the firewall-utility passing the port settings | |
/// needed by the plugin. | |
/// </summary> | |
public void UpdateFirewallRules(uint port) | |
{ | |
var startInfo = new ProcessStartInfo( | |
$"{AppDomain.CurrentDomain.BaseDirectory}\\Plugins\\firewall-utility.exe") | |
{ | |
Verb = "runas", | |
Arguments = | |
$"-s {port}" | |
}; | |
Process.Start(startInfo); | |
} | |
public void OnConnectionResult(bool isConnnected) | |
{ | |
UpdateSocketStatus(isConnnected); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment