package _115_share import ( "context" driver115 "github.com/SheltonZhu/115driver/pkg/driver" "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" "golang.org/x/time/rate" ) type Pan115Share struct { model.Storage Addition client *driver115.Pan115Client limiter *rate.Limiter } func (d *Pan115Share) Config() driver.Config { return config } func (d *Pan115Share) GetAddition() driver.Additional { return &d.Addition } func (d *Pan115Share) Init(ctx context.Context) error { if d.LimitRate > 0 { d.limiter = rate.NewLimiter(rate.Limit(d.LimitRate), 1) } return d.login() } func (d *Pan115Share) WaitLimit(ctx context.Context) error { if d.limiter != nil { return d.limiter.Wait(ctx) } return nil } func (d *Pan115Share) Drop(ctx context.Context) error { return nil } func (d *Pan115Share) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) { if err := d.WaitLimit(ctx); err != nil { return nil, err } files := make([]driver115.ShareFile, 0) fileResp, err := d.client.GetShareSnap(d.ShareCode, d.ReceiveCode, dir.GetID(), driver115.QueryLimit(int(d.PageSize))) if err != nil { return nil, err } files = append(files, fileResp.Data.List...) total := fileResp.Data.Count count := len(fileResp.Data.List) for total > count { fileResp, err := d.client.GetShareSnap( d.ShareCode, d.ReceiveCode, dir.GetID(), driver115.QueryLimit(int(d.PageSize)), driver115.QueryOffset(count), ) if err != nil { return nil, err } files = append(files, fileResp.Data.List...) count += len(fileResp.Data.List) } return utils.SliceConvert(files, transFunc) } func (d *Pan115Share) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) { if err := d.WaitLimit(ctx); err != nil { return nil, err } downloadInfo, err := d.client.DownloadByShareCode(d.ShareCode, d.ReceiveCode, file.GetID()) if err != nil { return nil, err } return &model.Link{URL: downloadInfo.URL.URL}, nil } func (d *Pan115Share) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error { return errs.NotSupport } func (d *Pan115Share) Move(ctx context.Context, srcObj, dstDir model.Obj) error { return errs.NotSupport } func (d *Pan115Share) Rename(ctx context.Context, srcObj model.Obj, newName string) error { return errs.NotSupport } func (d *Pan115Share) Copy(ctx context.Context, srcObj, dstDir model.Obj) error { return errs.NotSupport } func (d *Pan115Share) Remove(ctx context.Context, obj model.Obj) error { return errs.NotSupport } func (d *Pan115Share) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { return errs.NotSupport } var _ driver.Driver = (*Pan115Share)(nil)