V2rayN 订阅分组设置界面 更新时间单位修改为小时
需求
订阅地址的自动更新间隔改为按小时计算.
https://github.com/2dust/v2rayN/issues/4271
思路
修改界面显示的文字.
修改自动更新的定时器逻辑.
具体实践
安装 Microsoft Visual Studio
在 Microsoft Store 里有
安装组件选 .NET 桌面开发
下载源码
修改界面文本显示
v2rayN 因为界面支持多语言, 所以你实际上不能直接去修改界面元素的属性. 而是要去修改资源文件.
我们先打开软件, 找到要替换的显示文本是哪些.
1. 订阅分组管理窗口
文本为 自动更新间隔
2. 添加订阅分组窗口
文本为 自动更新间隔
Ctrl + Shift + F 在项目中搜索关键字 自动更新间隔
看到查找结果, 双击.同步的, 还要修改其它资源文件. (如果你不在乎, 也可以不改了, 跳过这一步)
你可以看到这个资源的 ID 是 LvAutoUpdateInterval
Ctrl + Shift + F 在项目中搜索关键字 LvAutoUpdateInterval我这里就避免翻译问题, 简单粗暴都修改为 xxxxxxxxx (hour)
检查阶段性成果
可以保存编译运行起来看一下, 界面文本是不是修改成功了. 如果修改了各语言的资源文件, 也可以切换语言看一下显示效果.
用菜单也可以, 用快捷键也可以, 用快捷按钮也可以.
修改代码逻辑
选中更新间隔的数值的界面元素 (TextBox)
在右边的 属性窗口 中找到界面元素的
Ctrl + Shift + F 在项目中搜索关键字 txtAutoUpdateInterval
粗浅的理解, 就是把界面元素的数据 连接
Ctrl + Shift + F 在项目中搜索关键字 autoUpdateInterval
把搜索到的地方都点开看一下, 找到实现定时器的逻辑在 MainFormHandler.cs 文件中 UpdateTaskRunSubscription 函数.https://poe.com/s/g6RbhSms1FdxwJ2FF7vq
GPT
这段代码是一个异步方法 UpdateTaskRunSubscription,它接受两个参数:config 和 update,并返回一个 Task 对象。代码的主要逻辑如下:1. 等待 60 秒(60000 毫秒)。2. 调用 Utils.SaveLog 方法,将日志信息写入日志文件,日志信息为 "UpdateTaskRunSubscription"。3. 创建一个 UpdateHandle 对象。4. 进入一个无限循环。5. 获取当前时间的 Unix 时间戳(以秒为单位),存储在 updateTime 变量中。6. 获取 LazyConfig.Instance.SubItems() 的列表,并进行一系列筛选操作:- 筛选出 autoUpdateInterval 大于 0 的项。- 筛选出满足条件 (updateTime - t.updateTime) >= t.autoUpdateInterval * 60 的项。- 将筛选结果存储在 lstSubs 列表中。7. 遍历 lstSubs 列表中的每一项:- 调用 updateHandle.UpdateSubscriptionProcess 方法,并传递参数 config、item.id、true 和回调函数 (bool success, string msg) => { ... }。- 如果回调函数中的 success 为 true,则调用 Utils.SaveLog 方法,将日志信息写入日志文件,日志信息为 "subscription" + msg。- 更新 item 的 updateTime 属性为 updateTime。- 使用 ConfigHandler.AddSubItem 方法,将 item 添加到 config 中。- 等待 5 秒。8. 等待 60 秒。9. 重复步骤 5 到步骤 8。简单来说,这段代码的作用是在一个定时任务中循环执行一些操作。首先等待一段时间,然后根据一些条件从配置中获取需要更新的订阅项。接着遍历每个订阅项,执行订阅更新的操作,并更新相关的记录和配置。然后等待一段时间,再次重复这个过程。
把整个逻辑理一遍, updateTime
现在我们想把autoUpdateInterval
保存, 编译, 开始调试
用菜单也可以, 用快捷键也可以, 用快捷按钮也可以.
=======
完
正确答案放在
评论
发表评论