From 33bae52fa1057bd3a5201e906087fa47cde945da Mon Sep 17 00:00:00 2001 From: foxxorcat <95907542+foxxorcat@users.noreply.github.com> Date: Tue, 13 Dec 2022 18:03:30 +0800 Subject: [PATCH] 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 --- drivers/115/driver.go | 9 +--- drivers/115/meta.go | 10 ++--- drivers/123/driver.go | 9 +--- drivers/123/meta.go | 8 ++-- drivers/139/driver.go | 12 ++---- drivers/139/meta.go | 2 +- drivers/189/driver.go | 9 +--- drivers/189/meta.go | 2 +- drivers/189pc/driver.go | 9 +--- drivers/189pc/meta.go | 2 +- drivers/alist_v2/driver.go | 12 ++---- drivers/alist_v2/meta.go | 2 +- drivers/alist_v3/driver.go | 12 ++---- drivers/alist_v3/meta.go | 2 +- drivers/aliyundrive/driver.go | 11 ++--- drivers/aliyundrive/meta.go | 8 ++-- drivers/aliyundrive_share/driver.go | 11 ++--- drivers/aliyundrive_share/meta.go | 2 +- drivers/baidu_netdisk/driver.go | 9 +--- drivers/baidu_netdisk/meta.go | 8 ++-- drivers/baidu_photo/driver.go | 9 +--- drivers/baidu_photo/meta.go | 2 +- drivers/ftp/driver.go | 10 +---- drivers/ftp/meta.go | 8 ++-- drivers/google_drive/driver.go | 9 +--- drivers/google_drive/meta.go | 8 ++-- drivers/google_photo/driver.go | 9 +--- drivers/google_photo/meta.go | 8 ++-- drivers/lanzou/driver.go | 10 +---- drivers/lanzou/meta.go | 2 +- drivers/local/driver.go | 9 +--- drivers/local/meta.go | 8 ++-- drivers/mediatrack/driver.go | 11 ++--- drivers/mediatrack/meta.go | 2 +- drivers/mega/driver.go | 10 +---- drivers/mega/meta.go | 2 +- drivers/onedrive/driver.go | 9 +--- drivers/onedrive/meta.go | 8 ++-- drivers/pikpak/driver.go | 9 +--- drivers/pikpak/meta.go | 8 ++-- drivers/quark/driver.go | 11 ++--- drivers/quark/meta.go | 8 ++-- drivers/s3/driver.go | 12 ++---- drivers/s3/meta.go | 8 ++-- drivers/sftp/driver.go | 9 +--- drivers/sftp/meta.go | 8 ++-- drivers/smb/driver.go | 11 ++--- drivers/smb/meta.go | 2 +- drivers/teambition/driver.go | 12 ++---- drivers/teambition/meta.go | 8 ++-- drivers/template/driver.go | 12 ++---- drivers/template/meta.go | 2 +- drivers/thunder/driver.go | 18 ++------ drivers/thunder/meta.go | 4 +- drivers/uss/driver.go | 9 +--- drivers/uss/meta.go | 8 ++-- drivers/virtual/driver.go | 10 +---- drivers/virtual/meta.go | 8 ++-- drivers/webdav/driver.go | 11 ++--- drivers/webdav/meta.go | 8 ++-- drivers/yandex_disk/driver.go | 9 +--- drivers/yandex_disk/meta.go | 8 ++-- internal/driver/driver.go | 6 +-- internal/model/storage.go | 4 ++ internal/op/driver.go | 11 +++-- internal/op/storage.go | 67 ++++++++++++++--------------- internal/search/util.go | 2 +- 67 files changed, 194 insertions(+), 392 deletions(-) diff --git a/drivers/115/driver.go b/drivers/115/driver.go index 00b095bf..18e08072 100644 --- a/drivers/115/driver.go +++ b/drivers/115/driver.go @@ -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() } diff --git a/drivers/115/meta.go b/drivers/115/meta.go index cdb7b368..c3092bfb 100644 --- a/drivers/115/meta.go +++ b/drivers/115/meta.go @@ -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{} + }) } diff --git a/drivers/123/driver.go b/drivers/123/driver.go index 8681e4fc..53799cb8 100644 --- a/drivers/123/driver.go +++ b/drivers/123/driver.go @@ -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() } diff --git a/drivers/123/meta.go b/drivers/123/meta.go index 02d11516..e4424795 100644 --- a/drivers/123/meta.go +++ b/drivers/123/meta.go @@ -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{} + }) } diff --git a/drivers/139/driver.go b/drivers/139/driver.go index 58a5a4dc..82a85ce0 100644 --- a/drivers/139/driver.go +++ b/drivers/139/driver.go @@ -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, diff --git a/drivers/139/meta.go b/drivers/139/meta.go index d1f4c2e1..f9e7f122 100644 --- a/drivers/139/meta.go +++ b/drivers/139/meta.go @@ -19,7 +19,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &Yun139{} }) } diff --git a/drivers/189/driver.go b/drivers/189/driver.go index 34f0568b..68b392de 100644 --- a/drivers/189/driver.go +++ b/drivers/189/driver.go @@ -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). diff --git a/drivers/189/meta.go b/drivers/189/meta.go index 0ac607d0..dd781816 100644 --- a/drivers/189/meta.go +++ b/drivers/189/meta.go @@ -18,7 +18,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &Cloud189{} }) } diff --git a/drivers/189pc/driver.go b/drivers/189pc/driver.go index c3bb08d6..7297057a 100644 --- a/drivers/189pc/driver.go +++ b/drivers/189pc/driver.go @@ -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 = "" diff --git a/drivers/189pc/meta.go b/drivers/189pc/meta.go index af0b7022..c270041c 100644 --- a/drivers/189pc/meta.go +++ b/drivers/189pc/meta.go @@ -24,7 +24,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &Yun189PC{} }) } diff --git a/drivers/alist_v2/driver.go b/drivers/alist_v2/driver.go index 243626e8..1e9117ca 100644 --- a/drivers/alist_v2/driver.go +++ b/drivers/alist_v2/driver.go @@ -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 { diff --git a/drivers/alist_v2/meta.go b/drivers/alist_v2/meta.go index 209fc25f..30dd8de2 100644 --- a/drivers/alist_v2/meta.go +++ b/drivers/alist_v2/meta.go @@ -20,7 +20,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &AListV2{} }) } diff --git a/drivers/alist_v3/driver.go b/drivers/alist_v3/driver.go index 8fabd059..8077f958 100644 --- a/drivers/alist_v3/driver.go +++ b/drivers/alist_v3/driver.go @@ -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 { diff --git a/drivers/alist_v3/meta.go b/drivers/alist_v3/meta.go index 7a6a6988..45d8a482 100644 --- a/drivers/alist_v3/meta.go +++ b/drivers/alist_v3/meta.go @@ -19,7 +19,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &AListV3{} }) } diff --git a/drivers/aliyundrive/driver.go b/drivers/aliyundrive/driver.go index 687b9dd4..34a58beb 100644 --- a/drivers/aliyundrive/driver.go +++ b/drivers/aliyundrive/driver.go @@ -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 } diff --git a/drivers/aliyundrive/meta.go b/drivers/aliyundrive/meta.go index 403e62f5..93d63282 100644 --- a/drivers/aliyundrive/meta.go +++ b/drivers/aliyundrive/meta.go @@ -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{} + }) } diff --git a/drivers/aliyundrive_share/driver.go b/drivers/aliyundrive_share/driver.go index bb830446..d0902196 100644 --- a/drivers/aliyundrive_share/driver.go +++ b/drivers/aliyundrive_share/driver.go @@ -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 } diff --git a/drivers/aliyundrive_share/meta.go b/drivers/aliyundrive_share/meta.go index 755305b5..acbd6c9b 100644 --- a/drivers/aliyundrive_share/meta.go +++ b/drivers/aliyundrive_share/meta.go @@ -23,7 +23,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &AliyundriveShare{} }) } diff --git a/drivers/baidu_netdisk/driver.go b/drivers/baidu_netdisk/driver.go index 3f3f3263..be4e8d39 100644 --- a/drivers/baidu_netdisk/driver.go +++ b/drivers/baidu_netdisk/driver.go @@ -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() } diff --git a/drivers/baidu_netdisk/meta.go b/drivers/baidu_netdisk/meta.go index e5db359a..9feca299 100644 --- a/drivers/baidu_netdisk/meta.go +++ b/drivers/baidu_netdisk/meta.go @@ -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{} + }) } diff --git a/drivers/baidu_photo/driver.go b/drivers/baidu_photo/driver.go index a573e8b9..c9c85f27 100644 --- a/drivers/baidu_photo/driver.go +++ b/drivers/baidu_photo/driver.go @@ -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() } diff --git a/drivers/baidu_photo/meta.go b/drivers/baidu_photo/meta.go index a2364c37..5c824229 100644 --- a/drivers/baidu_photo/meta.go +++ b/drivers/baidu_photo/meta.go @@ -24,7 +24,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &BaiduPhoto{} }) } diff --git a/drivers/ftp/driver.go b/drivers/ftp/driver.go index 72bde4f0..1e799260 100644 --- a/drivers/ftp/driver.go +++ b/drivers/ftp/driver.go @@ -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() } diff --git a/drivers/ftp/meta.go b/drivers/ftp/meta.go index c4694c5e..61d9d4a8 100644 --- a/drivers/ftp/meta.go +++ b/drivers/ftp/meta.go @@ -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{} + }) } diff --git a/drivers/google_drive/driver.go b/drivers/google_drive/driver.go index 867e9592..c8678db0 100644 --- a/drivers/google_drive/driver.go +++ b/drivers/google_drive/driver.go @@ -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 } diff --git a/drivers/google_drive/meta.go b/drivers/google_drive/meta.go index 2da1ef49..b0ed3084 100644 --- a/drivers/google_drive/meta.go +++ b/drivers/google_drive/meta.go @@ -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{} + }) } diff --git a/drivers/google_photo/driver.go b/drivers/google_photo/driver.go index 8606e7dd..40abeaf5 100644 --- a/drivers/google_photo/driver.go +++ b/drivers/google_photo/driver.go @@ -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() } diff --git a/drivers/google_photo/meta.go b/drivers/google_photo/meta.go index f6ee7402..cc5f1272 100644 --- a/drivers/google_photo/meta.go +++ b/drivers/google_photo/meta.go @@ -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{} + }) } diff --git a/drivers/lanzou/driver.go b/drivers/lanzou/driver.go index 8c2eed76..aaedaf69 100644 --- a/drivers/lanzou/driver.go +++ b/drivers/lanzou/driver.go @@ -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" diff --git a/drivers/lanzou/meta.go b/drivers/lanzou/meta.go index 843c338f..8b2267e9 100644 --- a/drivers/lanzou/meta.go +++ b/drivers/lanzou/meta.go @@ -25,7 +25,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &LanZou{} }) } diff --git a/drivers/local/driver.go b/drivers/local/driver.go index 229efffc..a0f9d721 100644 --- a/drivers/local/driver.go +++ b/drivers/local/driver.go @@ -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) { diff --git a/drivers/local/meta.go b/drivers/local/meta.go index 372bdc0f..94433455 100644 --- a/drivers/local/meta.go +++ b/drivers/local/meta.go @@ -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{} + }) } diff --git a/drivers/mediatrack/driver.go b/drivers/mediatrack/driver.go index b1557d2d..3a7188b7 100644 --- a/drivers/mediatrack/driver.go +++ b/drivers/mediatrack/driver.go @@ -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 } diff --git a/drivers/mediatrack/meta.go b/drivers/mediatrack/meta.go index c8e9b229..47f112c3 100644 --- a/drivers/mediatrack/meta.go +++ b/drivers/mediatrack/meta.go @@ -18,7 +18,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &MediaTrack{} }) } diff --git a/drivers/mega/driver.go b/drivers/mega/driver.go index 745c39f8..a177133a 100644 --- a/drivers/mega/driver.go +++ b/drivers/mega/driver.go @@ -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) } diff --git a/drivers/mega/meta.go b/drivers/mega/meta.go index d66ed198..77e768f0 100644 --- a/drivers/mega/meta.go +++ b/drivers/mega/meta.go @@ -20,7 +20,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &Mega{} }) } diff --git a/drivers/onedrive/driver.go b/drivers/onedrive/driver.go index 8ade7360..899b760d 100644 --- a/drivers/onedrive/driver.go +++ b/drivers/onedrive/driver.go @@ -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 } diff --git a/drivers/onedrive/meta.go b/drivers/onedrive/meta.go index 86125844..4e432d36 100644 --- a/drivers/onedrive/meta.go +++ b/drivers/onedrive/meta.go @@ -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{} + }) } diff --git a/drivers/pikpak/driver.go b/drivers/pikpak/driver.go index 2769c19d..f08a4067 100644 --- a/drivers/pikpak/driver.go +++ b/drivers/pikpak/driver.go @@ -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() } diff --git a/drivers/pikpak/meta.go b/drivers/pikpak/meta.go index dc9712ca..683f0ce8 100644 --- a/drivers/pikpak/meta.go +++ b/drivers/pikpak/meta.go @@ -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{} + }) } diff --git a/drivers/quark/driver.go b/drivers/quark/driver.go index 59a3dc1d..36194149 100644 --- a/drivers/quark/driver.go +++ b/drivers/quark/driver.go @@ -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 } diff --git a/drivers/quark/meta.go b/drivers/quark/meta.go index 31ed0eb6..1263f12d 100644 --- a/drivers/quark/meta.go +++ b/drivers/quark/meta.go @@ -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{} + }) } diff --git a/drivers/s3/driver.go b/drivers/s3/driver.go index 28ef5913..e819a375 100644 --- a/drivers/s3/driver.go +++ b/drivers/s3/driver.go @@ -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 } diff --git a/drivers/s3/meta.go b/drivers/s3/meta.go index 45029ee8..13b56fde 100644 --- a/drivers/s3/meta.go +++ b/drivers/s3/meta.go @@ -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{} + }) } diff --git a/drivers/sftp/driver.go b/drivers/sftp/driver.go index 91b00fc9..7cd4e2a2 100644 --- a/drivers/sftp/driver.go +++ b/drivers/sftp/driver.go @@ -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() } diff --git a/drivers/sftp/meta.go b/drivers/sftp/meta.go index b0211b61..d77398f3 100644 --- a/drivers/sftp/meta.go +++ b/drivers/sftp/meta.go @@ -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{} + }) } diff --git a/drivers/smb/driver.go b/drivers/smb/driver.go index 7a6d3da9..c8bef00a 100644 --- a/drivers/smb/driver.go +++ b/drivers/smb/driver.go @@ -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() diff --git a/drivers/smb/meta.go b/drivers/smb/meta.go index 35d88911..3386db2f 100644 --- a/drivers/smb/meta.go +++ b/drivers/smb/meta.go @@ -22,7 +22,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &SMB{} }) } diff --git a/drivers/teambition/driver.go b/drivers/teambition/driver.go index 9ac2a7ac..041e7cb3 100644 --- a/drivers/teambition/driver.go +++ b/drivers/teambition/driver.go @@ -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 } diff --git a/drivers/teambition/meta.go b/drivers/teambition/meta.go index 2b4a103b..cbba4f1e 100644 --- a/drivers/teambition/meta.go +++ b/drivers/teambition/meta.go @@ -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{} + }) } diff --git a/drivers/template/driver.go b/drivers/template/driver.go index 88f0f04d..b1a0d673 100644 --- a/drivers/template/driver.go +++ b/drivers/template/driver.go @@ -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 { diff --git a/drivers/template/meta.go b/drivers/template/meta.go index ded19705..15780ac0 100644 --- a/drivers/template/meta.go +++ b/drivers/template/meta.go @@ -25,7 +25,7 @@ var config = driver.Config{ } func init() { - op.RegisterDriver(config, func() driver.Driver { + op.RegisterDriver(func() driver.Driver { return &Template{} }) } diff --git a/drivers/thunder/driver.go b/drivers/thunder/driver.go index 797dd7fe..12dd8904 100644 --- a/drivers/thunder/driver.go +++ b/drivers/thunder/driver.go @@ -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() { diff --git a/drivers/thunder/meta.go b/drivers/thunder/meta.go index b24bb8b3..3696637b 100644 --- a/drivers/thunder/meta.go +++ b/drivers/thunder/meta.go @@ -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{} }) } diff --git a/drivers/uss/driver.go b/drivers/uss/driver.go index 1edfb62e..9f12ca3e 100644 --- a/drivers/uss/driver.go +++ b/drivers/uss/driver.go @@ -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, diff --git a/drivers/uss/meta.go b/drivers/uss/meta.go index 6f9d1e27..2a152899 100644 --- a/drivers/uss/meta.go +++ b/drivers/uss/meta.go @@ -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{} + }) } diff --git a/drivers/virtual/driver.go b/drivers/virtual/driver.go index cf78c0a8..c63b7a63 100644 --- a/drivers/virtual/driver.go +++ b/drivers/virtual/driver.go @@ -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) { diff --git a/drivers/virtual/meta.go b/drivers/virtual/meta.go index 0ecafb1f..cb24b029 100644 --- a/drivers/virtual/meta.go +++ b/drivers/virtual/meta.go @@ -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{} + }) } diff --git a/drivers/webdav/driver.go b/drivers/webdav/driver.go index ce47b0fa..761fca52 100644 --- a/drivers/webdav/driver.go +++ b/drivers/webdav/driver.go @@ -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() { diff --git a/drivers/webdav/meta.go b/drivers/webdav/meta.go index 806f582e..d66499bc 100644 --- a/drivers/webdav/meta.go +++ b/drivers/webdav/meta.go @@ -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{} + }) } diff --git a/drivers/yandex_disk/driver.go b/drivers/yandex_disk/driver.go index 77f9f60f..ef12516f 100644 --- a/drivers/yandex_disk/driver.go +++ b/drivers/yandex_disk/driver.go @@ -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() } diff --git a/drivers/yandex_disk/meta.go b/drivers/yandex_disk/meta.go index 0312a679..0a1fabdc 100644 --- a/drivers/yandex_disk/meta.go +++ b/drivers/yandex_disk/meta.go @@ -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{} + }) } diff --git a/internal/driver/driver.go b/internal/driver/driver.go index 933ee1b5..d4e4ea62 100644 --- a/internal/driver/driver.go +++ b/internal/driver/driver.go @@ -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 } diff --git a/internal/model/storage.go b/internal/model/storage.go index 2451a89c..2be5fa33 100644 --- a/internal/model/storage.go +++ b/internal/model/storage.go @@ -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 } diff --git a/internal/op/driver.go b/internal/op/driver.go index 919c154f..38946690 100644 --- a/internal/op/driver.go +++ b/internal/op/driver.go @@ -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{ diff --git a/internal/op/storage.go b/internal/op/storage.go index d982245f..e3e45022 100644 --- a/internal/op/storage.go +++ b/internal/op/storage.go @@ -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") diff --git a/internal/search/util.go b/internal/search/util.go index 883db4b3..709dab29 100644 --- a/internal/search/util.go +++ b/internal/search/util.go @@ -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"