Skip to content

Commit 4532b42

Browse files
committed
feat(offline-download): support for Thunder Expert driver
1 parent 11b6a60 commit 4532b42

File tree

4 files changed

+53
-47
lines changed

4 files changed

+53
-47
lines changed

internal/offline_download/thunder/thunder.go

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ func (t *Thunder) IsReady() bool {
4545
if err != nil {
4646
return false
4747
}
48-
if _, ok := storage.(*thunder.Thunder); !ok {
49-
return false
48+
if _, ok := storage.(*thunder.Thunder); ok {
49+
return true
50+
}
51+
if _, ok := storage.(*thunder.ThunderExpert); ok {
52+
return true
5053
}
51-
return true
54+
return false
5255
}
5356

5457
func (t *Thunder) AddURL(args *tool.AddUrlArgs) (string, error) {
@@ -58,11 +61,6 @@ func (t *Thunder) AddURL(args *tool.AddUrlArgs) (string, error) {
5861
if err != nil {
5962
return "", err
6063
}
61-
thunderDriver, ok := storage.(*thunder.Thunder)
62-
if !ok {
63-
return "", fmt.Errorf("unsupported storage driver for offline download, only Thunder is supported")
64-
}
65-
6664
ctx := context.Background()
6765

6866
if err := op.MakeDir(ctx, storage, actualPath); err != nil {
@@ -74,7 +72,15 @@ func (t *Thunder) AddURL(args *tool.AddUrlArgs) (string, error) {
7472
return "", err
7573
}
7674

77-
task, err := thunderDriver.OfflineDownload(ctx, args.Url, parentDir, "")
75+
var task *thunder.OfflineTask
76+
if thunderDriver, ok := storage.(*thunder.Thunder); ok {
77+
task, err = thunderDriver.OfflineDownload(ctx, args.Url, parentDir, "")
78+
} else if expertDriver, ok := storage.(*thunder.ThunderExpert); ok {
79+
task, err = expertDriver.OfflineDownload(ctx, args.Url, parentDir, "")
80+
} else {
81+
return "", fmt.Errorf("unsupported storage driver for offline download, only Thunder or Thunder Expert is supported")
82+
}
83+
7884
if err != nil {
7985
return "", fmt.Errorf("failed to add offline download task: %w", err)
8086
}
@@ -87,28 +93,29 @@ func (t *Thunder) Remove(task *tool.DownloadTask) error {
8793
if err != nil {
8894
return err
8995
}
90-
thunderDriver, ok := storage.(*thunder.Thunder)
91-
if !ok {
92-
return fmt.Errorf("unsupported storage driver for offline download, only Thunder is supported")
96+
if thunderDriver, ok := storage.(*thunder.Thunder); ok {
97+
err = thunderDriver.DeleteOfflineTasks(context.Background(), []string{task.GID}, false)
98+
} else if expertDriver, ok := storage.(*thunder.ThunderExpert); ok {
99+
err = expertDriver.DeleteOfflineTasks(context.Background(), []string{task.GID}, false)
100+
} else {
101+
return fmt.Errorf("unsupported storage driver for offline download, only Thunder or Thunder Expert is supported")
93102
}
94-
ctx := context.Background()
95-
err = thunderDriver.DeleteOfflineTasks(ctx, []string{task.GID}, false)
96-
if err != nil {
97-
return err
98-
}
99-
return nil
103+
return err
100104
}
101105

102106
func (t *Thunder) Status(task *tool.DownloadTask) (*tool.Status, error) {
103107
storage, _, err := op.GetStorageAndActualPath(task.TempDir)
104108
if err != nil {
105109
return nil, err
106110
}
107-
thunderDriver, ok := storage.(*thunder.Thunder)
108-
if !ok {
109-
return nil, fmt.Errorf("unsupported storage driver for offline download, only Thunder is supported")
111+
var tasks []thunder.OfflineTask
112+
if thunderDriver, ok := storage.(*thunder.Thunder); ok {
113+
tasks, err = t.GetTasks(thunderDriver)
114+
} else if expertDriver, ok := storage.(*thunder.ThunderExpert); ok {
115+
tasks, err = t.GetTasks(expertDriver)
116+
} else {
117+
return nil, fmt.Errorf("unsupported storage driver for offline download, only Thunder or Thunder Expert is supported")
110118
}
111-
tasks, err := t.GetTasks(thunderDriver)
112119
if err != nil {
113120
return nil, err
114121
}

internal/offline_download/thunder/util.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package thunder
22

33
import (
44
"context"
5+
"github.com/alist-org/alist/v3/internal/driver"
56
"time"
67

78
"github.com/Xhofe/go-cache"
@@ -13,17 +14,22 @@ import (
1314
var taskCache = cache.NewMemCache(cache.WithShards[[]thunder.OfflineTask](16))
1415
var taskG singleflight.Group[[]thunder.OfflineTask]
1516

16-
func (t *Thunder) GetTasks(thunderDriver *thunder.Thunder) ([]thunder.OfflineTask, error) {
17-
key := op.Key(thunderDriver, "/drive/v1/task")
17+
func (t *Thunder) GetTasks(storage driver.Driver) ([]thunder.OfflineTask, error) {
18+
key := op.Key(storage, "/drive/v1/task")
1819
if !t.refreshTaskCache {
1920
if tasks, ok := taskCache.Get(key); ok {
2021
return tasks, nil
2122
}
2223
}
2324
t.refreshTaskCache = false
2425
tasks, err, _ := taskG.Do(key, func() ([]thunder.OfflineTask, error) {
25-
ctx := context.Background()
26-
tasks, err := thunderDriver.OfflineList(ctx, "")
26+
var tasks []thunder.OfflineTask
27+
var err error
28+
if thunderDriver, ok := storage.(*thunder.Thunder); ok {
29+
tasks, err = thunderDriver.OfflineList(context.Background(), "")
30+
} else if expertDriver, ok := storage.(*thunder.ThunderExpert); ok {
31+
tasks, err = expertDriver.OfflineList(context.Background(), "")
32+
}
2733
if err != nil {
2834
return nil, err
2935
}

internal/offline_download/tool/add.go

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ package tool
22

33
import (
44
"context"
5-
_115 "github.com/alist-org/alist/v3/drivers/115"
6-
"github.com/alist-org/alist/v3/drivers/pikpak"
7-
"github.com/alist-org/alist/v3/drivers/thunder"
85
"github.com/alist-org/alist/v3/internal/driver"
96
"github.com/alist-org/alist/v3/internal/model"
107
"github.com/alist-org/alist/v3/internal/setting"
@@ -81,24 +78,18 @@ func AddURL(ctx context.Context, args *AddURLArgs) (task.TaskExtensionInfo, erro
8178
deletePolicy := args.DeletePolicy
8279

8380
// 如果当前 storage 是对应网盘,则直接下载到目标路径,无需转存
84-
switch args.Tool {
85-
case "115 Cloud":
86-
if _, ok := storage.(*_115.Pan115); ok {
87-
tempDir = args.DstDirPath
88-
} else {
89-
tempDir = filepath.Join(setting.GetStr(conf.Pan115TempDir), uid)
90-
}
91-
case "PikPak":
92-
if _, ok := storage.(*pikpak.PikPak); ok {
93-
tempDir = args.DstDirPath
94-
} else {
95-
tempDir = filepath.Join(setting.GetStr(conf.PikPakTempDir), uid)
96-
}
97-
case "Thunder":
98-
if _, ok := storage.(*thunder.Thunder); ok {
81+
tempDirConfMap := map[string]string{
82+
"115 Cloud": conf.Pan115TempDir,
83+
"PikPak": conf.PikPakTempDir,
84+
"Thunder": conf.ThunderTempDir,
85+
}
86+
if tempDirConf, ok := tempDirConfMap[args.Tool]; ok {
87+
tempDir = setting.GetStr(tempDirConf)
88+
tempDirStorage, _, _ := op.GetStorageAndActualPath(tempDir)
89+
if storage == tempDirStorage {
9990
tempDir = args.DstDirPath
10091
} else {
101-
tempDir = filepath.Join(setting.GetStr(conf.ThunderTempDir), uid)
92+
tempDir = filepath.Join(tempDir, uid)
10293
}
10394
}
10495

server/handles/offline_download.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,10 @@ func SetThunder(c *gin.Context) {
216216
return
217217
}
218218
if _, ok := storage.(*thunder.Thunder); !ok {
219-
common.ErrorStrResp(c, "unsupported storage driver for offline download, only Thunder is supported", 400)
220-
return
219+
if _, ok := storage.(*thunder.ThunderExpert); !ok {
220+
common.ErrorStrResp(c, "unsupported storage driver for offline download, only Thunder or Thunder Expert is supported", 400)
221+
return
222+
}
221223
}
222224
}
223225
items := []model.SettingItem{

0 commit comments

Comments
 (0)