Skip to content

Commit b2c02e6

Browse files
committed
feat: add driver template
1 parent 7e05b03 commit b2c02e6

File tree

4 files changed

+260
-0
lines changed

4 files changed

+260
-0
lines changed

drivers/template/driver.go

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package template
2+
3+
import (
4+
"github.com/Xhofe/alist/conf"
5+
"github.com/Xhofe/alist/drivers/base"
6+
"github.com/Xhofe/alist/model"
7+
"github.com/Xhofe/alist/utils"
8+
"path/filepath"
9+
)
10+
11+
type Template struct {
12+
}
13+
14+
func (driver Template) Config() base.DriverConfig {
15+
return base.DriverConfig{
16+
Name: "Template",
17+
OnlyProxy: false,
18+
OnlyLocal: false,
19+
ApiProxy: false,
20+
NoNeedSetLink: false,
21+
NoCors: false,
22+
LocalSort: false,
23+
}
24+
}
25+
26+
func (driver Template) Items() []base.Item {
27+
// TODO fill need info
28+
return []base.Item{
29+
{
30+
Name: "refresh_token",
31+
Label: "refresh token",
32+
Type: base.TypeString,
33+
Required: true,
34+
},
35+
{
36+
Name: "root_folder",
37+
Label: "root folder path",
38+
Type: base.TypeString,
39+
Default: "/",
40+
Required: true,
41+
},
42+
}
43+
}
44+
45+
func (driver Template) Save(account *model.Account, old *model.Account) error {
46+
// TODO test available or init
47+
return nil
48+
}
49+
50+
func (driver Template) File(path string, account *model.Account) (*model.File, error) {
51+
path = utils.ParsePath(path)
52+
if path == "/" {
53+
return &model.File{
54+
Id: account.RootFolder,
55+
Name: account.Name,
56+
Size: 0,
57+
Type: conf.FOLDER,
58+
Driver: driver.Config().Name,
59+
UpdatedAt: account.UpdatedAt,
60+
}, nil
61+
}
62+
dir, name := filepath.Split(path)
63+
files, err := driver.Files(dir, account)
64+
if err != nil {
65+
return nil, err
66+
}
67+
for _, file := range files {
68+
if file.Name == name {
69+
return &file, nil
70+
}
71+
}
72+
return nil, base.ErrPathNotFound
73+
}
74+
75+
func (driver Template) Files(path string, account *model.Account) ([]model.File, error) {
76+
path = utils.ParsePath(path)
77+
cache, err := base.GetCache(path, account)
78+
if err == nil {
79+
files, _ := cache.([]model.File)
80+
return files, nil
81+
}
82+
var files []model.File
83+
// TODO get files
84+
if err != nil {
85+
return nil, err
86+
}
87+
if len(files) > 0 {
88+
_ = base.SetCache(path, files, account)
89+
}
90+
return files, nil
91+
}
92+
93+
func (driver Template) Link(args base.Args, account *model.Account) (*base.Link, error) {
94+
// TODO get file link
95+
return nil, base.ErrNotImplement
96+
}
97+
98+
func (driver Template) Path(path string, account *model.Account) (*model.File, []model.File, error) {
99+
path = utils.ParsePath(path)
100+
file, err := driver.File(path, account)
101+
if err != nil {
102+
return nil, nil, err
103+
}
104+
if !file.IsDir() {
105+
return file, nil, nil
106+
}
107+
files, err := driver.Files(path, account)
108+
if err != nil {
109+
return nil, nil, err
110+
}
111+
return nil, files, nil
112+
}
113+
114+
func (driver Template) Preview(path string, account *model.Account) (interface{}, error) {
115+
//TODO preview interface if driver support
116+
return nil, base.ErrNotImplement
117+
}
118+
119+
func (driver Template) MakeDir(path string, account *model.Account) error {
120+
//TODO make dir
121+
return base.ErrNotImplement
122+
}
123+
124+
func (driver Template) Move(src string, dst string, account *model.Account) error {
125+
//TODO move file/dir
126+
return base.ErrNotImplement
127+
}
128+
129+
func (driver Template) Rename(src string, dst string, account *model.Account) error {
130+
//TODO rename file/dir
131+
return base.ErrNotImplement
132+
}
133+
134+
func (driver Template) Copy(src string, dst string, account *model.Account) error {
135+
//TODO copy file/dir
136+
return base.ErrNotImplement
137+
}
138+
139+
func (driver Template) Delete(path string, account *model.Account) error {
140+
//TODO delete file/dir
141+
return base.ErrNotImplement
142+
}
143+
144+
func (driver Template) Upload(file *model.FileStream, account *model.Account) error {
145+
//TODO upload file
146+
return base.ErrNotImplement
147+
}
148+
149+
var _ base.Driver = (*Template)(nil)

