version-fox / vfox

A cross-platform and extendable version manager with support for Java, Node.js, Flutter, .Net & more
https://vfox.lhan.me
Apache License 2.0
2.46k stars 83 forks source link

[Feature]: Advanced PreInstall #246

Closed yanecc closed 1 month ago

yanecc commented 1 month ago

1. Your usage scenarios?

一些情况下,插件能够获取到的URL可能会更加复杂,如:需要请求头,动态链接等。这些是小的改进需求,当前可以使用http.download_file在插件中实现,但是更希望通过vfox的下载功能来实现以获得统一的使用体验。

2. What is your expected outcome?

插件PreInstall函数支持返回headers,支持识别动态链接文件的格式并解压。

我尝试使插件支持Windows平台夜间构建,它能够在GitHub Actions的CI产物中获得,链接如下: https://api.github.com/repos/crystal-lang/crystal/actions/artifacts/1454949225/zip 第一个问题,需要设置请求头,可以在PreInstallHookResult中增加Headers map[string]string字段实现支持; 第二个问题,当前vfox对于链接,通过url.URL.Path的最后一个字段命名,以上面的链接为例,识别到的文件名是zip,vfox无法确定压缩文件类型,不会进行解压,当前需要通过PostInstall来解压。希望可以参考scoop的方案,允许插件在链接后添加#/crystal-nightly-windows.zip来指定文件类型。

如果你认为这些提议不错,我很乐意提交PR。

aooohan commented 1 month ago

一些情况下,插件能够获取到的URL可能会更加复杂,如:需要请求头,动态链接等。这些是小的改进需求,当前可以使用http.download_file在插件中实现,但是更希望通过vfox的下载功能来实现以获得统一的使用体验。

这正是我一开始设计PreInstall钩子的初衷, 在PreInstall阶段把需要的下载或者移动的文件资源, vfox帮助插件提前准备好. 然后在PostInstall统一处理, 而不是在次下载.

第一个问题,需要设置请求头,可以在PreInstallHookResult中增加Headers map[string]string字段实现支持;

可以.

第二个问题,当前vfox对于链接,通过url.URL.Path的最后一个字段命名,以上面的链接为例,识别到的文件名是zip,vfox无法确定压缩文件类型,不会进行解压,当前需要通过PostInstall来解压。希望可以参考scoop的方案,允许插件在链接后添加#/crystal-nightly-windows.zip来指定文件类型。

现在应该可以吧. 你直接url#/crystal-nightly-windows.zip 应该能识别成zip压缩包. 因为我单纯通过后缀来判断文件类型的.

如果你认为这些提议不错,我很乐意提交PR。

欢迎PR ;)

yanecc commented 1 month ago

现在应该可以吧. 你直接url#/crystal-nightly-windows.zip 应该能识别成zip压缩包. 因为我单纯通过后缀来判断文件类型的.

当前不行,因为Go的url.URL.Path是排除了Fragment的。