refactor: optimize driver initialization need to manually deserialize and assign values, and remove redundant driver registration parameters (#2691)

* refactor: optimize driver initialization need to manually deserialize and assign values, and remove redundant driver registration parameters

* fix typo

Co-authored-by: Noah Hsu <i@nn.ci>
pull/2701/head
foxxorcat 2022-12-13 18:03:30 +08:00 committed by GitHub
parent 3ee45c69a7
commit 33bae52fa1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 194 additions and 392 deletions

View File

@ -22,15 +22,10 @@ func (d *Pan115) Config() driver.Config {
} }
func (d *Pan115) GetAddition() driver.Additional { func (d *Pan115) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Pan115) Init(ctx context.Context, storage model.Storage) error { func (d *Pan115) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.login() return d.login()
} }

View File

@ -18,10 +18,8 @@ var config = driver.Config{
OnlyLocal: true, OnlyLocal: true,
} }
func New() driver.Driver {
return &Pan115{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &Pan115{}
})
} }

View File

@ -37,15 +37,10 @@ func (d *Pan123) Config() driver.Config {
} }
func (d *Pan123) GetAddition() driver.Additional { func (d *Pan123) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Pan123) Init(ctx context.Context, storage model.Storage) error { func (d *Pan123) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.login() return d.login()
} }

View File

@ -21,10 +21,8 @@ var config = driver.Config{
DefaultRoot: "0", DefaultRoot: "0",
} }
func New() driver.Driver {
return &Pan123{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &Pan123{}
})
} }

View File

@ -13,7 +13,6 @@ import (
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/errs" "github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@ -27,16 +26,11 @@ func (d *Yun139) Config() driver.Config {
} }
func (d *Yun139) GetAddition() driver.Additional { func (d *Yun139) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Yun139) Init(ctx context.Context, storage model.Storage) error { func (d *Yun139) Init(ctx context.Context) error {
d.Storage = storage _, err := d.post("/orchestration/personalCloud/user/v1.0/qryUserExternInfo", base.Json{
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
_, err = d.post("/orchestration/personalCloud/user/v1.0/qryUserExternInfo", base.Json{
"qryUserExternInfoReq": base.Json{ "qryUserExternInfoReq": base.Json{
"commonAccountInfo": base.Json{ "commonAccountInfo": base.Json{
"account": d.Account, "account": d.Account,

View File

@ -19,7 +19,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &Yun139{} return &Yun139{}
}) })
} }

View File

@ -26,15 +26,10 @@ func (d *Cloud189) Config() driver.Config {
} }
func (d *Cloud189) GetAddition() driver.Additional { func (d *Cloud189) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Cloud189) Init(ctx context.Context, storage model.Storage) error { func (d *Cloud189) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
d.client = resty.New(). d.client = resty.New().
SetTimeout(base.DefaultTimeout). SetTimeout(base.DefaultTimeout).
SetRetryCount(3). SetRetryCount(3).

View File

@ -18,7 +18,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &Cloud189{} return &Cloud189{}
}) })
} }

View File

@ -31,15 +31,10 @@ func (y *Yun189PC) Config() driver.Config {
} }
func (y *Yun189PC) GetAddition() driver.Additional { func (y *Yun189PC) GetAddition() driver.Additional {
return y.Addition return &y.Addition
}
func (y *Yun189PC) Init(ctx context.Context, storage model.Storage) (err error) {
y.Storage = storage
if err = utils.Json.UnmarshalFromString(y.Storage.Addition, &y.Addition); err != nil {
return err
} }
func (y *Yun189PC) Init(ctx context.Context) (err error) {
// 处理个人云和家庭云参数 // 处理个人云和家庭云参数
if y.isFamily() && y.RootFolderID == "-11" { if y.isFamily() && y.RootFolderID == "-11" {
y.RootFolderID = "" y.RootFolderID = ""

View File

@ -24,7 +24,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &Yun189PC{} return &Yun189PC{}
}) })
} }

View File

