Skip to content

Instantly share code, notes, and snippets.

@kelsos
Created April 5, 2017 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kelsos/bb671334249c6655766f46d004c0215c to your computer and use it in GitHub Desktop.
Save kelsos/bb671334249c6655766f46d004c0215c to your computer and use it in GitHub Desktop.
old window
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