subconverter icon indicating copy to clipboard operation
subconverter copied to clipboard

[BUG] sort_script 不生效

Open LisonFan opened this issue 2 years ago • 13 comments

确认版本最新

  • [X] 我已经确认在最新Action编译的版本中复现

检索issue

  • [X] 我已经确认之前没有issue涉及此BUG

subconverter版本

v0.7.2-a24cb7c

转换过程

Surge 转 Surge Node List

转换设置

[Profile] target=surge ver=4 url= emoji=false udp=true tfo=true list=true scv=true include=Hong Kong exclude=Premium|Emby|[0.3x]|Stream sort_script="function compare(node_a, node_b) {\n return node_a.Remark > node_b.Remark;\n}"

复现步骤

sort_script="function compare(node_a, node_b) {\n return node_a.Remark < node_b.Remark;\n}" 或者sort_script="function compare(node_a, node_b) {\n return node_a.Remark > node_b.Remark;\n}"输出的结果都是一样的

期望结果

Hong Kong LB Hong Kong 23 Hong Kong 19 Hong Kong 18 Hong Kong 17 Hong Kong 16 Hong Kong 15 Hong Kong 14 Hong Kong 13 Hong Kong 12 Hong Kong 11 Hong Kong 10 Hong Kong 09 Hong Kong 08 Hong Kong 07 Hong Kong 06 Hong Kong 05 Hong Kong 04 Hong Kong 03 Hong Kong 02 Hong Kong 01

实际结果

Hong Kong 01 Hong Kong 02 Hong Kong 03 Hong Kong 04 Hong Kong 05 Hong Kong 06 Hong Kong 07 Hong Kong 08 Hong Kong 09 Hong Kong 10 Hong Kong 11 Hong Kong 12 Hong Kong 13 Hong Kong 14 Hong Kong 15 Hong Kong 16 Hong Kong 17 Hong Kong 18 Hong Kong 19 Hong Kong 23 Hong Kong LB

错误信息

No response

LisonFan avatar Jun 15 '22 13:06 LisonFan

@LisonFan 我寻思sort=false了,下面的script还会生效吗?

youshandefeiyang avatar Jun 15 '22 14:06 youshandefeiyang

@LisonFan 链接后面还要把token加上,配置开头第二项

youshandefeiyang avatar Jun 15 '22 14:06 youshandefeiyang

@LisonFan 我寻思sort=false了,下面的script还会生效吗?

token 配置了,也是 api mode sort 默认 true 也不生效

LisonFan avatar Jun 15 '22 14:06 LisonFan

@LisonFan 二者不可得兼,你把sort=false先删了,然后只保留sort_script,最后链接后面要加上token

youshandefeiyang avatar Jun 15 '22 14:06 youshandefeiyang

@LisonFan 二者不可得兼,你把sort=false先删了,然后只保留sort_script,最后链接后面要加上token

api mode + token sort = true 也不生效

LisonFan avatar Jun 15 '22 14:06 LisonFan

@LisonFan 我的意思是你sort和sor_script不能同时存在,JS自定义排序了,前面的sort就不要加,否则会被前面的sort覆盖,然后检查JS,有这么难懂吗

youshandefeiyang avatar Jun 15 '22 14:06 youshandefeiyang

[Profile] target=surge ver=4 url= emoji=false udp=true tfo=true list=true scv=true include=Hong Kong exclude=Premium|Emby|[0.3x]|Stream sort_script="function compare(node_a, node_b) {\n return node_a.Remark > node_b.Remark;\n}"

理解您的意思,您说的配置文件是这样的吧? 这样的配置我也试过了,同样不生效,所以才来发 issues 的 您那边是可以生效的吗?

[Profile]
target=surge
ver=4
url=
emoji=false
udp=true
tfo=true
list=true
scv=true
include=Hong Kong
exclude=Premium|Emby|[0.3x]|Stream
sort_script="function compare(node_a, node_b) {\n return node_a.Remark > node_b.Remark;\n}"

LisonFan avatar Jun 15 '22 15:06 LisonFan

@LisonFan 你额外新建一个js文件引入,readme里面有node对象的属性包含了节点的全部内容,建议先在机场里筛选一次单地区的节点,从基础开始排序,有时候Remark里面地区不一样,也会影响排序

youshandefeiyang avatar Jun 15 '22 17:06 youshandefeiyang

