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 {
return d.Addition
return &d.Addition
}
func (d *Pan115) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *Pan115) Init(ctx context.Context) error {
return d.login()
}

View File

@ -6,7 +6,7 @@ import (
)
type Addition struct {
Cookie string `json:"cookie"`
Cookie string `json:"cookie"`
QRCodeToken string `json:"qrcode_token"`
driver.RootID
}
@ -18,10 +18,8 @@ var config = driver.Config{
OnlyLocal: true,
}
func New() driver.Driver {
return &Pan115{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *Pan123) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *Pan123) Init(ctx context.Context) error {
return d.login()
}

View File

@ -21,10 +21,8 @@ var config = driver.Config{
DefaultRoot: "0",
}
func New() driver.Driver {
return &Pan123{}
}
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/errs"
"github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
log "github.com/sirupsen/logrus"
)
@ -27,16 +26,11 @@ func (d *Yun139) Config() driver.Config {
}
func (d *Yun139) GetAddition() driver.Additional {
return d.Addition
return &d.Addition
}
func (d *Yun139) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
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{
func (d *Yun139) Init(ctx context.Context) error {
_, err := d.post("/orchestration/personalCloud/user/v1.0/qryUserExternInfo", base.Json{
"qryUserExternInfoReq": base.Json{
"commonAccountInfo": base.Json{
"account": d.Account,

View File

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

View File

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

View File

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

View File

@ -31,15 +31,10 @@ func (y *Yun189PC) Config() driver.Config {
}
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" {
y.RootFolderID = ""

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -18,10 +18,8 @@ var config = driver.Config{
DefaultRoot: "root",
}
func New() driver.Driver {
return &AliDrive{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *AliyundriveShare) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
err = d.refreshToken()
func (d *AliyundriveShare) Init(ctx context.Context) error {
err := d.refreshToken()
if err != nil {
return err
}

View File

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

View File

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

View File

@ -20,10 +20,8 @@ var config = driver.Config{
DefaultRoot: "/",
}
func New() driver.Driver {
return &BaiduNetdisk{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *BaiduPhoto) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *BaiduPhoto) Init(ctx context.Context) error {
return d.refreshToken()
}

View File

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

View File

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

View File

@ -19,10 +19,8 @@ var config = driver.Config{
DefaultRoot: "/",
}
func New() driver.Driver {
return &FTP{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *GoogleDrive) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *GoogleDrive) Init(ctx context.Context) error {
if d.ChunkSize == 0 {
d.ChunkSize = 5
}

View File

@ -21,10 +21,8 @@ var config = driver.Config{
DefaultRoot: "root",
}
func New() driver.Driver {
return &GoogleDrive{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *GooglePhoto) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *GooglePhoto) Init(ctx context.Context) error {
return d.refreshToken()
}

View File

@ -21,10 +21,8 @@ var config = driver.Config{
LocalSort: true,
}
func New() driver.Driver {
return &GooglePhoto{}
}
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/errs"
"github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/go-resty/resty/v2"
)
@ -25,15 +24,10 @@ func (d *LanZou) Config() driver.Config {
}
func (d *LanZou) GetAddition() driver.Additional {
return d.Addition
return &d.Addition
}
func (d *LanZou) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *LanZou) Init(ctx context.Context) error {
if d.IsCookie() {
if d.RootFolderID == "" {
d.RootFolderID = "-1"

View File

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

View File

@ -34,12 +34,7 @@ func (d *Local) Config() driver.Config {
return config
}
func (d *Local) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *Local) Init(ctx context.Context) (err error) {
if !utils.Exists(d.GetRootPath()) {
err = fmt.Errorf("root folder %s not exists", d.GetRootPath())
} else {
@ -59,7 +54,7 @@ func (d *Local) Drop(ctx context.Context) error {
}
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) {

View File

@ -19,10 +19,8 @@ var config = driver.Config{
DefaultRoot: "/",
}
func New() driver.Driver {
return &Local{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *MediaTrack) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
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)
func (d *MediaTrack) Init(ctx context.Context) error {
_, err := d.request("https://kayle.api.mediatrack.cn/users", http.MethodGet, nil, nil)
return err
}

View File

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

View File

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

View File

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

View File

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

View File

@ -23,10 +23,8 @@ var config = driver.Config{
DefaultRoot: "/",
}
func New() driver.Driver {
return &Onedrive{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *PikPak) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *PikPak) Init(ctx context.Context) error {
return d.login()
}

View File

@ -17,10 +17,8 @@ var config = driver.Config{
DefaultRoot: "",
}
func New() driver.Driver {
return &PikPak{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *Quark) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
_, err = d.request("/config", http.MethodGet, nil, nil)
func (d *Quark) Init(ctx context.Context) error {
_, err := d.request("/config", http.MethodGet, nil, nil)
return err
}

View File

@ -18,10 +18,8 @@ var config = driver.Config{
DefaultRoot: "0",
}
func New() driver.Driver {
return &Quark{}
}
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/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"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 {
return d.Addition
return &d.Addition
}
func (d *S3) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *S3) Init(ctx context.Context) error {
if d.Region == "" {
d.Region = "alist"
}
err = d.initSession()
err := d.initSession()
if err != nil {
return err
}

View File

@ -25,10 +25,8 @@ var config = driver.Config{
CheckStatus: true,
}
func New() driver.Driver {
return &S3{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *SFTP) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *SFTP) Init(ctx context.Context) error {
return d.initClient()
}

View File

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

View File

@ -26,16 +26,11 @@ func (d *SMB) Config() driver.Config {
}
func (d *SMB) GetAddition() driver.Additional {
return d.Addition
return &d.Addition
}
func (d *SMB) Init(ctx context.Context, storage model.Storage) 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{
func (d *SMB) Init(ctx context.Context) error {
if strings.Index(d.Addition.Address, ":") < 0 {
d.Addition.Address = d.Addition.Address + ":445"
}
return d.initFS()

View File

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

View File

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

View File

@ -18,10 +18,8 @@ var config = driver.Config{
Name: "Teambition",
}
func New() driver.Driver {
return &Teambition{}
}
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/errs"
"github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/pkg/utils"
)
type Template struct {
@ -19,18 +18,13 @@ func (d *Template) Config() driver.Config {
}
func (d *Template) GetAddition() driver.Additional {
return d.Addition
return &d.Addition
}
func (d *Template) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *Template) Init(ctx context.Context) error {
// TODO login / refresh token
//op.MustSaveDriverStorage(d)
return err
return nil
}
func (d *Template) Drop(ctx context.Context) error {

View File

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

View File

@ -32,15 +32,10 @@ func (x *Thunder) Config() driver.Config {
}
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 {
x.XunLeiCommon = &XunLeiCommon{
@ -126,15 +121,10 @@ func (x *ThunderExpert) Config() driver.Config {
}
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()
if identity != x.identity || !x.IsLogin() {

View File

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

View File

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

View File

@ -20,10 +20,8 @@ var config = driver.Config{
LocalSort: true,
}
func New() driver.Driver {
return &USS{}
}
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/model"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/alist-org/alist/v3/pkg/utils/random"
)
@ -20,12 +19,7 @@ func (d *Virtual) Config() driver.Config {
return config
}
func (d *Virtual) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *Virtual) Init(ctx context.Context) error {
return nil
}
@ -34,7 +28,7 @@ func (d *Virtual) Drop(ctx context.Context) error {
}
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) {

View File

@ -21,10 +21,8 @@ var config = driver.Config{
//NoCache: true,
}
func New() driver.Driver {
return &Virtual{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *WebDav) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
err = d.setClient()
func (d *WebDav) Init(ctx context.Context) error {
err := d.setClient()
if err == nil {
d.cron = cron.NewCron(time.Hour * 12)
d.cron.Do(func() {

View File

@ -20,10 +20,8 @@ var config = driver.Config{
DefaultRoot: "/",
}
func New() driver.Driver {
return &WebDav{}
}
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 {
return d.Addition
return &d.Addition
}
func (d *YandexDisk) Init(ctx context.Context, storage model.Storage) error {
d.Storage = storage
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
if err != nil {
return err
}
func (d *YandexDisk) Init(ctx context.Context) error {
return d.refreshToken()
}

View File

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

View File

@ -17,11 +17,11 @@ type Meta interface {
Config() Config
// GetStorage just get raw storage, no need to implement, because model.Storage have implemented
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
// Init If already initialized, drop first
// need to unmarshal string to addition first
Init(ctx context.Context, storage model.Storage) error
Init(ctx context.Context) error
Drop(ctx context.Context) error
}

View File

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

View File

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

View File

@ -2,7 +2,6 @@ package op
import (
"context"
"fmt"
"sort"
"strings"
"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")
}
// already has an id
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 storage.ID, errors.Wrapf(err, "failed init storage but storage is already created")
} else {
storageDriver.GetStorage().SetStatus(WORK)
MustSaveDriverStorage(storageDriver)
return storage.ID, errors.Wrap(err, "failed init storage but storage is already created")
}
log.Debugf("storage %+v is created", storageDriver)
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")
}
storageDriver := driverNew()
err = storageDriver.Init(ctx, storage)
storagesMap.Store(storage.MountPath, 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)
}
err = initStorage(ctx, storage, 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 {
@ -128,7 +134,7 @@ func DisableStorage(ctx context.Context, id uint) error {
}
// drop the storage in the driver
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
storage.Disabled = true
@ -172,17 +178,10 @@ func UpdateStorage(ctx context.Context, storage model.Storage) error {
if err != nil {
return errors.Wrapf(err, "failed drop storage")
}
err = storageDriver.Init(ctx, storage)
storagesMap.Store(storage.MountPath, 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)
}
return nil
err = initStorage(ctx, storage, storageDriver)
log.Debugf("storage %+v is update", storageDriver)
return err
}
func DeleteStorageById(ctx context.Context, id uint) error {
@ -220,11 +219,11 @@ func MustSaveDriverStorage(driver driver.Driver) {
func saveDriverStorage(driver driver.Driver) error {
storage := driver.GetStorage()
addition := driver.GetAddition()
bytes, err := utils.Json.Marshal(addition)
strs, err := utils.Json.MarshalToString(addition)
if err != nil {
return errors.Wrap(err, "error while marshal addition")
}
storage.Addition = string(bytes)
storage.Addition = strs
err = db.UpdateStorage(storage)
if err != nil {
return errors.WithMessage(err, "failed update storage in database")

View File

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