@ -7,7 +7,6 @@ import (
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/errs" "github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/alist-org/alist/v3/server/common" "github.com/alist-org/alist/v3/server/common"
) )
@ -21,21 +20,16 @@ func (d *AListV2) Config() driver.Config {
} }
func (d *AListV2) GetAddition() driver.Additional { func (d *AListV2) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *AListV2) Init(ctx context.Context, storage model.Storage) error { func (d *AListV2) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
if len(d.Addition.Address) > 0 && string(d.Addition.Address[len(d.Addition.Address)-1]) == "/" { if len(d.Addition.Address) > 0 && string(d.Addition.Address[len(d.Addition.Address)-1]) == "/" {
d.Addition.Address = d.Addition.Address[0 : len(d.Addition.Address)-1] d.Addition.Address = d.Addition.Address[0 : len(d.Addition.Address)-1]
} }
// TODO login / refresh token // TODO login / refresh token
//op.MustSaveDriverStorage(d) //op.MustSaveDriverStorage(d)
return err return nil
} }
func (d *AListV2) Drop(ctx context.Context) error { func (d *AListV2) Drop(ctx context.Context) error {

View File

@ -20,7 +20,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &AListV2{} return &AListV2{}
}) })
} }

View File

@ -10,7 +10,6 @@ import (
"github.com/alist-org/alist/v3/drivers/base" "github.com/alist-org/alist/v3/drivers/base"
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/alist-org/alist/v3/server/common" "github.com/alist-org/alist/v3/server/common"
) )
@ -24,19 +23,14 @@ func (d *AListV3) Config() driver.Config {
} }
func (d *AListV3) GetAddition() driver.Additional { func (d *AListV3) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *AListV3) Init(ctx context.Context, storage model.Storage) error { func (d *AListV3) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
d.Addition.Address = strings.TrimSuffix(d.Addition.Address, "/") d.Addition.Address = strings.TrimSuffix(d.Addition.Address, "/")
// TODO login / refresh token // TODO login / refresh token
//op.MustSaveDriverStorage(d) //op.MustSaveDriverStorage(d)
return err return nil
} }
func (d *AListV3) Drop(ctx context.Context) error { func (d *AListV3) Drop(ctx context.Context) error {

View File

@ -19,7 +19,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &AListV3{} return &AListV3{}
}) })
} }

View File

@ -38,18 +38,13 @@ func (d *AliDrive) Config() driver.Config {
} }
func (d *AliDrive) GetAddition() driver.Additional { func (d *AliDrive) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *AliDrive) Init(ctx context.Context, storage model.Storage) error { func (d *AliDrive) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
// TODO login / refresh token // TODO login / refresh token
//op.MustSaveDriverStorage(d) //op.MustSaveDriverStorage(d)
err = d.refreshToken() err := d.refreshToken()
if err != nil { if err != nil {
return err return err
} }

View File

@ -18,10 +18,8 @@ var config = driver.Config{
DefaultRoot: "root", DefaultRoot: "root",
} }
func New() driver.Driver {
return &AliDrive{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &AliDrive{}
})
} }

View File

@ -29,16 +29,11 @@ func (d *AliyundriveShare) Config() driver.Config {
} }
func (d *AliyundriveShare) GetAddition() driver.Additional { func (d *AliyundriveShare) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *AliyundriveShare) Init(ctx context.Context, storage model.Storage) error { func (d *AliyundriveShare) Init(ctx context.Context) error {
d.Storage = storage err := d.refreshToken()
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
err = d.refreshToken()
if err != nil { if err != nil {
return err return err
} }

View File

@ -23,7 +23,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &AliyundriveShare{} return &AliyundriveShare{}
}) })
} }

View File

@ -31,15 +31,10 @@ func (d *BaiduNetdisk) Config() driver.Config {
} }
func (d *BaiduNetdisk) GetAddition() driver.Additional { func (d *BaiduNetdisk) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *BaiduNetdisk) Init(ctx context.Context, storage model.Storage) error { func (d *BaiduNetdisk) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.refreshToken() return d.refreshToken()
} }

View File

@ -20,10 +20,8 @@ var config = driver.Config{
DefaultRoot: "/", DefaultRoot: "/",
} }
func New() driver.Driver {
return &BaiduNetdisk{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &BaiduNetdisk{}
})
} }

View File

