Compare commits

..

48 Commits
6.28 ... 6.30

Author SHA1 Message Date
2dust
1d0e8434ad up 6.30 2023-11-22 16:47:57 +08:00
2dust
e7b2deb941 In tun mode, do a delay check and restart the core 2023-11-22 16:37:46 +08:00
2dust
2a37a6a28e Merge pull request #4432 from The-Mojoo/master
Add Update CoreTypeName
2023-11-22 16:31:56 +08:00
Jimmy Mo
735ebbe92a Add Update CoreTypeName 2023-11-22 11:48:49 +08:00
2dust
2031729656 Merge pull request #4409 from Dts0/master
Fix the issue of readonly custom config  and add github workflow
2023-11-18 18:06:57 +08:00
zhaojingshi
f39fdc38cb add github workflow
The output can be found in actions->workflow->Artifacts
2023-11-18 10:22:47 +08:00
zhaojingshi
6b62623615 Fixed the issue of readonly custom config
Fixed the issue where importing read-only custom files would cause the service to fail to start
2023-11-18 10:22:37 +08:00
2dust
f3f3dc1951 Adjust some core 2023-11-17 13:38:50 +08:00
2dust
f4dd970f5e Add core hysteria2 2023-11-16 20:08:17 +08:00
2dust
74332c58c5 Adjust some core 2023-11-16 19:56:14 +08:00
2dust
f7ce49020f Update Package Reference 2023-11-16 17:47:32 +08:00
2dust
aaba1f7209 Merge pull request #4405 from ShiinaRinne/patch-1
fix https://github.com/2dust/v2rayN/pull/4287#discussion_r1394166976
2023-11-16 17:37:46 +08:00
ShiinaRinne
a9c7916b3d fix https://github.com/2dust/v2rayN/pull/4287#discussion_r1394166976 2023-11-15 21:01:38 +08:00
2dust
e3c8ccfafe Merge pull request #4385 from ShiinaRinne/font-ttc
Add: 添加TTC格式字体支持
2023-11-10 15:09:34 +08:00
2dust
2a22b65b2d Merge pull request #4321 from hxdhttk/hxdhttk/keyDown
Fix that editing the basic routing settings will trigger unexpected error messages.
2023-11-10 15:06:18 +08:00
2dust
ce5728e2df Merge pull request #4287 from MichaelHinrichs/Switch
Use a switch
2023-11-10 15:03:03 +08:00
2dust
cba82e0e8e Adjust speedtest addr 2023-11-10 15:00:48 +08:00
ShiinaRinne
be30064f9a Merge branch 'master' into font-ttc 2023-11-09 14:07:16 +08:00
ShiinaRinne
1798981380 Update ResUI.zh-Hant.resx 2023-11-09 13:56:27 +08:00
ShiinaRinne
06586d3405 Add: 添加TTC格式字体支持
https://github.com/2dust/v2rayN/issues/4089
2023-11-09 13:03:45 +08:00
Minghao Hu
31bcbd0e13 Do not execute keyboard shorcut on basic routing setting window. 2023-10-12 05:05:30 +08:00
2dust
2652beed88 Merge pull request #4299 from hxdhttk/hxdhttk/notifyUpd
Update the H.NotifyIcon to show default system tooltip for sys tray icon.
2023-09-30 14:25:03 +08:00
Minghao Hu
a2b87b862f Merge branch '2dust:master' into hxdhttk/notifyUpd 2023-09-29 14:38:06 +08:00
NintenHero
85e8d9479e Fix switch 2023-09-25 10:05:56 -05:00
NintenHero
119508a4e3 Use a switch 2023-09-25 04:45:50 -04:00
2dust
3c2da0a225 up 6.29 2023-09-24 16:17:54 +08:00
Minghao Hu
ef79e6adf9 Use latest update. 2023-09-24 02:05:04 +08:00
2dust
528400579a Merge pull request #4255 from crazypeace/master
解决当订阅数量较多时,占用窗口空间太大的问题
2023-09-22 14:57:07 +08:00
2dust
521ce1a487 Merge pull request #4235 from YheonYeung/patch-1
修正繁中用詞
2023-09-22 14:56:17 +08:00
Minghao Hu
014cc9bc16 Update H.NotifyIcon. 2023-09-17 16:10:05 +08:00
crazypeace
34c6c953ac 考虑在更大的屏幕上可以接受更高尺寸的占用
https://zelikk.blogspot.com/2023/09/v2rayn-lstgroup-maxheight.html
2023-09-09 15:59:08 +08:00
crazypeace
40fbbc7c58 设置 订阅/分组 显示空间的最大高度
避免占用过大的窗口面积
https://github.com/2dust/v2rayN/issues/4224
2023-09-09 15:00:59 +08:00
YheonYeung
534c329970 Update ResUI.zh-Hant.resx 2023-09-01 23:42:07 +08:00
YheonYeung
328d728257 Update ResUI.zh-Hant.resx 2023-09-01 23:39:16 +08:00
YheonYeung
fae6d42758 Update ResUI.zh-Hant.resx 2023-09-01 23:33:39 +08:00
YheonYeung
27693f6d23 Update ResUI.zh-Hant.resx 2023-09-01 23:31:24 +08:00
YheonYeung
89c4bab5b9 Update ResUI.zh-Hant.resx 2023-09-01 23:29:19 +08:00
YheonYeung
9d2ff04838 Update ResUI.zh-Hant.resx 2023-09-01 23:27:15 +08:00
YheonYeung
cf00243107 Update ResUI.zh-Hant.resx 2023-09-01 23:25:12 +08:00
YheonYeung
e8019ba7a5 修正繁中用詞 2023-09-01 23:21:10 +08:00
2dust
4f30e3f0e3 Merge pull request #4149 from eltociear/patch-1
fix typo in MainForm.cs
2023-08-02 10:15:55 +08:00
Ikko Eltociear Ashimine
047d08470f fix typo in MainForm.cs
entryOuputPath -> entryOutputPath
2023-08-02 00:33:10 +09:00
2dust
9643695389 Merge pull request #4144 from chika0801/master
修正 juicity 启动参数少了 run
2023-07-31 09:21:33 +08:00
chika0801
5cabec86e7 修正 juicity 启动参数少了 run
它的客户端启动参数是 ./juicity-client run -c config.json

