Browse Source

add log switch and modify detector

Add an option to select whether to open log or not.
Add a detector to check whether the server setting changed.
pull/45/head
wzxjohn 10 years ago
parent
commit
0ef96e19f2
4 changed files with 97 additions and 47 deletions
  1. +25
    -3
      shadowsocks-csharp/Controller/ShadowsocksController.cs
  2. +2
    -0
      shadowsocks-csharp/Model/Configuration.cs
  3. +2
    -3
      shadowsocks-csharp/Program.cs
  4. +68
    -41
      shadowsocks-csharp/View/ConfigForm.cs

+ 25
- 3
shadowsocks-csharp/Controller/ShadowsocksController.cs View File

@@ -1,4 +1,5 @@
using Shadowsocks.Model;
using System.IO;
using Shadowsocks.Model;
using System;
using System.Collections.Generic;
using System.Text;
@@ -34,7 +35,11 @@ namespace Shadowsocks.Controller
public ShadowsocksController()
{
_config = Configuration.Load();
openOnLan = _config.openOnLan;
if (_config.enableLog)
{
SetLog();
}
polipoRunner = new PolipoRunner();
polipoRunner.Start(_config);
local = new Local(_config);
@@ -52,7 +57,7 @@ namespace Shadowsocks.Controller
UpdateSystemProxy();
}
public Server GetCurrentServer()
{
return _config.GetCurrentServer();
@@ -174,5 +179,22 @@ namespace Shadowsocks.Controller
UpdateSystemProxy();
}
private void SetLog()
{
try
{
FileStream fs = new FileStream("shadowsocks.log", FileMode.Append);
TextWriter tmp = Console.Out;
StreamWriter sw = new StreamWriter(fs);
sw.AutoFlush = true;
Console.SetOut(sw);
Console.SetError(sw);
}
catch (IOException e)
{
Console.WriteLine(e.ToString());
}
}
}
}

+ 2
- 0
shadowsocks-csharp/Model/Configuration.cs View File

@@ -18,6 +18,8 @@ namespace Shadowsocks.Model
public bool shareOverLan;
public bool isDefault;
public bool openOnLan;
public bool enableLog;
public bool noChange;
private static string CONFIG_FILE = "gui-config.json";


+ 2
- 3
shadowsocks-csharp/Program.cs View File

@@ -46,15 +46,14 @@ namespace Shadowsocks
Console.WriteLine(e.ToString());
}
LoadLibrary(dllPath);
Logging.OpenLogFile();
Logging.OpenLogFile();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ShadowsocksController controller = new ShadowsocksController();
// TODO run without a main form to save RAM
Application.Run(new ConfigForm(controller));
}
}
}


+ 68
- 41
shadowsocks-csharp/View/ConfigForm.cs View File

@@ -15,9 +15,10 @@ namespace Shadowsocks.View
private ShadowsocksController controller;
// 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)
{
@@ -63,11 +64,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;
}
@@ -81,7 +82,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)
@@ -97,15 +118,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();
@@ -119,7 +140,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 + ")");
}
@@ -127,15 +148,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;
UpdateServersMenu();
enableItem.Checked = _modifiedConfiguration.enabled;
ShareOverLANItem.Checked = _modifiedConfiguration.shareOverLan;
}
private void UpdateServersMenu()
@@ -174,55 +196,55 @@ namespace Shadowsocks.View
}
else
{
isFirstRun = true;
_isFirstRun = true;
}
}
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();
}
@@ -238,27 +260,27 @@ 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.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.SaveServers(_modifiedConfiguration.configs);
this.Hide();
ShowFirstTimeBalloon();
}
@@ -327,5 +349,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.");
}
}
}

Loading…
Cancel
Save