@ -29,15 +29,10 @@ func (d *BaiduPhoto) Config() driver.Config {
} }
func (d *BaiduPhoto) GetAddition() driver.Additional { func (d *BaiduPhoto) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *BaiduPhoto) Init(ctx context.Context, storage model.Storage) error { func (d *BaiduPhoto) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.refreshToken() return d.refreshToken()
} }

View File

@ -24,7 +24,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &BaiduPhoto{} return &BaiduPhoto{}
}) })
} }

View File

@ -7,7 +7,6 @@ import (
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/errs" "github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/jlaffaye/ftp" "github.com/jlaffaye/ftp"
) )
@ -22,15 +21,10 @@ func (d *FTP) Config() driver.Config {
} }
func (d *FTP) GetAddition() driver.Additional { func (d *FTP) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *FTP) Init(ctx context.Context, storage model.Storage) error { func (d *FTP) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.login() return d.login()
} }

View File

@ -19,10 +19,8 @@ var config = driver.Config{
DefaultRoot: "/", DefaultRoot: "/",
} }
func New() driver.Driver {
return &FTP{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &FTP{}
})
} }

View File

@ -27,15 +27,10 @@ func (d *GoogleDrive) Config() driver.Config {
} }
func (d *GoogleDrive) GetAddition() driver.Additional { func (d *GoogleDrive) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *GoogleDrive) Init(ctx context.Context, storage model.Storage) error { func (d *GoogleDrive) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
if d.ChunkSize == 0 { if d.ChunkSize == 0 {
d.ChunkSize = 5 d.ChunkSize = 5
} }

View File

@ -21,10 +21,8 @@ var config = driver.Config{
DefaultRoot: "root", DefaultRoot: "root",
} }
func New() driver.Driver {
return &GoogleDrive{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &GoogleDrive{}
})
} }

View File

@ -26,15 +26,10 @@ func (d *GooglePhoto) Config() driver.Config {
} }
func (d *GooglePhoto) GetAddition() driver.Additional { func (d *GooglePhoto) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *GooglePhoto) Init(ctx context.Context, storage model.Storage) error { func (d *GooglePhoto) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.refreshToken() return d.refreshToken()
} }

View File

@ -21,10 +21,8 @@ var config = driver.Config{
LocalSort: true, LocalSort: true,
} }
func New() driver.Driver {
return &GooglePhoto{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &GooglePhoto{}
})
} }

View File

@ -9,7 +9,6 @@ import (
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/errs" "github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
) )
@ -25,15 +24,10 @@ func (d *LanZou) Config() driver.Config {
} }
func (d *LanZou) GetAddition() driver.Additional { func (d *LanZou) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *LanZou) Init(ctx context.Context, storage model.Storage) error { func (d *LanZou) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
if d.IsCookie() { if d.IsCookie() {
if d.RootFolderID == "" { if d.RootFolderID == "" {
d.RootFolderID = "-1" d.RootFolderID = "-1"

View File

@ -25,7 +25,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &LanZou{} return &LanZou{}
}) })
} }

View File

@ -34,12 +34,7 @@ func (d *Local) Config() driver.Config {
return config return config
} }
func (d *Local) Init(ctx context.Context, storage model.Storage) error { func (d *Local) Init(ctx context.Context) (err error) {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
if !utils.Exists(d.GetRootPath()) { if !utils.Exists(d.GetRootPath()) {
err = fmt.Errorf("root folder %s not exists", d.GetRootPath()) err = fmt.Errorf("root folder %s not exists", d.GetRootPath())
} else { } else {
@ -59,7 +54,7 @@ func (d *Local) Drop(ctx context.Context) error {
} }
func (d *Local) GetAddition() driver.Additional { func (d *Local) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Local) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) { func (d *Local) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {

View File

@ -19,10 +19,8 @@ var config = driver.Config{
DefaultRoot: "/", DefaultRoot: "/",
} }
func New() driver.Driver {
return &Local{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &Local{}
})
} }

View File

@ -36,16 +36,11 @@ func (d *MediaTrack) Config() driver.Config {
} }
func (d *MediaTrack) GetAddition() driver.Additional { func (d *MediaTrack) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *MediaTrack) Init(ctx context.Context, storage model.Storage) error { func (d *MediaTrack) Init(ctx context.Context) error {
d.Storage = storage _, err := d.request("https://kayle.api.mediatrack.cn/users", http.MethodGet, nil, nil)
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
_, err = d.request("https://kayle.api.mediatrack.cn/users", http.MethodGet, nil, nil)
return err return err
} }

