Browse Source

Merge pull request #256 from JeffreyZhang105/master

Added list of servers in QRCode generate window to select.
tags/2.5.3
clowwindy 9 years ago
parent
commit
1fec3a125c
4 changed files with 43 additions and 7 deletions
  1. +5
    -0
      shadowsocks-csharp/Controller/ShadowsocksController.cs
  2. +17
    -1
      shadowsocks-csharp/View/QRCodeForm.Designer.cs
  3. +19
    -4
      shadowsocks-csharp/View/QRCodeForm.cs
  4. +2
    -2
      shadowsocks-csharp/View/QRCodeForm.resx

+ 5
- 0
shadowsocks-csharp/Controller/ShadowsocksController.cs View File

@@ -228,6 +228,11 @@ namespace Shadowsocks.Controller
public string GetQRCodeForCurrentServer() public string GetQRCodeForCurrentServer()
{ {
Server server = GetCurrentServer(); Server server = GetCurrentServer();
return GetQRCode(server);
}
public static string GetQRCode(Server server)
{
string parts = server.method + ":" + server.password + "@" + server.server + ":" + server.server_port; string parts = server.method + ":" + server.password + "@" + server.server + ":" + server.server_port;
string base64 = System.Convert.ToBase64String(Encoding.UTF8.GetBytes(parts)); string base64 = System.Convert.ToBase64String(Encoding.UTF8.GetBytes(parts));
return "ss://" + base64; return "ss://" + base64;


+ 17
- 1
shadowsocks-csharp/View/QRCodeForm.Designer.cs View File

@@ -29,6 +29,7 @@
private void InitializeComponent() private void InitializeComponent()
{ {
this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.listBox1 = new System.Windows.Forms.ListBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
@@ -42,6 +43,19 @@
this.pictureBox1.TabIndex = 1; this.pictureBox1.TabIndex = 1;
this.pictureBox1.TabStop = false; this.pictureBox1.TabStop = false;
// //
// listBox1
//
this.listBox1.DisplayMember = "Value";
this.listBox1.FormattingEnabled = true;
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(224, 10);
this.listBox1.Name = "listBox1";
this.listBox1.ScrollAlwaysVisible = true;
this.listBox1.Size = new System.Drawing.Size(227, 208);
this.listBox1.TabIndex = 2;
this.listBox1.ValueMember = "Key";
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
//
// QRCodeForm // QRCodeForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@@ -49,7 +63,8 @@
this.AutoSize = true; this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.Color.White; this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(338, 274);
this.ClientSize = new System.Drawing.Size(457, 228);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.pictureBox1); this.Controls.Add(this.pictureBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false; this.MaximizeBox = false;
@@ -67,5 +82,6 @@
#endregion #endregion
private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.ListBox listBox1;
} }
} }

+ 19
- 4
shadowsocks-csharp/View/QRCodeForm.cs View File

@@ -8,8 +8,10 @@ using System.Data;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.IO.Compression; using System.IO.Compression;
using System.Linq;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using Shadowsocks.Model;
namespace Shadowsocks.View namespace Shadowsocks.View
{ {
@@ -30,8 +32,8 @@ namespace Shadowsocks.View
string qrText = ssconfig; string qrText = ssconfig;
QRCode code = ZXing.QrCode.Internal.Encoder.encode(qrText, ErrorCorrectionLevel.M); QRCode code = ZXing.QrCode.Internal.Encoder.encode(qrText, ErrorCorrectionLevel.M);
ByteMatrix m = code.Matrix; ByteMatrix m = code.Matrix;
int blockSize = Math.Max(pictureBox1.Height / m.Height, 1);
Bitmap drawArea = new Bitmap((m.Width * blockSize), (m.Height * blockSize));
int blockSize = Math.Max(pictureBox1.Height/m.Height, 1);
Bitmap drawArea = new Bitmap((m.Width*blockSize), (m.Height*blockSize));
using (Graphics g = Graphics.FromImage(drawArea)) using (Graphics g = Graphics.FromImage(drawArea))
{ {
g.Clear(Color.White); g.Clear(Color.White);
@@ -43,7 +45,7 @@ namespace Shadowsocks.View
{ {
if (m[row, col] != 0) if (m[row, col] != 0)
{ {
g.FillRectangle(b, blockSize * row, blockSize * col, blockSize, blockSize);
g.FillRectangle(b, blockSize*row, blockSize*col, blockSize, blockSize);
} }
} }
} }
@@ -54,7 +56,20 @@ namespace Shadowsocks.View
private void QRCodeForm_Load(object sender, EventArgs e) private void QRCodeForm_Load(object sender, EventArgs e)
{ {
GenQR(code);
var servers = Configuration.Load();
var serverDatas = servers.configs.Select(
server =>
new KeyValuePair<string, string>(ShadowsocksController.GetQRCode(server), server.FriendlyName())
).ToList();
listBox1.DataSource = serverDatas;
var selectIndex = serverDatas.FindIndex(serverData => serverData.Key.StartsWith(code));
if (selectIndex >= 0) listBox1.SetSelected(selectIndex, true);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
GenQR((sender as ListBox)?.SelectedValue.ToString());
} }
} }
} }

+ 2
- 2
shadowsocks-csharp/View/QRCodeForm.resx View File

@@ -112,9 +112,9 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
</root> </root>

Loading…
Cancel
Save