1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-22 21:26:09 +03:00
ProxySU/ProxySuper.WPF/Views/Xray/XrayConfigView.xaml.cs

142 lines
4.8 KiB
C#
Raw Normal View History

2021-05-22 06:12:26 +03:00
using Microsoft.Win32;
2022-11-21 18:39:25 +03:00
using MvvmCross.Platforms.Wpf.Presenters.Attributes;
2021-05-22 06:12:26 +03:00
using MvvmCross.Platforms.Wpf.Views;
using ProxySuper.Core.Models.Projects;
using ProxySuper.Core.ViewModels;
using QRCoder;
using System.Drawing;
using System.IO;
using System.Windows;
using System.Windows.Controls;
2021-11-27 06:47:31 +03:00
using System.Windows.Media;
2021-05-22 06:12:26 +03:00
using System.Windows.Media.Imaging;
namespace ProxySuper.WPF.Views
{
2022-11-23 17:06:09 +03:00
[MvxWindowPresentation]
2021-05-22 06:12:26 +03:00
public partial class XrayConfigView : MvxWindow
{
public XrayConfigView()
{
InitializeComponent();
}
2021-11-27 06:47:31 +03:00
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
for (int i = 0; i < TabCtrl.Items.Count; i++)
{
var tabItem = TabCtrl.Items[i] as TabItem;
if (Settings.Types.Contains((RayType)tabItem.Tag))
{
TabCtrl.SelectedIndex = i;
break;
}
}
}
2021-05-22 06:12:26 +03:00
public XraySettings Settings
{
get
{
return ((XrayConfigViewModel)ViewModel).Settings;
}
}
private void BuildQrCode(object sender, SelectionChangedEventArgs e)
{
var tabControl = e.Source as TabControl;
var item = (tabControl.SelectedItem as TabItem);
if (item == null) return;
2021-08-20 06:52:45 +03:00
var type = (RayType)item.Tag;
2021-05-22 06:12:26 +03:00
BuildQrCode(type);
}
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-08-20 06:52:45 +03:00
private void BuildQrCode(RayType type)
2021-05-22 06:12:26 +03:00
{
string shareLink = string.Empty;
switch (type)
{
2021-08-20 06:52:45 +03:00
case RayType.VLESS_TCP_XTLS:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VLESS_TCP_XTLS_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.VLESS_TCP:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VLESS_TCP_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.VLESS_WS:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VLESS_WS_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.VLESS_H2:
2021-05-22 06:12:26 +03:00
break;
2021-08-20 06:52:45 +03:00
case RayType.VLESS_KCP:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VLESS_KCP_ShareLink;
break;
2022-11-24 16:07:34 +03:00
case RayType.VLESS_QUIC:
shareLink = Settings.VLESS_QUIC_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.VLESS_gRPC:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VLESS_gRPC_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.VMESS_TCP:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VMESS_TCP_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.VMESS_WS:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VMESS_WS_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.VMESS_H2:
2021-05-22 06:12:26 +03:00
break;
2021-08-20 06:52:45 +03:00
case RayType.VMESS_KCP:
2021-05-22 06:12:26 +03:00
shareLink = Settings.VMESS_KCP_ShareLink;
break;
2022-11-24 16:07:34 +03:00
case RayType.VMESS_QUIC:
shareLink = Settings.VMESS_QUIC_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.Trojan_TCP:
2021-05-22 06:12:26 +03:00
shareLink = Settings.Trojan_TCP_ShareLink;
break;
2021-08-20 06:52:45 +03:00
case RayType.Trojan_WS:
2021-05-22 06:12:26 +03:00
break;
2021-08-20 06:52:45 +03:00
case RayType.ShadowsocksAEAD:
2021-05-22 06:12:26 +03:00
shareLink = Settings.ShadowSocksShareLink;
break;
default:
break;
}
2022-11-21 18:39:25 +03:00
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(shareLink, QRCodeGenerator.ECCLevel.Q);
var qrCode = new QRCode(qrCodeData);
2021-05-22 06:12:26 +03:00
2022-11-21 18:39:25 +03:00
var qrCodeImage = qrCode.GetGraphic(20);
var ms = new MemoryStream();
2021-05-22 06:12:26 +03:00
qrCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
2022-11-21 18:39:25 +03:00
var image = new BitmapImage();
2021-05-22 06:12:26 +03:00
image.BeginInit();
image.StreamSource = new MemoryStream(bytes);
image.EndInit();
QrImage.Source = image;
QrImage.Tag = type.ToString();
}
}
}