View File

@ -18,7 +18,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &MediaTrack{} return &MediaTrack{}
}) })
} }

View File

@ -10,7 +10,6 @@ import (
"github.com/alist-org/alist/v3/internal/errs" "github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/chanio" "github.com/alist-org/alist/v3/pkg/chanio"
"github.com/alist-org/alist/v3/pkg/utils"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/t3rm1n4l/go-mega" "github.com/t3rm1n4l/go-mega"
) )
@ -26,15 +25,10 @@ func (d *Mega) Config() driver.Config {
} }
func (d *Mega) GetAddition() driver.Additional { func (d *Mega) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Mega) Init(ctx context.Context, storage model.Storage) error { func (d *Mega) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
d.c = mega.New() d.c = mega.New()
return d.c.Login(d.Email, d.Password) return d.c.Login(d.Email, d.Password)
} }

View File

@ -20,7 +20,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &Mega{} return &Mega{}
}) })
} }

View File

@ -25,15 +25,10 @@ func (d *Onedrive) Config() driver.Config {
} }
func (d *Onedrive) GetAddition() driver.Additional { func (d *Onedrive) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Onedrive) Init(ctx context.Context, storage model.Storage) error { func (d *Onedrive) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
if d.ChunkSize < 1 { if d.ChunkSize < 1 {
d.ChunkSize = 5 d.ChunkSize = 5
} }

View File

@ -23,10 +23,8 @@ var config = driver.Config{
DefaultRoot: "/", DefaultRoot: "/",
} }
func New() driver.Driver {
return &Onedrive{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &Onedrive{}
})
} }

View File

@ -35,15 +35,10 @@ func (d *PikPak) Config() driver.Config {
} }
func (d *PikPak) GetAddition() driver.Additional { func (d *PikPak) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *PikPak) Init(ctx context.Context, storage model.Storage) error { func (d *PikPak) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.login() return d.login()
} }

View File

@ -17,10 +17,8 @@ var config = driver.Config{
DefaultRoot: "", DefaultRoot: "",
} }
func New() driver.Driver {
return &PikPak{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &PikPak{}
})
} }

View File

@ -29,16 +29,11 @@ func (d *Quark) Config() driver.Config {
} }
func (d *Quark) GetAddition() driver.Additional { func (d *Quark) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Quark) Init(ctx context.Context, storage model.Storage) error { func (d *Quark) Init(ctx context.Context) error {
d.Storage = storage _, err := d.request("/config", http.MethodGet, nil, nil)
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
_, err = d.request("/config", http.MethodGet, nil, nil)
return err return err
} }

View File

@ -18,10 +18,8 @@ var config = driver.Config{
DefaultRoot: "0", DefaultRoot: "0",
} }
func New() driver.Driver {
return &Quark{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &Quark{}
})
} }

View File

@ -11,7 +11,6 @@ import (
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager" "github.com/aws/aws-sdk-go/service/s3/s3manager"
@ -31,19 +30,14 @@ func (d *S3) Config() driver.Config {
} }
func (d *S3) GetAddition() driver.Additional { func (d *S3) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *S3) Init(ctx context.Context, storage model.Storage) error { func (d *S3) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
if d.Region == "" { if d.Region == "" {
d.Region = "alist" d.Region = "alist"
} }
err = d.initSession() err := d.initSession()
if err != nil { if err != nil {
return err return err
} }

View File

@ -25,10 +25,8 @@ var config = driver.Config{
CheckStatus: true, CheckStatus: true,
} }
func New() driver.Driver {
return &S3{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &S3{}
})
} }

View File

@ -23,15 +23,10 @@ func (d *SFTP) Config() driver.Config {
} }
func (d *SFTP) GetAddition() driver.Additional { func (d *SFTP) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *SFTP) Init(ctx context.Context, storage model.Storage) error { func (d *SFTP) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.initClient() return d.initClient()
} }

