Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/drivers/115_share/driver.go
2326 views
1
package _115_share
2
3
import (
4
"context"
5
6
driver115 "github.com/SheltonZhu/115driver/pkg/driver"
7
"github.com/alist-org/alist/v3/drivers/base"
8
"github.com/alist-org/alist/v3/internal/driver"
9
"github.com/alist-org/alist/v3/internal/errs"
10
"github.com/alist-org/alist/v3/internal/model"
11
"github.com/alist-org/alist/v3/pkg/utils"
12
"golang.org/x/time/rate"
13
)
14
15
type Pan115Share struct {
16
model.Storage
17
Addition
18
client *driver115.Pan115Client
19
limiter *rate.Limiter
20
}
21
22
func (d *Pan115Share) Config() driver.Config {
23
return config
24
}
25
26
func (d *Pan115Share) GetAddition() driver.Additional {
27
return &d.Addition
28
}
29
30
func (d *Pan115Share) Init(ctx context.Context) error {
31
if d.LimitRate > 0 {
32
d.limiter = rate.NewLimiter(rate.Limit(d.LimitRate), 1)
33
}
34
35
return d.login()
36
}
37
38
func (d *Pan115Share) WaitLimit(ctx context.Context) error {
39
if d.limiter != nil {
40
return d.limiter.Wait(ctx)
41
}
42
return nil
43
}
44
45
func (d *Pan115Share) Drop(ctx context.Context) error {
46
return nil
47
}
48
49
func (d *Pan115Share) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {
50
if err := d.WaitLimit(ctx); err != nil {
51
return nil, err
52
}
53
54
ua := base.UserAgent
55
files := make([]shareFile, 0)
56
fileResp, err := d.getShareSnapWithUA(ua, dir.GetID(), driver115.QueryLimit(int(d.PageSize)))
57
if err != nil {
58
return nil, err
59
}
60
files = append(files, fileResp.Data.List...)
61
total := fileResp.Data.Count
62
count := len(fileResp.Data.List)
63
for total > count {
64
fileResp, err := d.getShareSnapWithUA(ua, dir.GetID(), driver115.QueryLimit(int(d.PageSize)), driver115.QueryOffset(count))
65
if err != nil {
66
return nil, err
67
}
68
files = append(files, fileResp.Data.List...)
69
count += len(fileResp.Data.List)
70
}
71
72
return utils.SliceConvert(files, transFunc)
73
}
74
75
func (d *Pan115Share) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
76
if err := d.WaitLimit(ctx); err != nil {
77
return nil, err
78
}
79
ua := ""
80
if args.Header != nil {
81
ua = args.Header.Get("User-Agent")
82
}
83
if ua == "" {
84
ua = base.UserAgent
85
}
86
downloadInfo, err := d.downloadByShareCodeWithUA(ua, file.GetID())
87
if err != nil {
88
return nil, err
89
}
90
91
return &model.Link{URL: downloadInfo.URL.URL}, nil
92
}
93
94
func (d *Pan115Share) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error {
95
return errs.NotSupport
96
}
97
98
func (d *Pan115Share) Move(ctx context.Context, srcObj, dstDir model.Obj) error {
99
return errs.NotSupport
100
}
101
102
func (d *Pan115Share) Rename(ctx context.Context, srcObj model.Obj, newName string) error {
103
return errs.NotSupport
104
}
105
106
func (d *Pan115Share) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
107
return errs.NotSupport
108
}
109
110
func (d *Pan115Share) Remove(ctx context.Context, obj model.Obj) error {
111
return errs.NotSupport
112
}
113
114
func (d *Pan115Share) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {
115
return errs.NotSupport
116
}
117
118
var _ driver.Driver = (*Pan115Share)(nil)
119
120