@LisonFan 你额外新建一个js文件引入,readme里面有node对象的属性包含了节点的全部内容,建议先在机场里筛选一次单地区的节点,从基础开始排序,有时候Remark里面地区不一样,也会影响排序

我 review 了下源码,Profile 里的 sort_script参数不会生效,只能放在 pref.* 里的才生效 虽然我不是搞 cpp 的,不过应该没理解错这行代码 https://github.com/tindy2013/subconverter/blob/a24cb7c00a7e5a71ef2e6c0d64d84d91bc7a21d6/src/handler/interfaces.cpp#L423-L426

LisonFan avatar Jun 15 '22 18:06 LisonFan

@LisonFan 你额外新建一个js文件引入,readme里面有node对象的属性包含了节点的全部内容,建议先在机场里筛选一次单地区的节点,从基础开始排序,有时候Remark里面地区不一样,也会影响排序

目前在 perf.* 文件里配置生效了

[node_pref]
;udp_flag=false
;tcp_fast_open_flag=false
;skip_cert_verify_flag=false
;tls13_flag=false

sort_flag=true
;Script used for sorting nodes. A "compare" function with 2 arguments which are the 2 nodes to be compared should be defined in the script. Supports inline script and script path.
;Examples can be seen at the filter_script option in [common] section.
sort_script=path:/base/profiles/scripts/sort.js

而且文档还有点错误,写路径不能使用""双引号 image image 代码里是直接startsWith(script, "path:") https://github.com/tindy2013/subconverter/blob/a24cb7c00a7e5a71ef2e6c0d64d84d91bc7a21d6/src/generator/config/nodemanip.cpp#L487 https://github.com/tindy2013/subconverter/blob/a24cb7c00a7e5a71ef2e6c0d64d84d91bc7a21d6/src/handler/interfaces.cpp#L638

LisonFan avatar Jun 15 '22 19:06 LisonFan

@LisonFan 你额外新建一个js文件引入,readme里面有node对象的属性包含了节点的全部内容,建议先在机场里筛选一次单地区的节点,从基础开始排序,有时候Remark里面地区不一样,也会影响排序

我 review 了下源码,Profile 里的 sort_script参数不会生效,只能放在 pref.* 里的才生效 虽然我不是搞 cpp 的,不过应该没理解错这行代码

这里是执行sort_script相关的代码,脚本内容是从ext.sort_script读取的 https://github.com/tindy2013/subconverter/blob/a24cb7c00a7e5a71ef2e6c0d64d84d91bc7a21d6/src/generator/config/nodemanip.cpp#L481-L516

但是给ext.sort_script赋值的地方在这里 https://github.com/tindy2013/subconverter/blob/a24cb7c00a7e5a71ef2e6c0d64d84d91bc7a21d6/src/handler/interfaces.cpp#L423-L426

也就是说从Profile读取到的sort_script没生效,不会赋值给ext.sort_script https://github.com/tindy2013/subconverter/blob/a24cb7c00a7e5a71ef2e6c0d64d84d91bc7a21d6/src/handler/interfaces.cpp#L351

@tindy2013 应该是个 BUG 吧 0.0

LisonFan avatar Jun 15 '22 19:06 LisonFan

@LisonFan 我还打算在前端里加一个上传自定义script脚本内容返回在线链接引用的功能,直接链接后面跟上js在线引用,无法从外部链接传参的话,这功能实现不了了

youshandefeiyang avatar Jun 15 '22 19:06 youshandefeiyang

@LisonFan 我还打算在前端里加一个上传自定义script脚本内容返回在线链接引用的功能,直接链接后面跟上js在线引用,无法从外部链接传参的话,这功能实现不了了

得改代码,现在是实现不了

LisonFan avatar Jun 15 '22 19:06 LisonFan

此问题在 0.8.0 上还是存在,Profile 里面 sort_script 不生效,只有 pref.toml 中的 sort_script 才有效果。

@tindy2013 请问这个问题还打算解决么?还是说这不是个问题?

uclort avatar Oct 11 '23 07:10 uclort

Profile 中的 sort_script 相当于调用 /sub 接口中的参数 仅作为是否使用 pref 中预定义的脚本进行排序的开关

tindy2013 avatar Oct 11 '23 09:10 tindy2013

Profile 中的 sort_script 相当于调用 /sub 接口中的参数 仅作为是否使用 pref 中预定义的脚本进行排序的开关

也就是没有办法根据不同的 Profile 设置不同的 sort_script 脚本么?

uclort avatar Oct 11 '23 09:10 uclort