View File

@ -21,10 +21,8 @@ var config = driver.Config{
CheckStatus: true, CheckStatus: true,
} }
func New() driver.Driver {
return &SFTP{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &SFTP{}
})
} }

View File

@ -26,15 +26,10 @@ func (d *SMB) Config() driver.Config {
} }
func (d *SMB) GetAddition() driver.Additional { func (d *SMB) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *SMB) Init(ctx context.Context, storage model.Storage) error { func (d *SMB) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
if strings.Index(d.Addition.Address, ":") < 0 { if strings.Index(d.Addition.Address, ":") < 0 {
d.Addition.Address = d.Addition.Address + ":445" d.Addition.Address = d.Addition.Address + ":445"
} }

View File

@ -22,7 +22,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &SMB{} return &SMB{}
}) })
} }

View File

@ -8,7 +8,6 @@ import (
"github.com/alist-org/alist/v3/drivers/base" "github.com/alist-org/alist/v3/drivers/base"
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
) )
@ -22,16 +21,11 @@ func (d *Teambition) Config() driver.Config {
} }
func (d *Teambition) GetAddition() driver.Additional { func (d *Teambition) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Teambition) Init(ctx context.Context, storage model.Storage) error { func (d *Teambition) Init(ctx context.Context) error {
d.Storage = storage _, err := d.request("/api/v2/roles", http.MethodGet, nil, nil)
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
_, err = d.request("/api/v2/roles", http.MethodGet, nil, nil)
return err return err
} }

View File

@ -18,10 +18,8 @@ var config = driver.Config{
Name: "Teambition", Name: "Teambition",
} }
func New() driver.Driver {
return &Teambition{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &Teambition{}
})
} }

View File

@ -6,7 +6,6 @@ import (
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/errs" "github.com/alist-org/alist/v3/internal/errs"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
) )
type Template struct { type Template struct {
@ -19,18 +18,13 @@ func (d *Template) Config() driver.Config {
} }
func (d *Template) GetAddition() driver.Additional { func (d *Template) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Template) Init(ctx context.Context, storage model.Storage) error { func (d *Template) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
// TODO login / refresh token // TODO login / refresh token
//op.MustSaveDriverStorage(d) //op.MustSaveDriverStorage(d)
return err return nil
} }
func (d *Template) Drop(ctx context.Context) error { func (d *Template) Drop(ctx context.Context) error {

View File

@ -25,7 +25,7 @@ var config = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &Template{} return &Template{}
}) })
} }

View File

