Browse Source

add global mode

tags/2.3
clowwindy 9 years ago
parent
commit
5ed49ac6b6
4 changed files with 101 additions and 35 deletions
  1. +13
    -1
      shadowsocks-csharp/Controller/ShadowsocksController.cs
  2. +13
    -4
      shadowsocks-csharp/Controller/SystemProxy.cs
  3. +1
    -0
      shadowsocks-csharp/Model/Configuration.cs
  4. +74
    -30
      shadowsocks-csharp/View/MenuViewController.cs

+ 13
- 1
shadowsocks-csharp/Controller/ShadowsocksController.cs View File

@@ -31,6 +31,7 @@ namespace Shadowsocks.Controller
public event EventHandler ConfigChanged; public event EventHandler ConfigChanged;
public event EventHandler EnableStatusChanged; public event EventHandler EnableStatusChanged;
public event EventHandler EnableGlobalChanged;
public event EventHandler ShareOverLANStatusChanged; public event EventHandler ShareOverLANStatusChanged;
// when user clicked Edit PAC, and PAC file has already created // when user clicked Edit PAC, and PAC file has already created
@@ -93,6 +94,17 @@ namespace Shadowsocks.Controller
} }
} }
public void ToggleGlobal(bool global)
{
_config.global = global;
UpdateSystemProxy();
SaveConfig(_config);
if (EnableGlobalChanged != null)
{
EnableGlobalChanged(this, new EventArgs());
}
}
public void ToggleShareOverLAN(bool enabled) public void ToggleShareOverLAN(bool enabled)
{ {
_config.shareOverLan = enabled; _config.shareOverLan = enabled;
@@ -175,7 +187,7 @@ namespace Shadowsocks.Controller
{ {
if (_config.enabled) if (_config.enabled)
{ {
SystemProxy.Enable();
SystemProxy.Enable(_config.global);
_systemProxyIsDirty = true; _systemProxyIsDirty = true;
} }
else else


+ 13
- 4
shadowsocks-csharp/Controller/SystemProxy.cs View File

@@ -24,16 +24,25 @@ namespace Shadowsocks.Controller
_refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); _refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
} }
public static void Enable()
public static void Enable(bool global)
{ {
try try
{ {
RegistryKey registry = RegistryKey registry =
Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
true); true);
registry.SetValue("ProxyEnable", 0);
registry.SetValue("ProxyServer", "");
registry.SetValue("AutoConfigURL", "http://127.0.0.1:8093/pac?t=" + GetTimestamp(DateTime.Now));
if (global)
{
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", "127.0.0.1:8123");
registry.SetValue("AutoConfigURL", "");
}
else
{
registry.SetValue("ProxyEnable", 0);
registry.SetValue("ProxyServer", "");
registry.SetValue("AutoConfigURL", "http://127.0.0.1:8093/pac?t=" + GetTimestamp(DateTime.Now));
}
SystemProxy.NotifyIE(); SystemProxy.NotifyIE();
//Must Notify IE first, or the connections do not chanage //Must Notify IE first, or the connections do not chanage
CopyProxySettingFromLan(); CopyProxySettingFromLan();


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

@@ -11,6 +11,7 @@ namespace Shadowsocks.Model
{ {
public List<Server> configs; public List<Server> configs;
public int index; public int index;
public bool global;
public bool enabled; public bool enabled;
public bool shareOverLan; public bool shareOverLan;
public bool isDefault; public bool isDefault;


+ 74
- 30
shadowsocks-csharp/View/MenuViewController.cs View File

@@ -37,6 +37,9 @@ namespace Shadowsocks.View
private MenuItem menuItem3; private MenuItem menuItem3;
private MenuItem quitItem; private MenuItem quitItem;
private MenuItem menuItem1; private MenuItem menuItem1;
private MenuItem modeItem;
private MenuItem globalModeItem;
private MenuItem PACModeItem;
private ConfigForm configForm; private ConfigForm configForm;
public MenuViewController(ShadowsocksController controller) public MenuViewController(ShadowsocksController controller)
@@ -49,6 +52,7 @@ namespace Shadowsocks.View
controller.ConfigChanged += controller_ConfigChanged; controller.ConfigChanged += controller_ConfigChanged;
controller.PACFileReadyToOpen += controller_PACFileReadyToOpen; controller.PACFileReadyToOpen += controller_PACFileReadyToOpen;
controller.ShareOverLANStatusChanged += controller_ShareOverLANStatusChanged; controller.ShareOverLANStatusChanged += controller_ShareOverLANStatusChanged;
controller.EnableGlobalChanged += controller_EnableGlobalChanged;
this.updateChecker = new UpdateChecker(); this.updateChecker = new UpdateChecker();
updateChecker.NewVersionFound += updateChecker_NewVersionFound; updateChecker.NewVersionFound += updateChecker_NewVersionFound;
@@ -98,6 +102,9 @@ namespace Shadowsocks.View
{ {
this.contextMenu1 = new System.Windows.Forms.ContextMenu(); this.contextMenu1 = new System.Windows.Forms.ContextMenu();
this.enableItem = new System.Windows.Forms.MenuItem(); this.enableItem = new System.Windows.Forms.MenuItem();
this.modeItem = new System.Windows.Forms.MenuItem();
this.PACModeItem = new System.Windows.Forms.MenuItem();
this.globalModeItem = new System.Windows.Forms.MenuItem();
this.AutoStartupItem = new System.Windows.Forms.MenuItem(); this.AutoStartupItem = new System.Windows.Forms.MenuItem();
this.ShareOverLANItem = new System.Windows.Forms.MenuItem(); this.ShareOverLANItem = new System.Windows.Forms.MenuItem();
this.ServersItem = new System.Windows.Forms.MenuItem(); this.ServersItem = new System.Windows.Forms.MenuItem();
@@ -117,6 +124,7 @@ namespace Shadowsocks.View
// //
this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.enableItem, this.enableItem,
this.modeItem,
this.ServersItem, this.ServersItem,
this.menuItem1, this.menuItem1,
this.AutoStartupItem, this.AutoStartupItem,
@@ -134,22 +142,30 @@ namespace Shadowsocks.View
this.enableItem.Index = 0; this.enableItem.Index = 0;
this.enableItem.Text = "&Enable"; this.enableItem.Text = "&Enable";
this.enableItem.Click += new System.EventHandler(this.EnableItem_Click); this.enableItem.Click += new System.EventHandler(this.EnableItem_Click);
//
// AutoStartupItem
//
this.AutoStartupItem.Index = 3;
this.AutoStartupItem.Text = "Start on Boot";
this.AutoStartupItem.Click += new System.EventHandler(this.AutoStartupItem_Click);
//
// ShareOverLANItem
//
this.ShareOverLANItem.Index = 4;
this.ShareOverLANItem.Text = "Share over LAN";
this.ShareOverLANItem.Click += new System.EventHandler(this.ShareOverLANItem_Click);
//
// modeMenu
//
this.modeItem.Index = 1;
this.modeItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.PACModeItem,
this.globalModeItem});
this.modeItem.Text = "Mode";
//
// PACModeItem
//
this.PACModeItem.Index = 0;
this.PACModeItem.Text = "PAC";
this.PACModeItem.Click += new System.EventHandler(this.PACModeItem_Click);
//
// globalModeItem
//
this.globalModeItem.Index = 1;
this.globalModeItem.Text = "Global";
this.globalModeItem.Click += new System.EventHandler(this.GlobalModeItem_Click);
// //
// ServersItem // ServersItem
// //
this.ServersItem.Index = 1;
this.ServersItem.Index = 2;
this.ServersItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.ServersItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.SeperatorItem, this.SeperatorItem,
this.ConfigItem}); this.ConfigItem});
@@ -166,50 +182,62 @@ namespace Shadowsocks.View
this.ConfigItem.Text = "Edit Servers..."; this.ConfigItem.Text = "Edit Servers...";
this.ConfigItem.Click += new System.EventHandler(this.Config_Click); this.ConfigItem.Click += new System.EventHandler(this.Config_Click);
// //
// menuItem4
// menuItem1
// //
this.menuItem4.Index = 6;
this.menuItem4.Text = "-";
this.menuItem1.Index = 3;
this.menuItem1.Text = "-";
//
// AutoStartupItem
//
this.AutoStartupItem.Index = 4;
this.AutoStartupItem.Text = "Start on Boot";
this.AutoStartupItem.Click += new System.EventHandler(this.AutoStartupItem_Click);
//
// ShareOverLANItem
//
this.ShareOverLANItem.Index = 5;
this.ShareOverLANItem.Text = "Share over LAN";
this.ShareOverLANItem.Click += new System.EventHandler(this.ShareOverLANItem_Click);
// //
// editPACFileItem // editPACFileItem
// //
this.editPACFileItem.Index = 5;
this.editPACFileItem.Index = 6;
this.editPACFileItem.Text = "Edit &PAC File..."; this.editPACFileItem.Text = "Edit &PAC File...";
this.editPACFileItem.Click += new System.EventHandler(this.EditPACFileItem_Click); this.editPACFileItem.Click += new System.EventHandler(this.EditPACFileItem_Click);
// //
// menuItem4
//
this.menuItem4.Index = 7;
this.menuItem4.Text = "-";
//
// QRCodeItem // QRCodeItem
// //
this.QRCodeItem.Index = 7;
this.QRCodeItem.Index = 8;
this.QRCodeItem.Text = "Show &QRCode..."; this.QRCodeItem.Text = "Show &QRCode...";
this.QRCodeItem.Click += new System.EventHandler(this.QRCodeItem_Click); this.QRCodeItem.Click += new System.EventHandler(this.QRCodeItem_Click);
// //
// ShowLogItem // ShowLogItem
// //
this.ShowLogItem.Index = 8;
this.ShowLogItem.Index = 9;
this.ShowLogItem.Text = "Show Logs..."; this.ShowLogItem.Text = "Show Logs...";
this.ShowLogItem.Click += new System.EventHandler(this.ShowLogItem_Click); this.ShowLogItem.Click += new System.EventHandler(this.ShowLogItem_Click);
// //
// aboutItem // aboutItem
// //
this.aboutItem.Index = 9;
this.aboutItem.Index = 10;
this.aboutItem.Text = "About..."; this.aboutItem.Text = "About...";
this.aboutItem.Click += new System.EventHandler(this.AboutItem_Click); this.aboutItem.Click += new System.EventHandler(this.AboutItem_Click);
// //
// menuItem3 // menuItem3
// //
this.menuItem3.Index = 10;
this.menuItem3.Index = 11;
this.menuItem3.Text = "-"; this.menuItem3.Text = "-";
// //
// quitItem // quitItem
// //
this.quitItem.Index = 11;
this.quitItem.Index = 12;
this.quitItem.Text = "&Quit"; this.quitItem.Text = "&Quit";
this.quitItem.Click += new System.EventHandler(this.Quit_Click); this.quitItem.Click += new System.EventHandler(this.Quit_Click);
//
// menuItem1
//
this.menuItem1.Index = 2;
this.menuItem1.Text = "-";
} }
private void controller_ConfigChanged(object sender, EventArgs e) private void controller_ConfigChanged(object sender, EventArgs e)
@@ -227,6 +255,12 @@ namespace Shadowsocks.View
ShareOverLANItem.Checked = controller.GetConfiguration().shareOverLan; ShareOverLANItem.Checked = controller.GetConfiguration().shareOverLan;
} }
void controller_EnableGlobalChanged(object sender, EventArgs e)
{
globalModeItem.Checked = controller.GetConfiguration().global;
PACModeItem.Checked = !globalModeItem.Checked;
}
void controller_PACFileReadyToOpen(object sender, ShadowsocksController.PathEventArgs e) void controller_PACFileReadyToOpen(object sender, ShadowsocksController.PathEventArgs e)
{ {
string argument = @"/select, " + e.Path; string argument = @"/select, " + e.Path;
@@ -255,6 +289,8 @@ namespace Shadowsocks.View
Configuration config = controller.GetConfiguration(); Configuration config = controller.GetConfiguration();
UpdateServersMenu(); UpdateServersMenu();
enableItem.Checked = config.enabled; enableItem.Checked = config.enabled;
globalModeItem.Checked = config.global;
PACModeItem.Checked = !config.global;
ShareOverLANItem.Checked = config.shareOverLan; ShareOverLANItem.Checked = config.shareOverLan;
AutoStartupItem.Checked = AutoStartup.Check(); AutoStartupItem.Checked = AutoStartup.Check();
} }
@@ -338,11 +374,19 @@ namespace Shadowsocks.View
ShowConfigForm(); ShowConfigForm();
} }
private void EnableItem_Click(object sender, EventArgs e) private void EnableItem_Click(object sender, EventArgs e)
{ {
enableItem.Checked = !enableItem.Checked;
controller.ToggleEnable(enableItem.Checked);
controller.ToggleEnable(!enableItem.Checked);
}
private void GlobalModeItem_Click(object sender, EventArgs e)
{
controller.ToggleGlobal(true);
}
private void PACModeItem_Click(object sender, EventArgs e)
{
controller.ToggleGlobal(false);
} }
private void ShareOverLANItem_Click(object sender, EventArgs e) private void ShareOverLANItem_Click(object sender, EventArgs e)


Loading…
Cancel
Save