1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-30 09:06:06 +03:00
ProxySU/ProxySU_Core/Views/ClientInfo/ClientInfoWindow.xaml.cs

129 lines
4.4 KiB
C#
Raw Normal View History

2021-04-19 11:51:43 +03:00
using Microsoft.Win32;
using ProxySU_Core.Models;
2021-03-09 12:52:09 +03:00
using ProxySU_Core.ViewModels;
2021-04-19 07:12:23 +03:00
using QRCoder;
2021-03-06 12:26:17 +03:00
using System;
using System.Collections.Generic;
2021-04-19 07:12:23 +03:00
using System.Drawing;
using System.IO;
2021-03-06 12:26:17 +03:00
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
2021-04-17 06:50:31 +03:00
namespace ProxySU_Core.Views.ClientInfo
2021-03-06 12:26:17 +03:00
{
/// <summary>
/// ClientInfoWindow.xaml 的交互逻辑
/// </summary>
public partial class ClientInfoWindow
{
2021-03-09 12:52:09 +03:00
public XraySettingsViewModel Settings { get; set; }
2021-03-06 12:26:17 +03:00
public ClientInfoWindow(Record record)
{
InitializeComponent();
2021-03-10 05:50:34 +03:00
ResizeMode = ResizeMode.NoResize;
WindowStartupLocation = WindowStartupLocation.CenterScreen;
2021-03-06 12:26:17 +03:00
2021-03-09 12:52:09 +03:00
Settings = new XraySettingsViewModel(record.Settings);
DataContext = this;
2021-03-06 12:26:17 +03:00
}
2021-04-19 07:12:23 +03:00
2021-04-19 11:02:13 +03:00
2021-04-19 07:12:23 +03:00
private void BuildQrCode(object sender, SelectionChangedEventArgs e)
{
var tabControl = e.Source as TabControl;
var item = (tabControl.SelectedItem as TabItem);
2021-04-19 11:02:13 +03:00
if (item == null) return;
2021-04-19 07:12:23 +03:00
var type = (XrayType)item.Tag;
2021-04-19 11:02:13 +03:00
BuildQrCode(type);
}
2021-04-19 07:12:23 +03:00
2021-04-19 11:51:43 +03:00
private void SaveImage(object sender, RoutedEventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName += QrImage.Tag;
sfd.Filter = "Image Files (*.bmp, *.png, *.jpg)|*.bmp;*.png;*.jpg | All Files | *.*";
sfd.RestoreDirectory = true;//保存对话框是否记忆上次打开的目录
if (sfd.ShowDialog() == true)
{
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create((BitmapSource)QrImage.Source));
using (FileStream stream = new FileStream(sfd.FileName, FileMode.Create))
encoder.Save(stream);
}
}
2021-04-19 11:02:13 +03:00
private void BuildQrCode(XrayType type)
{
2021-04-19 07:12:23 +03:00
string shareLink = string.Empty;
switch (type)
{
case XrayType.VLESS_TCP_XTLS:
shareLink = Settings.VLESS_TCP_XTLS_ShareLink;
break;
case XrayType.VLESS_TCP:
shareLink = Settings.VLESS_TCP_ShareLink;
break;
case XrayType.VLESS_WS:
shareLink = Settings.VLESS_WS_ShareLink;
break;
case XrayType.VLESS_H2:
break;
case XrayType.VLESS_KCP:
shareLink = Settings.VLESS_KCP_ShareLink;
break;
case XrayType.VLESS_gRPC:
shareLink = Settings.VLESS_gRPC_ShareLink;
break;
case XrayType.VMESS_TCP:
shareLink = Settings.VMESS_TCP_ShareLink;
break;
case XrayType.VMESS_WS:
shareLink = Settings.VMESS_WS_ShareLink;
break;
case XrayType.VMESS_H2:
break;
case XrayType.VMESS_KCP:
shareLink = Settings.VMESS_KCP_ShareLink;
break;
case XrayType.Trojan_TCP:
shareLink = Settings.Trojan_TCP_ShareLink;
break;
case XrayType.Trojan_WS:
break;
case XrayType.ShadowsocksAEAD:
shareLink = Settings.ShadowSocksShareLink;
break;
default:
break;
}
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(shareLink, QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
Bitmap qrCodeImage = qrCode.GetGraphic(20);
MemoryStream ms = new MemoryStream();
qrCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = new MemoryStream(bytes);
image.EndInit();
QrImage.Source = image;
2021-04-19 11:51:43 +03:00
QrImage.Tag = type.ToString();
2021-04-19 07:12:23 +03:00
}
2021-03-06 12:26:17 +03:00
}
}