diff --git a/drivers/github_releases/driver.go b/drivers/github_releases/driver.go index c11c9cac..2486cbc3 100644 --- a/drivers/github_releases/driver.go +++ b/drivers/github_releases/driver.go @@ -51,6 +51,9 @@ func (d *GithubReleases) List(ctx context.Context, dir model.Obj, args model.Lis if d.Addition.ShowReadme { files = append(files, point.GetOtherFile(d.GetRequest, args.Refresh)...) } + if d.Addition.ShowSourceCode{ + files = append(files, point.GetSourceCode()...) + } } else if strings.HasPrefix(point.Point, path) { // 仓库目录的父目录 nextDir := GetNextDir(point.Point, path) if nextDir == "" { @@ -117,6 +120,10 @@ func (d *GithubReleases) List(ctx context.Context, dir model.Obj, args model.Lis } files = append(files, point.GetReleaseByTagName(tagName)...) + + if d.Addition.ShowSourceCode{ + files = append(files, point.GetSourceCodeByTagName(tagName)...) + } } } } diff --git a/drivers/github_releases/meta.go b/drivers/github_releases/meta.go index 4f3aae7f..a7b3a42a 100644 --- a/drivers/github_releases/meta.go +++ b/drivers/github_releases/meta.go @@ -10,6 +10,7 @@ type Addition struct { RepoStructure string `json:"repo_structure" type:"text" required:"true" default:"OpenListTeam/OpenList" help:"structure:[path:]org/repo"` ShowReadme bool `json:"show_readme" type:"bool" default:"true" help:"show README、LICENSE file"` Token string `json:"token" type:"string" required:"false" help:"GitHub token, if you want to access private repositories or increase the rate limit"` + ShowSourceCode bool `json:"show_source_code" type:"bool" default:"false" help:"show Source code (zip/tar.gz)"` ShowAllVersion bool `json:"show_all_version" type:"bool" default:"false" help:"show all versions"` GitHubProxy string `json:"gh_proxy" type:"string" default:"" help:"GitHub proxy, e.g. https://ghproxy.net/github.com or https://gh-proxy.com/github.com "` } diff --git a/drivers/github_releases/types.go b/drivers/github_releases/types.go index 3bbf1e76..6e0fa239 100644 --- a/drivers/github_releases/types.go +++ b/drivers/github_releases/types.go @@ -143,6 +143,60 @@ func (m *MountPoint) GetAllVersionSize() int64 { return size } +func (m *MountPoint) GetSourceCode() []File { + files := make([]File, 0) + + // 无法获取文件大小,此处设为 1 + files = append(files, File{ + Path: m.Point + "/" + "Source code (zip)", + FileName: "Source code (zip)", + Size: 1, + Type: "file", + UpdateAt: m.Release.CreatedAt, + CreateAt: m.Release.CreatedAt, + Url: m.Release.ZipballUrl, + }) + files = append(files, File{ + Path: m.Point + "/" + "Source code (tar.gz)", + FileName: "Source code (tar.gz)", + Size: 1, + Type: "file", + UpdateAt: m.Release.CreatedAt, + CreateAt: m.Release.CreatedAt, + Url: m.Release.TarballUrl, + }) + + return files +} + +func (m *MountPoint) GetSourceCodeByTagName(tagName string) []File { + for _, item := range *m.Releases { + if item.TagName == tagName { + files := make([]File, 0) + files = append(files, File{ + Path: m.Point + "/" + "Source code (zip)", + FileName: "Source code (zip)", + Size: 1, + Type: "file", + UpdateAt: item.CreatedAt, + CreateAt: item.CreatedAt, + Url: item.ZipballUrl, + }) + files = append(files, File{ + Path: m.Point + "/" + "Source code (tar.gz)", + FileName: "Source code (tar.gz)", + Size: 1, + Type: "file", + UpdateAt: item.CreatedAt, + CreateAt: item.CreatedAt, + Url: item.TarballUrl, + }) + return files + } + } + return nil +} + func (m *MountPoint) GetOtherFile(get func(url string) (*resty.Response, error), refresh bool) []File { if m.OtherFile == nil || refresh { resp, _ := get("https://api.github.com/repos/" + m.Repo + "/contents")