mirror of https://github.com/Xhofe/alist
refactor(baidu.photo): add a file api of download
parent
44b8c6abf7
commit
bf0ee3d315
|
@ -43,6 +43,14 @@ func (driver Baidu) Items() []base.Item {
|
|||
Label: "album_id",
|
||||
Type: base.TypeString,
|
||||
},
|
||||
{
|
||||
Name: "internal_type",
|
||||
Label: "download api",
|
||||
Type: base.TypeSelect,
|
||||
Required: true,
|
||||
Values: "file,album",
|
||||
Default: "album",
|
||||
},
|
||||
{
|
||||
Name: "client_id",
|
||||
Label: "client id",
|
||||
|
@ -156,6 +164,13 @@ func (driver Baidu) Files(path string, account *model.Account) ([]model.File, er
|
|||
}
|
||||
|
||||
func (driver Baidu) Link(args base.Args, account *model.Account) (*base.Link, error) {
|
||||
if account.InternalType == "file" {
|
||||
return driver.LinkFile(args, account)
|
||||
}
|
||||
return driver.LinkAlbum(args, account)
|
||||
}
|
||||
|
||||
func (driver Baidu) LinkAlbum(args base.Args, account *model.Account) (*base.Link, error) {
|
||||
file, err := driver.File(args.Path, account)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -190,6 +205,43 @@ func (driver Baidu) Link(args base.Args, account *model.Account) (*base.Link, er
|
|||
}, nil
|
||||
}
|
||||
|
||||
func (driver Baidu) LinkFile(args base.Args, account *model.Account) (*base.Link, error) {
|
||||
file, err := driver.File(args.Path, account)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !IsAlbumFile(file) {
|
||||
return nil, base.ErrNotSupport
|
||||
}
|
||||
|
||||
album, err := driver.File(utils.Dir(utils.ParsePath(args.Path)), account)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 拷贝到根目录
|
||||
cfile, err := driver.CopyAlbumFile(album.Id, account, file.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 获取文件下载地址
|
||||
res, err := base.NoRedirectClient.R().
|
||||
SetQueryParams(map[string]string{
|
||||
"access_token": account.AccessToken,
|
||||
"fsid": fmt.Sprint(cfile.Fsid),
|
||||
}).
|
||||
Head(FILE_API_URL + "/download")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &base.Link{
|
||||
Headers: []base.Header{
|
||||
{Name: "User-Agent", Value: base.UserAgent},
|
||||
},
|
||||
Url: res.Header().Get("location"),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (driver Baidu) Path(path string, account *model.Account) (*model.File, []model.File, error) {
|
||||
path = utils.ParsePath(path)
|
||||
file, err := driver.File(path, account)
|
||||
|
|
Loading…
Reference in New Issue