version-fox / vfox

A cross-platform and extendable version manager with support for Java, Node.js, Flutter, .Net & more

Home Page:https://vfox.lhan.me

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Feature]: Advanced PreInstall

yanecc opened this issue · comments

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。

一些情况下,插件能够获取到的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 ;)

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

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