|
|
@@ -16,9 +16,10 @@ namespace Shadowsocks.View |
|
|
|
private UpdateChecker updateChecker;
|
|
|
|
|
|
|
|
// this is a copy of configuration that we are working on
|
|
|
|
private Configuration modifiedConfiguration;
|
|
|
|
private int oldSelectedIndex = -1;
|
|
|
|
private bool isFirstRun;
|
|
|
|
private Configuration _modifiedConfiguration;
|
|
|
|
private Configuration _oldConfiguration;
|
|
|
|
private int _oldSelectedIndex = -1;
|
|
|
|
private bool _isFirstRun;
|
|
|
|
|
|
|
|
public ConfigForm(ShadowsocksController controller)
|
|
|
|
{
|
|
|
@@ -66,7 +67,7 @@ namespace Shadowsocks.View |
|
|
|
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
|
|
|
|
notifyIcon1.BalloonTipClicked += notifyIcon1_BalloonTipClicked;
|
|
|
|
notifyIcon1.ShowBalloonTip(5000);
|
|
|
|
isFirstRun = false;
|
|
|
|
_isFirstRun = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
|
|
|
@@ -82,11 +83,11 @@ namespace Shadowsocks.View |
|
|
|
IPTextBox.Focus();
|
|
|
|
}
|
|
|
|
|
|
|
|
private bool SaveOldSelectedServer()
|
|
|
|
private bool SaveOldSelectedServer(object sender)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if (oldSelectedIndex == -1 || oldSelectedIndex >= modifiedConfiguration.configs.Count)
|
|
|
|
if (_oldSelectedIndex == -1 || _oldSelectedIndex >= _modifiedConfiguration.configs.Count)
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
@@ -100,7 +101,27 @@ namespace Shadowsocks.View |
|
|
|
remarks = RemarksTextBox.Text
|
|
|
|
};
|
|
|
|
Configuration.CheckServer(server);
|
|
|
|
modifiedConfiguration.configs[oldSelectedIndex] = server;
|
|
|
|
|
|
|
|
_modifiedConfiguration.configs[_oldSelectedIndex] = server;
|
|
|
|
if (sender.Equals(OKButton))
|
|
|
|
{
|
|
|
|
if (_oldConfiguration.configs[_oldConfiguration.index].server ==
|
|
|
|
_modifiedConfiguration.configs[_oldSelectedIndex].server &&
|
|
|
|
_oldConfiguration.configs[_oldConfiguration.index].server_port ==
|
|
|
|
_modifiedConfiguration.configs[_oldSelectedIndex].server_port &&
|
|
|
|
_oldConfiguration.configs[_oldConfiguration.index].password ==
|
|
|
|
_modifiedConfiguration.configs[_oldSelectedIndex].password &&
|
|
|
|
_oldConfiguration.configs[_oldConfiguration.index].local_port ==
|
|
|
|
_modifiedConfiguration.configs[_oldSelectedIndex].local_port)
|
|
|
|
{
|
|
|
|
_modifiedConfiguration.noChange = true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_modifiedConfiguration.noChange = false;
|
|
|
|
_oldConfiguration = _modifiedConfiguration;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
catch (FormatException)
|
|
|
@@ -116,15 +137,15 @@ namespace Shadowsocks.View |
|
|
|
|
|
|
|
private void LoadSelectedServer()
|
|
|
|
{
|
|
|
|
if (ServersListBox.SelectedIndex >= 0 && ServersListBox.SelectedIndex < modifiedConfiguration.configs.Count)
|
|
|
|
if (ServersListBox.SelectedIndex >= 0 && ServersListBox.SelectedIndex < _modifiedConfiguration.configs.Count)
|
|
|
|
{
|
|
|
|
Server server = modifiedConfiguration.configs[ServersListBox.SelectedIndex];
|
|
|
|
Server server = _modifiedConfiguration.configs[ServersListBox.SelectedIndex];
|
|
|
|
|
|
|
|
IPTextBox.Text = server.server;
|
|
|
|
ServerPortTextBox.Text = server.server_port.ToString();
|
|
|
|
PasswordTextBox.Text = server.password;
|
|
|
|
ProxyPortTextBox.Text = server.local_port.ToString();
|
|
|
|
EncryptionSelect.Text = server.method == null ? "aes-256-cfb" : server.method;
|
|
|
|
EncryptionSelect.Text = server.method ?? "aes-256-cfb";
|
|
|
|
RemarksTextBox.Text = server.remarks;
|
|
|
|
ServerGroupBox.Visible = true;
|
|
|
|
//IPTextBox.Focus();
|
|
|
@@ -138,7 +159,7 @@ namespace Shadowsocks.View |
|
|
|
private void LoadConfiguration(Configuration configuration)
|
|
|
|
{
|
|
|
|
ServersListBox.Items.Clear();
|
|
|
|
foreach (Server server in modifiedConfiguration.configs)
|
|
|
|
foreach (Server server in _modifiedConfiguration.configs)
|
|
|
|
{
|
|
|
|
ServersListBox.Items.Add(string.IsNullOrEmpty(server.server) ? "New server" : string.IsNullOrEmpty(server.remarks)? server.server + ":" + server.server_port : server.server + ":" + server.server_port + " (" + server.remarks + ")");
|
|
|
|
}
|
|
|
@@ -146,15 +167,16 @@ namespace Shadowsocks.View |
|
|
|
|
|
|
|
private void LoadCurrentConfiguration()
|
|
|
|
{
|
|
|
|
modifiedConfiguration = controller.GetConfiguration();
|
|
|
|
LoadConfiguration(modifiedConfiguration);
|
|
|
|
oldSelectedIndex = modifiedConfiguration.index;
|
|
|
|
ServersListBox.SelectedIndex = modifiedConfiguration.index;
|
|
|
|
_modifiedConfiguration = controller.GetConfiguration();
|
|
|
|
_oldConfiguration = _modifiedConfiguration;
|
|
|
|
LoadConfiguration(_modifiedConfiguration);
|
|
|
|
_oldSelectedIndex = _modifiedConfiguration.index;
|
|
|
|
ServersListBox.SelectedIndex = _modifiedConfiguration.index;
|
|
|
|
LoadSelectedServer();
|
|
|
|
|
|
|
|
UpdateServersMenu();
|
|
|
|
enableItem.Checked = modifiedConfiguration.enabled;
|
|
|
|
ShareOverLANItem.Checked = modifiedConfiguration.shareOverLan;
|
|
|
|
enableItem.Checked = _modifiedConfiguration.enabled;
|
|
|
|
ShareOverLANItem.Checked = _modifiedConfiguration.shareOverLan;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void UpdateServersMenu()
|
|
|
@@ -193,56 +215,56 @@ namespace Shadowsocks.View |
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
isFirstRun = true;
|
|
|
|
_isFirstRun = true;
|
|
|
|
}
|
|
|
|
updateChecker.CheckUpdate();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void ServersListBox_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
if (oldSelectedIndex == ServersListBox.SelectedIndex)
|
|
|
|
if (_oldSelectedIndex == ServersListBox.SelectedIndex)
|
|
|
|
{
|
|
|
|
// we are moving back to oldSelectedIndex or doing a force move
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!SaveOldSelectedServer())
|
|
|
|
if (!SaveOldSelectedServer(sender))
|
|
|
|
{
|
|
|
|
// why this won't cause stack overflow?
|
|
|
|
ServersListBox.SelectedIndex = oldSelectedIndex;
|
|
|
|
ServersListBox.SelectedIndex = _oldSelectedIndex;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
LoadSelectedServer();
|
|
|
|
oldSelectedIndex = ServersListBox.SelectedIndex;
|
|
|
|
_oldSelectedIndex = ServersListBox.SelectedIndex;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void AddButton_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
if (!SaveOldSelectedServer())
|
|
|
|
if (!SaveOldSelectedServer(sender))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
Server server = Configuration.GetDefaultServer();
|
|
|
|
modifiedConfiguration.configs.Add(server);
|
|
|
|
LoadConfiguration(modifiedConfiguration);
|
|
|
|
ServersListBox.SelectedIndex = modifiedConfiguration.configs.Count - 1;
|
|
|
|
oldSelectedIndex = ServersListBox.SelectedIndex;
|
|
|
|
_modifiedConfiguration.configs.Add(server);
|
|
|
|
LoadConfiguration(_modifiedConfiguration);
|
|
|
|
ServersListBox.SelectedIndex = _modifiedConfiguration.configs.Count - 1;
|
|
|
|
_oldSelectedIndex = ServersListBox.SelectedIndex;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void DeleteButton_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
oldSelectedIndex = ServersListBox.SelectedIndex;
|
|
|
|
if (oldSelectedIndex >= 0 && oldSelectedIndex < modifiedConfiguration.configs.Count)
|
|
|
|
_oldSelectedIndex = ServersListBox.SelectedIndex;
|
|
|
|
if (_oldSelectedIndex >= 0 && _oldSelectedIndex < _modifiedConfiguration.configs.Count)
|
|
|
|
{
|
|
|
|
modifiedConfiguration.configs.RemoveAt(oldSelectedIndex);
|
|
|
|
_modifiedConfiguration.configs.RemoveAt(_oldSelectedIndex);
|
|
|
|
}
|
|
|
|
if (oldSelectedIndex >= modifiedConfiguration.configs.Count)
|
|
|
|
if (_oldSelectedIndex >= _modifiedConfiguration.configs.Count)
|
|
|
|
{
|
|
|
|
// can be -1
|
|
|
|
oldSelectedIndex = modifiedConfiguration.configs.Count - 1;
|
|
|
|
_oldSelectedIndex = _modifiedConfiguration.configs.Count - 1;
|
|
|
|
}
|
|
|
|
ServersListBox.SelectedIndex = oldSelectedIndex;
|
|
|
|
LoadConfiguration(modifiedConfiguration);
|
|
|
|
ServersListBox.SelectedIndex = oldSelectedIndex;
|
|
|
|
ServersListBox.SelectedIndex = _oldSelectedIndex;
|
|
|
|
LoadConfiguration(_modifiedConfiguration);
|
|
|
|
ServersListBox.SelectedIndex = _oldSelectedIndex;
|
|
|
|
LoadSelectedServer();
|
|
|
|
}
|
|
|
|
|
|
|
@@ -258,28 +280,28 @@ namespace Shadowsocks.View |
|
|
|
|
|
|
|
private void ShowFirstTimeBalloon()
|
|
|
|
{
|
|
|
|
if (isFirstRun)
|
|
|
|
if (_isFirstRun)
|
|
|
|
{
|
|
|
|
notifyIcon1.BalloonTipTitle = "Shadowsocks is here";
|
|
|
|
notifyIcon1.BalloonTipText = "You can turn on/off Shadowsocks in the context menu";
|
|
|
|
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
|
|
|
|
notifyIcon1.ShowBalloonTip(0);
|
|
|
|
isFirstRun = false;
|
|
|
|
_isFirstRun = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OKButton_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
if (!SaveOldSelectedServer())
|
|
|
|
if (!SaveOldSelectedServer(sender))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (modifiedConfiguration.configs.Count == 0)
|
|
|
|
if (_modifiedConfiguration.configs.Count == 0)
|
|
|
|
{
|
|
|
|
MessageBox.Show("Please add at least one server");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
controller.SaveServers(modifiedConfiguration.configs);
|
|
|
|
controller.SaveConfig(_modifiedConfiguration);
|
|
|
|
this.Hide();
|
|
|
|
ShowFirstTimeBalloon();
|
|
|
|
}
|
|
|
@@ -348,5 +370,10 @@ namespace Shadowsocks.View |
|
|
|
qrCodeForm.Icon = this.Icon;
|
|
|
|
qrCodeForm.Show();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void enableLogBox_CheckedChanged(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
MessageBox.Show("This option only works on next startup.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|