@ -32,15 +32,10 @@ func (x *Thunder) Config() driver.Config {
} }
func (x *Thunder) GetAddition() driver.Additional { func (x *Thunder) GetAddition() driver.Additional {
return x.Addition return &x.Addition
}
func (x *Thunder) Init(ctx context.Context, storage model.Storage) (err error) {
x.Storage = storage
if err = utils.Json.UnmarshalFromString(x.Storage.Addition, &x.Addition); err != nil {
return err
} }
func (x *Thunder) Init(ctx context.Context) (err error) {
// 初始化所需参数 // 初始化所需参数
if x.XunLeiCommon == nil { if x.XunLeiCommon == nil {
x.XunLeiCommon = &XunLeiCommon{ x.XunLeiCommon = &XunLeiCommon{
@ -126,15 +121,10 @@ func (x *ThunderExpert) Config() driver.Config {
} }
func (x *ThunderExpert) GetAddition() driver.Additional { func (x *ThunderExpert) GetAddition() driver.Additional {
return x.ExpertAddition return &x.ExpertAddition
}
func (x *ThunderExpert) Init(ctx context.Context, storage model.Storage) (err error) {
x.Storage = storage
if err = utils.Json.UnmarshalFromString(x.Storage.Addition, &x.ExpertAddition); err != nil {
return err
} }
func (x *ThunderExpert) Init(ctx context.Context) (err error) {
// 防止重复登录 // 防止重复登录
identity := x.GetIdentity() identity := x.GetIdentity()
if identity != x.identity || !x.IsLogin() { if identity != x.identity || !x.IsLogin() {

View File

@ -93,10 +93,10 @@ var configExpert = driver.Config{
} }
func init() { func init() {
op.RegisterDriver(config, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &Thunder{} return &Thunder{}
}) })
op.RegisterDriver(configExpert, func() driver.Driver { op.RegisterDriver(func() driver.Driver {
return &ThunderExpert{} return &ThunderExpert{}
}) })
} }

View File

@ -25,15 +25,10 @@ func (d *USS) Config() driver.Config {
} }
func (d *USS) GetAddition() driver.Additional { func (d *USS) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *USS) Init(ctx context.Context, storage model.Storage) error { func (d *USS) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
d.client = upyun.NewUpYun(&upyun.UpYunConfig{ d.client = upyun.NewUpYun(&upyun.UpYunConfig{
Bucket: d.Bucket, Bucket: d.Bucket,
Operator: d.OperatorName, Operator: d.OperatorName,

View File

@ -20,10 +20,8 @@ var config = driver.Config{
LocalSort: true, LocalSort: true,
} }
func New() driver.Driver {
return &USS{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &USS{}
})
} }

View File

@ -7,7 +7,6 @@ import (
"github.com/alist-org/alist/v3/internal/driver" "github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/alist-org/alist/v3/pkg/utils/random" "github.com/alist-org/alist/v3/pkg/utils/random"
) )
@ -20,12 +19,7 @@ func (d *Virtual) Config() driver.Config {
return config return config
} }
func (d *Virtual) Init(ctx context.Context, storage model.Storage) error { func (d *Virtual) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(storage.Addition, &d.Addition)
if err != nil {
return err
}
return nil return nil
} }
@ -34,7 +28,7 @@ func (d *Virtual) Drop(ctx context.Context) error {
} }
func (d *Virtual) GetAddition() driver.Additional { func (d *Virtual) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *Virtual) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) { func (d *Virtual) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {

View File

@ -21,10 +21,8 @@ var config = driver.Config{
//NoCache: true, //NoCache: true,
} }
func New() driver.Driver {
return &Virtual{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &Virtual{}
})
} }

View File

@ -26,16 +26,11 @@ func (d *WebDav) Config() driver.Config {
} }
func (d *WebDav) GetAddition() driver.Additional { func (d *WebDav) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *WebDav) Init(ctx context.Context, storage model.Storage) error { func (d *WebDav) Init(ctx context.Context) error {
d.Storage = storage err := d.setClient()
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
err = d.setClient()
if err == nil { if err == nil {
d.cron = cron.NewCron(time.Hour * 12) d.cron = cron.NewCron(time.Hour * 12)
d.cron.Do(func() { d.cron.Do(func() {

View File

@ -20,10 +20,8 @@ var config = driver.Config{
DefaultRoot: "/", DefaultRoot: "/",
} }
func New() driver.Driver {
return &WebDav{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &WebDav{}
})
} }

View File

@ -24,15 +24,10 @@ func (d *YandexDisk) Config() driver.Config {
} }
func (d *YandexDisk) GetAddition() driver.Additional { func (d *YandexDisk) GetAddition() driver.Additional {
return d.Addition return &d.Addition
} }
func (d *YandexDisk) Init(ctx context.Context, storage model.Storage) error { func (d *YandexDisk) Init(ctx context.Context) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
return d.refreshToken() return d.refreshToken()
} }

View File

@ -19,10 +19,8 @@ var config = driver.Config{
DefaultRoot: "/", DefaultRoot: "/",
} }
func New() driver.Driver {
return &YandexDisk{}
}
func init() { func init() {
op.RegisterDriver(config, New) op.RegisterDriver(func() driver.Driver {
return &YandexDisk{}
})
} }

View File

@ -17,11 +17,11 @@ type Meta interface {
Config() Config Config() Config
// GetStorage just get raw storage, no need to implement, because model.Storage have implemented // GetStorage just get raw storage, no need to implement, because model.Storage have implemented
GetStorage() *model.Storage GetStorage() *model.Storage
// GetAddition Additional can't be modified externally, so needn't return pointer SetStorage(model.Storage)
// GetAddition Additional is used for unmarshal of JSON, so need return pointer
GetAddition() Additional GetAddition() Additional
// Init If already initialized, drop first // Init If already initialized, drop first
// need to unmarshal string to addition first Init(ctx context.Context) error
Init(ctx context.Context, storage model.Storage) error
Drop(ctx context.Context) error Drop(ctx context.Context) error
} }

View File

@ -33,6 +33,10 @@ func (s *Storage) GetStorage() *Storage {
return s return s
} }
func (s *Storage) SetStorage(storage Storage) {
*s = storage
}
func (s *Storage) SetStatus(status string) { func (s *Storage) SetStatus(status string) {
s.Status = status s.Status = status
} }