drivers/template/template.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package template
2+
3+
import (
4+
"errors"
5+
"github.com/Xhofe/alist/conf"
6+
"github.com/Xhofe/alist/drivers/base"
7+
"github.com/Xhofe/alist/model"
8+
"github.com/Xhofe/alist/utils"
9+
"github.com/go-resty/resty/v2"
10+
"path"
11+
)
12+
13+
func LoginOrRefreshToken(account *model.Account) error {
14+
return nil
15+
}
16+
17+
func Request(u string, method int, headers, query, form map[string]string, data interface{}, resp interface{}, account *model.Account) ([]byte, error) {
18+
req := base.RestyClient.R()
19+
req.SetHeaders(map[string]string{
20+
"Authorization": "Bearer" + account.AccessToken,
21+
"Accept": "application/json, text/plain, */*",
22+
})
23+
if headers != nil {
24+
req.SetHeaders(headers)
25+
}
26+
if query != nil {
27+
req.SetQueryParams(query)
28+
}
29+
if form != nil {
30+
req.SetFormData(form)
31+
}
32+
if data != nil {
33+
req.SetBody(data)
34+
}
35+
if resp != nil {
36+
req.SetResult(resp)
37+
}
38+
var e Resp
39+
var err error
40+
var res *resty.Response
41+
req.SetError(&e)
42+
switch method {
43+
case base.Get:
44+
res, err = req.Get(u)
45+
case base.Post:
46+
res, err = req.Post(u)
47+
case base.Delete:
48+
res, err = req.Delete(u)
49+
case base.Patch:
50+
res, err = req.Patch(u)
51+
case base.Put:
52+
res, err = req.Put(u)
53+
default:
54+
return nil, base.ErrNotSupport
55+
}
56+
if err != nil {
57+
return nil, err
58+
}
59+
if e.Code >= 400 {
60+
if e.Code == 401 {
61+
err = LoginOrRefreshToken(account)
62+
if err != nil {
63+
return nil, err
64+
}
65+
return Request(u, method, headers, query, form, data, resp, account)
66+
}
67+
return nil, errors.New(e.Message)
68+
}
69+
return res.Body(), nil
70+
}
71+
72+
func (driver Template) formatFile(f *File) *model.File {
73+
file := model.File{
74+
Id: f.Id,
75+
Name: f.FileName,
76+
Size: f.Size,
77+
Driver: driver.Config().Name,
78+
UpdatedAt: f.UpdatedAt,
79+
}
80+
if f.File {
81+
file.Type = utils.GetFileType(path.Ext(f.FileName))
82+
} else {
83+
file.Type = conf.FOLDER
84+
}
85+
return &file
86+
}
87+
88+
func init() {
89+
base.RegisterDriver(&Template{})
90+
}

drivers/template/types.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package template
2+
3+
import "time"
4+
5+
// write all struct here
6+
7+
type Resp struct {
8+
Code int `json:"code"`
9+
Message string `json:"message"`
10+
}
11+
12+
type File struct {
13+
Id string `json:"id"`
14+
FileName string `json:"file_name"`
15+
Size int64 `json:"size"`
16+
File bool `json:"file"`
17+
UpdatedAt *time.Time `json:"updated_at"`
18+
}

drivers/template/util.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package template
2+
3+
// write util func here, such as cal sign

0 commit comments

Comments
 (0)