Browse Source

Added list of servers in QRCode generate window to select.

To add multiple servers in android phone, now it is no need to chose server one by one and generate QRCode for each. Just need to select the server listed in right.
tags/2.5.3
Jeffrey Zhang 10 years ago
parent
commit
5ed40c7565
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