https://github.com/juicity/juicity/blob/main/cmd/client/README.md#run
2023-07-30 21:33:12 +08:00
2dust
f2d0e37255 Merge pull request #4141 from chika0801/master
添加 juicity 作为自定义 core
2023-07-30 18:26:36 +08:00
chika0801
9560851a3f add juicity 2023-07-30 16:37:44 +08:00
chika0801
4aeec1caa1 add juicity 2023-07-30 16:36:48 +08:00
chika0801
ae45b1ef44 Update Global.cs 2023-07-30 16:33:11 +08:00
21 changed files with 852 additions and 688 deletions

106
.github/workflows/dotnet-desktop.yml vendored Normal file
View File

@@ -0,0 +1,106 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build, test, sign and package a WPF or Windows Forms desktop application
# built on .NET Core.
# To learn how to migrate your existing application to .NET Core,
# refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework
#
# To configure this workflow:
#
# 1. Configure environment variables
# GitHub sets default environment variables for every workflow run.
# Replace the variables relative to your project in the "env" section below.
#
# 2. Signing
# Generate a signing certificate in the Windows Application
# Packaging Project or add an existing signing certificate to the project.
# Next, use PowerShell to encode the .pfx file using Base64 encoding
# by running the following Powershell script to generate the output string:
#
# $pfx_cert = Get-Content '.\SigningCertificate.pfx' -Encoding Byte
# [System.Convert]::ToBase64String($pfx_cert) | Out-File 'SigningCertificate_Encoded.txt'
#
# Open the output file, SigningCertificate_Encoded.txt, and copy the
# string inside. Then, add the string to the repo as a GitHub secret
# and name it "Base64_Encoded_Pfx."
# For more information on how to configure your signing certificate for
# this workflow, refer to https://github.com/microsoft/github-actions-for-desktop-apps#signing
#
# Finally, add the signing certificate password to the repo as a secret and name it "Pfx_Key".
# See "Build the Windows Application Packaging project" below to see how the secret is used.
#
# For more information on GitHub Actions, refer to https://github.com/features/actions
# For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications,
# refer to https://github.com/microsoft/github-actions-for-desktop-apps
name: .NET Core Desktop
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
strategy:
matrix:
configuration: [Release]
runs-on: windows-latest # For a list of available runner types, refer to
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
env:
Solution_Name: v2rayN\v2rayN.sln
#Test_Project_Path: your-test-project-path # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj.
Wap_Project_Directory: v2rayN\v2rayN\bin
#Wap_Project_Path: your-wap-project-path # Replace with the path to your Wap project, i.e. MyWpf.App.Package\MyWpfApp.Package.wapproj.
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
# Install the .NET Core workload
- name: Install .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: 6.0.x
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v1.0.2
# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}
# Create the app package by building and packaging the Windows Application Packaging project
- name: Create the app package
run: msbuild $env:Solution_Name /p:Configuration=$env:Configuration
env:
Appx_Bundle: Always
Appx_Bundle_Platforms: x86|x64
Appx_Package_Build_Mode: StoreUpload
Configuration: ${{ matrix.configuration }}
- name: check output
run: ls ${{ env.Wap_Project_Directory }}
env:
Configuration: ${{ matrix.configuration }}
# Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: MSIX Package
path: ${{ env.Wap_Project_Directory }}\Release\net6.0-windows

