V2rayN 节点列表 右键菜单 清空速度测试结果 清空延迟测试结果

需求

节点列表数量比较多, 很些节点的测试结果已经旧了, 没有可参考性, 但是又不想重新测试, 只是想把测试结果清空.

思路

相当于在原有的测试功能的流程上, 不执行实际的测试动作, 直接填写空白的测试结果.

具体实践

安装 Microsoft Visual Studio

在 Microsoft Store 里有

https://apps.microsoft.com/store/detail/XPDCFJDKLZJLP8

安装组件选 .NET 桌面开发

Visual Studio安装程序里勾选.NET桌面开发工作负荷


下载源码

https://github.com/2dust/v2rayN

GitHub点Code后右键Download ZIP,选链接另存为

解压, 进入 v2ray-master 目录, 进入 v2rayN 目录, 打开 .sln 文件.

资源管理器里打开v2rayN目录,选中v2rayN.sln

添加文字资源

打开资源文件

解决方案资源管理器里选中v2rayN项目的ResUI.resx

添加英文资源

资源表里添加menuClearDelayResult和menuClearSpeedResult两项
menuClearDelayResult  Clear Delay Result
menuClearSpeedResult  Clear Speed Result

添加中文资源

红框选中v2rayN的ResUI.zh-Hans.resx

中文资源表里两项分别是清除延时测试结果和清除速度测试结果

在右键菜单中添加菜单项

打开主窗口设计文件

Views文件夹里选中MainWindow.xaml

在左边的文档大纲找到 lstProfiles 元素
可以通过眼睛图标的开关, 再观察窗口设计预览的效果, 来确定我们找对了.

文档大纲里高亮选中lstProfiles

我们转到 XAML 文件窗口, 查看 lstProfiles 

XAML里这个DataGrid的x:Name是lstProfiles

往下滚动一点, 找到 .ContextMenu
这就是右键菜单了.

往下找到DataGrid.ContextMenu,这就是右键菜单

我们在"按测试结果排序"菜单项下面添加新菜单项

在按测试结果排序下面新增menuClearDelayResult和menuClearSpeedResult两个菜单项

仿照已有的格式, 资源ID要使用前面步骤中定义的.
<MenuItem
    x:Name="menuClearDelayResult"
    Height="{StaticResource MenuItemHeight}"
    Header="{x:Static resx:ResUI.menuClearDelayResult}" />
<MenuItem
    x:Name="menuClearSpeedResult"
    Height="{StaticResource MenuItemHeight}"
    Header="{x:Static resx:ResUI.menuClearSpeedResult}" />

保存, 编译, 开始调试(或执行). 

用菜单也可以, 用快捷键也可以, 用快捷按钮也可以.

调试菜单里开始调试,快捷键F5

测试一下右键菜单, 效果与预期一致, 新的菜单项显示出来了.

右键菜单里出现清除延时测试结果和清除速度测试结果

添加菜单项对应的执行函数

搜索一下 menuSortServerResult 来参考已有的实现

搜索menuSortServerResult,红框高亮SortServerResultCmd的绑定

我们照着样子, 给我们的菜单项添加

照着样子加两条绑定,ClearDelayResultCmd和ClearSpeedResultCmd
// clear server test result
this.BindCommand(ViewModel, vm => vm.ClearDelayResultCmd, v => v.menuClearDelayResult).DisposeWith(disposables);
this.BindCommand(ViewModel, vm => vm.ClearSpeedResultCmd, v => v.menuClearSpeedResult).DisposeWith(disposables);

当然 xxxxCmd 也是要添加的, 照样搜原来的实现 SortServerResultCmd

查找结果里SortServerResultCmd在MainWindowViewModel.cs出现两处

照着样子添加

照着样子加ClearDelayResultCmd和ClearSpeedResultCmd两个命令属性
// clear server test result
public ReactiveCommand<Unit, Unit> ClearDelayResultCmd { get; }
public ReactiveCommand<Unit, Unit> ClearSpeedResultCmd { get; }
黄底高亮SpeedServerCmd,红框标出ClearDelay和ClearSpeed两条命令
//clear server test result
ClearDelayResultCmd = ReactiveCommand.Create(() =>
{
    ServerSpeedtest(ESpeedActionType.ClearDelay);
}, canEditRemove);
ClearSpeedResultCmd = ReactiveCommand.Create(() =>
{
    ServerSpeedtest(ESpeedActionType.ClearSpeed);
}, canEditRemove);

增加 ESpeedActionType 的枚举定义

ESpeedActionType枚举里红框标出ClearDelay和ClearSpeed

修改代码来具体实现效果

通过代码阅读, 查看 ServerSpeedtest 函数的实现, 再找到 SpeedtestHandler .

代码里先按ESpeedActionType清理测速和测延迟

具体修改方案就是:
红框标出ClearDelay与ClearSpeed两个清除分支
编译, 测试, 效果符合预期.
测速表里延迟列显示测试中和-1,速度列显示等待测试中

如果你一定要留空, 不要这种填充预填充字符的效果的话, 把上面最后的修改处 稍微调整一下就行. 

=======
评论