mirror of https://github.com/Xhofe/alist
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package _123Link
|
|
|
|
import (
|
|
"context"
|
|
stdpath "path"
|
|
"time"
|
|
|
|
"github.com/alist-org/alist/v3/internal/driver"
|
|
"github.com/alist-org/alist/v3/internal/errs"
|
|
"github.com/alist-org/alist/v3/internal/model"
|
|
"github.com/alist-org/alist/v3/pkg/utils"
|
|
)
|
|
|
|
type Pan123Link struct {
|
|
model.Storage
|
|
Addition
|
|
root *Node
|
|
}
|
|
|
|
func (d *Pan123Link) Config() driver.Config {
|
|
return config
|
|
}
|
|
|
|
func (d *Pan123Link) GetAddition() driver.Additional {
|
|
return &d.Addition
|
|
}
|
|
|
|
func (d *Pan123Link) Init(ctx context.Context) error {
|
|
node, err := BuildTree(d.OriginURLs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
node.calSize()
|
|
d.root = node
|
|
return nil
|
|
}
|
|
|
|
func (d *Pan123Link) Drop(ctx context.Context) error {
|
|
return nil
|
|
}
|
|
|
|
func (d *Pan123Link) Get(ctx context.Context, path string) (model.Obj, error) {
|
|
node := GetNodeFromRootByPath(d.root, path)
|
|
return nodeToObj(node, path)
|
|
}
|
|
|
|
func (d *Pan123Link) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {
|
|
node := GetNodeFromRootByPath(d.root, dir.GetPath())
|
|
if node == nil {
|
|
return nil, errs.ObjectNotFound
|
|
}
|
|
if node.isFile() {
|
|
return nil, errs.NotFolder
|
|
}
|
|
return utils.SliceConvert(node.Children, func(node *Node) (model.Obj, error) {
|
|
return nodeToObj(node, stdpath.Join(dir.GetPath(), node.Name))
|
|
})
|
|
}
|
|
|
|
func (d *Pan123Link) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
|
|
node := GetNodeFromRootByPath(d.root, file.GetPath())
|
|
if node == nil {
|
|
return nil, errs.ObjectNotFound
|
|
}
|
|
if node.isFile() {
|
|
signUrl, err := SignURL(node.Url, d.PrivateKey, d.UID, time.Duration(d.ValidDuration)*time.Minute)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &model.Link{
|
|
URL: signUrl,
|
|
}, nil
|
|
}
|
|
return nil, errs.NotFile
|
|
}
|
|
|
|
var _ driver.Driver = (*Pan123Link)(nil)
|