View File

@@ -9,9 +9,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.23.3" />
<PackageReference Include="Grpc.Net.Client" Version="2.54.0" />
<PackageReference Include="Grpc.Tools" Version="2.54.0">
<PackageReference Include="Google.Protobuf" Version="3.25.1" />
<PackageReference Include="Grpc.Net.Client" Version="2.59.0" />
<PackageReference Include="Grpc.Tools" Version="2.59.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@@ -22,6 +22,7 @@
public const string geoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
public const string singboxGeoUrl = "https://github.com/soffchen/sing-{0}/releases/latest/download/{0}.db";
public const string SpeedPingTestUrl = @"https://www.google.com/generate_204";
public const string juicityCoreUrl = "https://github.com/juicity/juicity/releases";
public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/";
public const string PromotionUrl = @"aHR0cHM6Ly85LjIzNDQ1Ni54eXovYWJjLmh0bWw=";
@@ -119,6 +120,9 @@
};
public static readonly List<string> SpeedTestUrls = new() {
@"https://speed.cloudflare.com/__down?bytes=100000000",
@"https://speed.cloudflare.com/__down?bytes=10000000",
@"http://cachefly.cachefly.net/50mb.test",
@"http://cachefly.cachefly.net/100mb.test",
@"http://cachefly.cachefly.net/10mb.test"
};
@@ -139,7 +143,7 @@
public static readonly List<string> flows = new() { "", "xtls-rprx-vision", "xtls-rprx-vision-udp443" };
public static readonly List<string> networks = new() { "tcp", "kcp", "ws", "h2", "quic", "grpc" };
public static readonly List<string> kcpHeaderTypes = new() { "srtp", "utp", "wechat-video", "dtls", "wireguard" };
public static readonly List<string> coreTypes = new() { "v2fly", "SagerNet", "Xray", "v2fly_v5", "sing_box" };
public static readonly List<string> coreTypes = new() { "v2fly", "SagerNet", "Xray", "sing_box" };
public static readonly List<string> coreTypes4VLESS = new() { "Xray", "sing_box" };
public static readonly List<string> domainStrategys = new() { "AsIs", "IPIfNonMatch", "IPOnDemand" };
public static readonly List<string> domainStrategys4Singbox = new() { "ipv4_only", "ipv6_only", "prefer_ipv4", "prefer_ipv6", "" };
@@ -170,4 +174,4 @@
#endregion global variable
}
}
}

View File

@@ -80,6 +80,7 @@ namespace v2rayN.Handler
if (File.Exists(fileName))
{
File.SetAttributes(fileName, FileAttributes.Normal); //If the file has a read-only attribute, direct deletion will fail
File.Delete(fileName);
}
@@ -94,6 +95,7 @@ namespace v2rayN.Handler
return -1;
}
File.Copy(addressFileName, fileName);
File.SetAttributes(fileName, FileAttributes.Normal); //Copy will keep the attributes of addressFileName, so we need to add write permissions to fileName just in case of addressFileName is a read-only file.
//check again
if (!File.Exists(fileName))
@@ -153,4 +155,4 @@ namespace v2rayN.Handler
return coreConfigV2ray.GenerateClientSpeedtestConfigString(selecteds, out msg);
}
}
}
}

