mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-11-25 11:29:29 +08:00
* feat(drivers): add cnb_releases * feat(cnb_release): implement reference * refactor(cnb_releases): get release info by ID instead of tag name * feat(cnb_releases): add option to use tag name instead of release name * fix(cnb_releases): set default root and improve release info retrieval * feat(cnb_releases): implement Put * perf(cnb_release): use io.Pipe to stream file upload * perf(cnb_releases): add context timeout for file upload request * feat(cnb_releases): implement Remove * feat(cnb_releases): implement MakeDir * feat(cnb_releases): implement Rename * feat(cnb_releases): require repo and token in Addition * chore(cnb_releases): remove unused code * Revert 'perf(cnb_release): use io.Pipe to stream file upload' * perf(cnb_releases): optimize upload with MultiReader * feat(cnb_releases): add DefaultBranch --------- Co-authored-by: ILoveScratch <ilovescratch@foxmail.com>
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package cnb_releases
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/OpenListTeam/OpenList/v4/drivers/base"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// do others that not defined in Driver interface
|
|
|
|
func (d *CnbReleases) Request(method string, path string, callback base.ReqCallback, resp any) error {
|
|
if d.ref != nil {
|
|
return d.ref.Request(method, path, callback, resp)
|
|
}
|
|
var url string
|
|
if strings.HasPrefix(path, "http") {
|
|
url = path
|
|
} else {
|
|
url = "https://api.cnb.cool" + path
|
|
}
|
|
req := base.RestyClient.R()
|
|
req.SetHeader("Accept", "application/json")
|
|
req.SetAuthScheme("Bearer")
|
|
req.SetAuthToken(d.Token)
|
|
|
|
if callback != nil {
|
|
callback(req)
|
|
}
|
|
res, err := req.Execute(method, url)
|
|
log.Debugln(res.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if res.StatusCode() != http.StatusOK && res.StatusCode() != http.StatusCreated && res.StatusCode() != http.StatusNoContent {
|
|
return fmt.Errorf("failed to request %s, status code: %d, message: %s", url, res.StatusCode(), res.String())
|
|
}
|
|
|
|
if resp != nil {
|
|
err = json.Unmarshal(res.Body(), resp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (d *CnbReleases) sumAssetsSize(assets []ReleaseAsset) int64 {
|
|
var size int64
|
|
for _, asset := range assets {
|
|
size += asset.Size
|
|
}
|
|
return size
|
|
}
|