View File

@ -15,10 +15,12 @@ type New func() driver.Driver
var driverNewMap = map[string]New{} var driverNewMap = map[string]New{}
var driverInfoMap = map[string]driver.Info{} var driverInfoMap = map[string]driver.Info{}
func RegisterDriver(config driver.Config, driver New) { func RegisterDriver(driver New) {
// log.Infof("register driver: [%s]", config.Name) // log.Infof("register driver: [%s]", config.Name)
registerDriverItems(config, driver().GetAddition()) tempDriver := driver()
driverNewMap[config.Name] = driver tempConfig := tempDriver.Config()
registerDriverItems(tempConfig, tempDriver.GetAddition())
driverNewMap[tempConfig.Name] = driver
} }
func GetDriverNew(name string) (New, error) { func GetDriverNew(name string) (New, error) {
@ -44,6 +46,9 @@ func GetDriverInfoMap() map[string]driver.Info {
func registerDriverItems(config driver.Config, addition driver.Additional) { func registerDriverItems(config driver.Config, addition driver.Additional) {
// log.Debugf("addition of %s: %+v", config.Name, addition) // log.Debugf("addition of %s: %+v", config.Name, addition)
tAddition := reflect.TypeOf(addition) tAddition := reflect.TypeOf(addition)
for tAddition.Kind() == reflect.Pointer {
tAddition = tAddition.Elem()
}
mainItems := getMainItems(config) mainItems := getMainItems(config)
additionalItems := getAdditionalItems(tAddition, config.DefaultRoot) additionalItems := getAdditionalItems(tAddition, config.DefaultRoot)
driverInfoMap[config.Name] = driver.Info{ driverInfoMap[config.Name] = driver.Info{

View File

@ -2,7 +2,6 @@ package op
import ( import (
"context" "context"
"fmt"
"sort" "sort"
"strings" "strings"
"time" "time"
@ -56,15 +55,9 @@ func CreateStorage(ctx context.Context, storage model.Storage) (uint, error) {
return storage.ID, errors.WithMessage(err, "failed create storage in database") return storage.ID, errors.WithMessage(err, "failed create storage in database")
} }
// already has an id // already has an id
err = storageDriver.Init(ctx, storage) err = initStorage(ctx, storage, storageDriver)
storagesMap.Store(storage.MountPath, storageDriver)
if err != nil { if err != nil {
storageDriver.GetStorage().SetStatus(fmt.Sprintf("%+v", err.Error())) return storage.ID, errors.Wrap(err, "failed init storage but storage is already created")
MustSaveDriverStorage(storageDriver)
return storage.ID, errors.Wrapf(err, "failed init storage but storage is already created")
} else {
storageDriver.GetStorage().SetStatus(WORK)
MustSaveDriverStorage(storageDriver)
} }
log.Debugf("storage %+v is created", storageDriver) log.Debugf("storage %+v is created", storageDriver)
return storage.ID, nil return storage.ID, nil
@ -80,18 +73,31 @@ func LoadStorage(ctx context.Context, storage model.Storage) error {
return errors.WithMessage(err, "failed get driver new") return errors.WithMessage(err, "failed get driver new")
} }
storageDriver := driverNew() storageDriver := driverNew()
err = storageDriver.Init(ctx, storage)
storagesMap.Store(storage.MountPath, storageDriver) err = initStorage(ctx, storage, storageDriver)
if err != nil {
storageDriver.GetStorage().SetStatus(fmt.Sprintf("%+v", err.Error()))
MustSaveDriverStorage(storageDriver)
return errors.Wrapf(err, "failed init storage")
} else {
storageDriver.GetStorage().SetStatus(WORK)
MustSaveDriverStorage(storageDriver)
}
log.Debugf("storage %+v is created", storageDriver) log.Debugf("storage %+v is created", storageDriver)
return nil return err
}
// initStorage initialize the driver and store to storagesMap
func initStorage(ctx context.Context, storage model.Storage, storageDriver driver.Driver) (err error) {
storageDriver.SetStorage(storage)
driverStorage := storageDriver.GetStorage()
// Unmarshal Addition
err = utils.Json.UnmarshalFromString(driverStorage.Addition, storageDriver.GetAddition())
if err == nil {
err = storageDriver.Init(ctx)
}
storagesMap.Store(driverStorage.MountPath, storageDriver)
if err != nil {
driverStorage.SetStatus(err.Error())
err = errors.Wrap(err, "failed init storage")
} else {
driverStorage.SetStatus(WORK)
}
MustSaveDriverStorage(storageDriver)
return err
} }
func EnableStorage(ctx context.Context, id uint) error { func EnableStorage(ctx context.Context, id uint) error {
@ -128,7 +134,7 @@ func DisableStorage(ctx context.Context, id uint) error {
} }
// drop the storage in the driver // drop the storage in the driver
if err := storageDriver.Drop(ctx); err != nil { if err := storageDriver.Drop(ctx); err != nil {
return errors.Wrapf(err, "failed drop storage") return errors.Wrap(err, "failed drop storage")
} }
// delete the storage in the memory // delete the storage in the memory
storage.Disabled = true storage.Disabled = true
@ -172,17 +178,10 @@ func UpdateStorage(ctx context.Context, storage model.Storage) error {
if err != nil { if err != nil {
return errors.Wrapf(err, "failed drop storage") return errors.Wrapf(err, "failed drop storage")
} }
err = storageDriver.Init(ctx, storage)
storagesMap.Store(storage.MountPath, storageDriver) err = initStorage(ctx, storage, storageDriver)
if err != nil { log.Debugf("storage %+v is update", storageDriver)
storageDriver.GetStorage().SetStatus(fmt.Sprintf("%+v", err.Error())) return err
MustSaveDriverStorage(storageDriver)
return errors.Wrapf(err, "failed init storage")
} else {
storageDriver.GetStorage().SetStatus(WORK)
MustSaveDriverStorage(storageDriver)
}
return nil
} }
func DeleteStorageById(ctx context.Context, id uint) error { func DeleteStorageById(ctx context.Context, id uint) error {
@ -220,11 +219,11 @@ func MustSaveDriverStorage(driver driver.Driver) {
func saveDriverStorage(driver driver.Driver) error { func saveDriverStorage(driver driver.Driver) error {
storage := driver.GetStorage() storage := driver.GetStorage()
addition := driver.GetAddition() addition := driver.GetAddition()
bytes, err := utils.Json.Marshal(addition) strs, err := utils.Json.MarshalToString(addition)
if err != nil { if err != nil {
return errors.Wrap(err, "error while marshal addition") return errors.Wrap(err, "error while marshal addition")
} }
storage.Addition = string(bytes) storage.Addition = strs
err = db.UpdateStorage(storage) err = db.UpdateStorage(storage)
if err != nil { if err != nil {
return errors.WithMessage(err, "failed update storage in database") return errors.WithMessage(err, "failed update storage in database")

View File

@ -64,7 +64,7 @@ func GetIgnorePaths() ([]string, error) {
for _, storage := range storages { for _, storage := range storages {
if utils.SliceContains(skipDrivers, storage.Config().Name) { if utils.SliceContains(skipDrivers, storage.Config().Name) {
if storage.Config().Name == "AList V3" { if storage.Config().Name == "AList V3" {
addition := storage.GetAddition().(alist_v3.Addition) addition := storage.GetAddition().(*alist_v3.Addition)
allowIndexed, visited := v3Visited[addition.Address] allowIndexed, visited := v3Visited[addition.Address]
if !visited { if !visited {
url := addition.Address + "/api/public/settings" url := addition.Address + "/api/public/settings"