View File

@@ -1,5 +1,6 @@
using System.Diagnostics;
using System.IO;
using System.Reactive.Linq;
using System.Text;
using v2rayN.Mode;
using v2rayN.Resx;
@@ -45,6 +46,25 @@ namespace v2rayN.Handler
ShowMsg(true, $"{node.GetSummary()}");
CoreStop();
CoreStart(node);
//In tun mode, do a delay check and restart the core
if (_config.tunModeItem.enableTun)
{
Observable.Range(1, 1)
.Delay(TimeSpan.FromSeconds(15))
.Subscribe(x =>
{
{
if (_process == null || _process.HasExited)
{
CoreStart(node);
ShowMsg(false, "Tun mode restart the core once");
Utils.SaveLog("Tun mode restart the core once");
}
}
});
}
}
}

View File

@@ -252,7 +252,7 @@ namespace v2rayN.Handler
{
coreType = ECoreType.v2fly_v5,
coreExes = new List<string> { "v2ray" },
arguments = "run",
arguments = "run -c config.json -format jsonv5",
coreUrl = Global.v2flyCoreUrl,
coreReleaseApiUrl = Global.v2flyCoreUrl.Replace(Global.githubUrl, Global.githubApiUrl),
coreDownloadUrl32 = Global.v2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip",
@@ -353,8 +353,29 @@ namespace v2rayN.Handler
match = "sing-box",
versionArg = "version",
});
coreInfos.Add(new CoreInfo
{
coreType = ECoreType.juicity,
coreExes = new List<string> { "juicity-client", "juicity" },
arguments = "run -c config.json",
coreUrl = Global.juicityCoreUrl
});
coreInfos.Add(new CoreInfo
{
coreType = ECoreType.hysteria2,
coreExes = new List<string> { "hysteria-windows-amd64", "hysteria-windows-386", "hysteria" },
arguments = "",
coreUrl = Global.hysteriaCoreUrl,
coreReleaseApiUrl = Global.hysteriaCoreUrl.Replace(Global.githubUrl, Global.githubApiUrl),
coreDownloadUrl32 = Global.hysteriaCoreUrl + "/download/{0}/hysteria-windows-386.exe",
coreDownloadUrl64 = Global.hysteriaCoreUrl + "/download/{0}/hysteria-windows-amd64.exe",
coreDownloadUrlArm64 = Global.hysteriaCoreUrl + "/download/{0}/hysteria-windows-arm64.exe",
redirectInfo = true,
});
}
#endregion Core Type
}
}
}

View File

