feat(tasks): group extension folder downloads (#1594)

This commit is contained in:
WuFeng authored and GitHub committed 2026-11-02 15:39:08 +08:00
1 parent fc0a1e0ef9
commit 1e36599d52
84 files changed
+6690 -881

No files matched your search

+1 -1
View File
@@ -63,7 +63,7 @@ func CreateTaskBatch(w http.ResponseWriter, r *http.Request) {
WriteJson(w, model.NewErrorResult("param invalid: reqs", model.CodeInvalidParam))
return
}
taskIds, err := Downloader.CreateDirectBatch(&req)
taskIds, err := Downloader.CreateDirectBatchWithResult(&req)
if err != nil {
WriteJson(w, model.NewErrorResult(err.Error()))
return
+38 -2
View File
@@ -197,9 +197,10 @@ func TestCreateDirectTaskBatch(t *testing.T) {
Req: createReq.Req,
})
}
taskIds := httpRequestCheckOk[[]string](http.MethodPost, "/api/v1/tasks/batch", &base.CreateTaskBatch{
result := httpRequestCheckOk[download.CreateTaskBatchResult](http.MethodPost, "/api/v1/tasks/batch", &base.CreateTaskBatch{
Reqs: reqs,
})
taskIds := result.TaskIDs
if len(taskIds) != len(reqs) {
t.Errorf("CreateDirectTaskBatch() got = %v, want %v", len(taskIds), len(reqs))
}
@@ -220,12 +221,13 @@ func TestCreateDirectTaskBatchWithOpt(t *testing.T) {
}
reqs = append(reqs, item)
}
taskIds := httpRequestCheckOk[[]string](http.MethodPost, "/api/v1/tasks/batch", &base.CreateTaskBatch{
result := httpRequestCheckOk[download.CreateTaskBatchResult](http.MethodPost, "/api/v1/tasks/batch", &base.CreateTaskBatch{
Reqs: reqs,
Opts: &base.Options{
Name: "default_opt.data",
},
})
taskIds := result.TaskIDs
if len(taskIds) != len(reqs) {
t.Errorf("CreateDirectTaskBatch() got = %v, want %v", len(taskIds), len(reqs))
}
@@ -245,6 +247,40 @@ func TestCreateDirectTaskBatchWithOpt(t *testing.T) {
})
}
func TestCreateDirectTaskBatchWithGroup(t *testing.T) {
doTest(func() {
cfg, err := Downloader.GetConfig()
if err != nil {
t.Fatal(err)
}
cfg.MaxRunning = 0
if err := Downloader.PutConfig(cfg); err != nil {
t.Fatal(err)
}
parent := t.TempDir()
result := httpRequestCheckOk[download.CreateTaskBatchResult](http.MethodPost, "/api/v1/tasks/batch", &base.CreateTaskBatch{
Reqs: []*base.CreateTaskBatchItem{{Req: createReq.Req}, {Req: createReq.Req}},
Opts: &base.Options{Path: parent}, Group: true, GroupName: "folder",
})
if result.ParentID == "" || len(result.TaskIDs) != 2 {
t.Fatalf("unexpected group result: %+v", result)
}
all := httpRequestCheckOk[[]map[string]any](http.MethodGet, "/api/v1/tasks", nil)
if len(all) != 2 {
t.Fatalf("expected real tasks only, got %d", len(all))
}
for _, task := range all {
if task["parentId"] != result.ParentID || task["type"] != nil {
t.Fatalf("invalid member: %+v", task)
}
metadata, ok := task["group"].(map[string]any)
if !ok || metadata["path"] != filepath.Join(parent, "folder") || metadata["name"] != "folder" {
t.Fatalf("missing group metadata: %+v", task)
}
}
})
}
func TestPauseAndContinueTask(t *testing.T) {
doTest(func() {
var wg sync.WaitGroup