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
@@ -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; | ||||
@@ -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; | |||||
} | } | ||||
} | } |
@@ -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()); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -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> |