@@ -427,7 +427,7 @@ namespace v2rayN.Handler
case ECoreType.v2fly_v5:
{
curVersion = getCoreVersion(type);
message = string.Format(ResUI.IsLatestCore, curVersion.ToVersionString("v"));
message = string.Format(ResUI.IsLatestCore, type, curVersion.ToVersionString("v"));
string osBit = "64";
switch (RuntimeInformation.ProcessArchitecture)
{
@@ -451,7 +451,7 @@ namespace v2rayN.Handler
case ECoreType.clash_meta:
{
curVersion = getCoreVersion(type);
message = string.Format(ResUI.IsLatestCore, curVersion);
message = string.Format(ResUI.IsLatestCore, type, curVersion);
switch (RuntimeInformation.ProcessArchitecture)
{
case Architecture.Arm64:
@@ -472,7 +472,7 @@ namespace v2rayN.Handler
case ECoreType.sing_box:
{
curVersion = getCoreVersion(type);
message = string.Format(ResUI.IsLatestCore, curVersion.ToVersionString("v"));
message = string.Format(ResUI.IsLatestCore, type, curVersion.ToVersionString("v"));
switch (RuntimeInformation.ProcessArchitecture)
{
case Architecture.Arm64:
@@ -493,7 +493,7 @@ namespace v2rayN.Handler
case ECoreType.v2rayN:
{
curVersion = new SemanticVersion(FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString());
message = string.Format(ResUI.IsLatestN, curVersion);
message = string.Format(ResUI.IsLatestN, type, curVersion);
switch (RuntimeInformation.ProcessArchitecture)
{
case Architecture.Arm64:

View File

@@ -12,6 +12,8 @@
naiveproxy = 22,
tuic = 23,
sing_box = 24,
juicity = 25,
hysteria2 = 26,
v2rayN = 99
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -187,10 +187,10 @@
<value>پیکربندی اولیه</value>
</data>
<data name="IsLatestCore" xml:space="preserve">
<value>{0} در حال حاضر به روز است.</value>
<value>{0} {1} در حال حاضر به روز است.</value>
</data>
<data name="IsLatestN" xml:space="preserve">
<value>{0} در حال حاضر به روز است.</value>
<value>{0} {1} در حال حاضر به روز است.</value>
</data>
<data name="LvAddress" xml:space="preserve">
<value>آدرس</value>

View File

@@ -187,10 +187,10 @@
<value>Initial Configuration</value>
</data>
<data name="IsLatestCore" xml:space="preserve">
<value>{0} already up to date.</value>
<value>{0} {1} already up to date.</value>
</data>
<data name="IsLatestN" xml:space="preserve">
<value>{0} already up to date.</value>
<value>{0} {1} already up to date.</value>
</data>
<data name="LvAddress" xml:space="preserve">
<value>Address</value>
@@ -1037,7 +1037,7 @@
<value>FontFamily(Require restart)</value>
</data>
<data name="TbSettingsCurrentFontFamilyTip" xml:space="preserve">
<value>Copy the font TTF file to the directory guiFonts, restart the settings</value>
<value>Copy the font TTF/TTC file to the directory guiFonts, restart the settings</value>
</data>
<data name="TbSettingsSocksPortTip" xml:space="preserve">
<value>http port=socks port+1</value>

View File

@@ -187,10 +187,10 @@
<value>Исходная конфигурация</value>
</data>
<data name="IsLatestCore" xml:space="preserve">
<value>{0} является последней версией.</value>
<value>{0} {1} является последней версией.</value>
</data>
<data name="IsLatestN" xml:space="preserve">
<value>{0} является последней версией.</value>
<value>{0} {1} является последней версией.</value>
</data>
<data name="LvAddress" xml:space="preserve">
<value>Адрес</value>
@@ -1043,7 +1043,7 @@
<value>Шрифт (требуется перезагрузка)</value>
</data>
<data name="TbSettingsCurrentFontFamilyTip" xml:space="preserve">
<value>Скопируйте файл шрифта TTF в каталог guiFonts, перезапустите настройки</value>
<value>Скопируйте файл шрифта TTF/TTC в каталог guiFonts, перезапустите настройки</value>
</data>
<data name="TbSettingsSocksPortTip" xml:space="preserve">
<value>HTTP port=socks port+1</value>

View File

@@ -187,10 +187,10 @@
<value>初始化配置</value>
</data>
<data name="IsLatestCore" xml:space="preserve">
<value>{0} 已是最新版本。</value>
<value>{0} {1} 已是最新版本。</value>
</data>
<data name="IsLatestN" xml:space="preserve">
<value>{0} 已是最新版本。</value>
<value>{0} {1} 已是最新版本。</value>
</data>
<data name="LvAddress" xml:space="preserve">
<value>地址</value>
@@ -1037,7 +1037,7 @@
<value>当前字体(需重启)</value>
</data>
<data name="TbSettingsCurrentFontFamilyTip" xml:space="preserve">
<value>拷贝字体TTF文件到目录guiFonts重启设置</value>
<value>拷贝字体TTF/TTC文件到目录guiFonts重启设置</value>
</data>
<data name="TbSettingsSocksPortTip" xml:space="preserve">
<value>http端口=socks端口+1</value>

File diff suppressed because it is too large Load Diff

View File

@@ -147,10 +147,10 @@ namespace v2rayN.ViewModels
public ReactiveCommand<Unit, Unit> CheckUpdateNCmd { get; }
public ReactiveCommand<Unit, Unit> CheckUpdateV2flyCoreCmd { get; }
public ReactiveCommand<Unit, Unit> CheckUpdateSagerNetCoreCmd { get; }
//public ReactiveCommand<Unit, Unit> CheckUpdateSagerNetCoreCmd { get; }
public ReactiveCommand<Unit, Unit> CheckUpdateXrayCoreCmd { get; }
public ReactiveCommand<Unit, Unit> CheckUpdateClashCoreCmd { get; }
public ReactiveCommand<Unit, Unit> CheckUpdateClashMetaCoreCmd { get; }
//public ReactiveCommand<Unit, Unit> CheckUpdateClashCoreCmd { get; }
//public ReactiveCommand<Unit, Unit> CheckUpdateClashMetaCoreCmd { get; }
public ReactiveCommand<Unit, Unit> CheckUpdateSingBoxCoreCmd { get; }
public ReactiveCommand<Unit, Unit> CheckUpdateGeoCmd { get; }
@@ -210,8 +210,8 @@ namespace v2rayN.ViewModels
[Reactive]
public string RunningServerDisplay { get; set; }
//[Reactive]
//public string RunningServerToolTipText { get; set; }
[Reactive]
public string RunningServerToolTipText { get; set; }
[Reactive]
public string RunningInfoDisplay { get; set; }
@@ -500,22 +500,22 @@ namespace v2rayN.ViewModels
{
CheckUpdateCore(ECoreType.v2fly_v5);
});
CheckUpdateSagerNetCoreCmd = ReactiveCommand.Create(() =>
{
CheckUpdateCore(ECoreType.SagerNet);
});
//CheckUpdateSagerNetCoreCmd = ReactiveCommand.Create(() =>
//{
// CheckUpdateCore(ECoreType.SagerNet);
//});
CheckUpdateXrayCoreCmd = ReactiveCommand.Create(() =>
{
CheckUpdateCore(ECoreType.Xray);
});
CheckUpdateClashCoreCmd = ReactiveCommand.Create(() =>
{
CheckUpdateCore(ECoreType.clash);
});
CheckUpdateClashMetaCoreCmd = ReactiveCommand.Create(() =>
{
CheckUpdateCore(ECoreType.clash_meta);
});
//CheckUpdateClashCoreCmd = ReactiveCommand.Create(() =>
//{
// CheckUpdateCore(ECoreType.clash);
//});
//CheckUpdateClashMetaCoreCmd = ReactiveCommand.Create(() =>
//{
// CheckUpdateCore(ECoreType.clash_meta);
//});
CheckUpdateSingBoxCoreCmd = ReactiveCommand.Create(() =>
{
CheckUpdateCore(ECoreType.sing_box);
@@ -849,12 +849,12 @@ namespace v2rayN.ViewModels
{
var runningSummary = running.GetSummary();
RunningServerDisplay = $"{ResUI.menuServers}:{runningSummary}";
//RunningServerToolTipText = runningSummary;
RunningServerToolTipText = runningSummary;
}
else
{
RunningServerDisplay = ResUI.CheckServerSettings;
//RunningServerToolTipText = ResUI.CheckServerSettings;
RunningServerToolTipText = ResUI.CheckServerSettings;
}
}));
}

View File

@@ -212,15 +212,15 @@
x:Name="menuCheckUpdateV2flyCore"
Height="{StaticResource MenuItemHeight}"
Header="V2fly v5 Core" />
<MenuItem
<!--<MenuItem
x:Name="menuCheckUpdateSagerNetCore"
Height="{StaticResource MenuItemHeight}"
Header="SagerNet Core" />
Header="SagerNet Core" />-->
<MenuItem
x:Name="menuCheckUpdateXrayCore"
Height="{StaticResource MenuItemHeight}"
Header="Xray Core" />
<Separator Margin="-40,5" />
<!--<Separator Margin="-40,5" />
<MenuItem
x:Name="menuCheckUpdateClashCore"
Height="{StaticResource MenuItemHeight}"
@@ -229,7 +229,7 @@
x:Name="menuCheckUpdateClashMetaCore"
Height="{StaticResource MenuItemHeight}"
Header="Clash.Meta Core" />
<Separator Margin="-40,5" />
<Separator Margin="-40,5" />-->
<MenuItem
x:Name="menuCheckUpdateSingBoxCore"
Height="{StaticResource MenuItemHeight}"
@@ -384,6 +384,7 @@
<WrapPanel Margin="2" DockPanel.Dock="Top">
<ListBox
x:Name="lstGroup"
MaxHeight="120"
FontSize="{DynamicResource StdFontSize}"
ItemContainerStyle="{StaticResource MyChipListBoxItem}"
Style="{StaticResource MaterialDesignChoiceChipPrimaryOutlineListBox}">
@@ -751,7 +752,8 @@
<tb:TaskbarIcon
x:Name="tbNotify"
IconSource="/v2rayN.ico"
NoLeftClickDelay="True">
NoLeftClickDelay="True"
ToolTipText="v2rayN">
<tb:TaskbarIcon.ContextMenu>
<ContextMenu Style="{StaticResource DefContextMenu}">
<MenuItem x:Name="menuSystemProxyClear" Height="{StaticResource MenuItemHeight}">

View File

@@ -36,6 +36,8 @@ namespace v2rayN.Views
this.Height = SystemParameters.WorkArea.Height;
}
lstGroup.MaxHeight = Math.Floor(SystemParameters.WorkArea.Height * 0.20 / 40) * 40;
_config = LazyConfig.Instance.GetConfig();
App.Current.SessionEnding += Current_SessionEnding;
@@ -137,10 +139,10 @@ namespace v2rayN.Views
//checkupdate
this.BindCommand(ViewModel, vm => vm.CheckUpdateNCmd, v => v.menuCheckUpdateN).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.CheckUpdateV2flyCoreCmd, v => v.menuCheckUpdateV2flyCore).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.CheckUpdateSagerNetCoreCmd, v => v.menuCheckUpdateSagerNetCore).DisposeWith(disposables);
//this.BindCommand(ViewModel, vm => vm.CheckUpdateSagerNetCoreCmd, v => v.menuCheckUpdateSagerNetCore).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.CheckUpdateXrayCoreCmd, v => v.menuCheckUpdateXrayCore).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.CheckUpdateClashCoreCmd, v => v.menuCheckUpdateClashCore).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.CheckUpdateClashMetaCoreCmd, v => v.menuCheckUpdateClashMetaCore).DisposeWith(disposables);
//this.BindCommand(ViewModel, vm => vm.CheckUpdateClashCoreCmd, v => v.menuCheckUpdateClashCore).DisposeWith(disposables);
//this.BindCommand(ViewModel, vm => vm.CheckUpdateClashMetaCoreCmd, v => v.menuCheckUpdateClashMetaCore).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.CheckUpdateSingBoxCoreCmd, v => v.menuCheckUpdateSingBoxCore).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.CheckUpdateGeoCmd, v => v.menuCheckUpdateGeo).DisposeWith(disposables);
@@ -174,7 +176,7 @@ namespace v2rayN.Views
this.BindCommand(ViewModel, vm => vm.SubUpdateViaProxyCmd, v => v.menuSubUpdateViaProxy2).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.NotifyIcon, v => v.tbNotify.Icon).DisposeWith(disposables);
//this.OneWayBind(ViewModel, vm => vm.RunningServerToolTipText, v => v.tbNotify.ToolTipText).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.RunningServerToolTipText, v => v.tbNotify.ToolTipText).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.NotifyLeftClickCmd, v => v.tbNotify.LeftClickCommand).DisposeWith(disposables);
this.OneWayBind(ViewModel, vm => vm.AppIcon, v => v.Icon).DisposeWith(disposables);
//this.OneWayBind(ViewModel, vm => vm.BlShowTrayTip, v => v.borTrayToolTip.Visibility).DisposeWith(disposables);
@@ -320,33 +322,29 @@ namespace v2rayN.Views
{
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
if (e.Key == Key.V)
switch (e.Key)
{
ViewModel?.AddServerViaClipboard();
}
else if (e.Key == Key.P)
{
ViewModel?.ServerSpeedtest(ESpeedActionType.Ping);
}
else if (e.Key == Key.O)
{
ViewModel?.ServerSpeedtest(ESpeedActionType.Tcping);
}
else if (e.Key == Key.R)
{
ViewModel?.ServerSpeedtest(ESpeedActionType.Realping);
}
else if (e.Key == Key.S)
{
_ = ViewModel?.ScanScreenTaskAsync();
}
else if (e.Key == Key.T)
{
ViewModel?.ServerSpeedtest(ESpeedActionType.Speedtest);
}
else if (e.Key == Key.E)
{
ViewModel?.ServerSpeedtest(ESpeedActionType.Mixedtest);
case Key.V:
ViewModel?.AddServerViaClipboard();
break;
case Key.P:
ViewModel?.ServerSpeedtest(ESpeedActionType.Ping);
break;
case Key.O:
ViewModel?.ServerSpeedtest(ESpeedActionType.Tcping);
break;
case Key.R:
ViewModel?.ServerSpeedtest(ESpeedActionType.Realping);
break;
case Key.S:
_ = ViewModel?.ScanScreenTaskAsync();
break;
case Key.T:
ViewModel?.ServerSpeedtest(ESpeedActionType.Speedtest);
break;
case Key.E:
ViewModel?.ServerSpeedtest(ESpeedActionType.Mixedtest);
break;
}
}
else
@@ -646,4 +644,4 @@ namespace v2rayN.Views
#endregion Drag and Drop
}
}
}

View File

@@ -89,7 +89,12 @@ namespace v2rayN.Views
//fill fonts
try
{
var files = Directory.GetFiles(Utils.GetFontsPath(), "*.ttf");
string[] searchPatterns = { "*.ttf", "*.ttc" };
var files = new List<string>();
foreach (var pattern in searchPatterns)
{
files.AddRange(Directory.GetFiles(Utils.GetFontsPath(), pattern));
}
var culture = _config.uiItem.currentLanguage == Global.Languages[0] ? "zh-cn" : "en-us";
var culture2 = "en-us";
foreach (var ttf in files)

View File

@@ -88,6 +88,11 @@ namespace v2rayN.Views
private void RoutingSettingWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (ViewModel?.enableRoutingBasic ?? false)
{
return;
}
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
if (e.Key == Key.A)

View File

@@ -10,22 +10,22 @@
<ImplicitUsings>enable</ImplicitUsings>
<ApplicationIcon>v2rayN.ico</ApplicationIcon>
<Copyright>Copyright © 2017-2023 (GPLv3)</Copyright>
<FileVersion>6.28</FileVersion>
<FileVersion>6.30</FileVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Downloader" Version="3.0.6" />
<PackageReference Include="MaterialDesignThemes" Version="4.9.0" />
<PackageReference Include="H.NotifyIcon.Wpf" Version="2.0.108" />
<PackageReference Include="H.NotifyIcon.Wpf" Version="2.0.118" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="QRCoder.Xaml" Version="1.4.3" />
<PackageReference Include="sqlite-net-pcl" Version="1.8.116" />
<PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.12" />
<PackageReference Include="ReactiveUI.Fody" Version="18.4.1" />
<PackageReference Include="ReactiveUI.Validation" Version="3.0.22" />
<PackageReference Include="ReactiveUI.WPF" Version="18.4.1" />
<PackageReference Include="Splat.NLog" Version="14.6.37" />
<PackageReference Include="ReactiveUI.Fody" Version="19.5.1" />
<PackageReference Include="ReactiveUI.Validation" Version="3.1.7" />
<PackageReference Include="ReactiveUI.WPF" Version="19.5.1" />
<PackageReference Include="Splat.NLog" Version="14.8.6" />
<PackageReference Include="System.Reactive" Version="6.0.0" />
</ItemGroup>

View File

@@ -92,9 +92,9 @@ namespace v2rayUpgrade
File.Move(Application.ExecutablePath, thisAppOldFile);
}
string entryOuputPath = GetPath(fullName);
Directory.CreateDirectory(Path.GetDirectoryName(entryOuputPath)!);
entry.ExtractToFile(entryOuputPath, true);
string entryOutputPath = GetPath(fullName);
Directory.CreateDirectory(Path.GetDirectoryName(entryOutputPath)!);
entry.ExtractToFile(entryOutputPath, true);
}
catch (Exception ex)
{
@@ -145,4 +145,4 @@ namespace v2rayUpgrade
return Path.Combine(startupPath, fileName);
}
}
}
}