From 6c89c6c8ae13c615fc13b811edc5b715bd302039 Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Sun, 18 Sep 2022 16:07:32 +0800 Subject: [PATCH] fix: aria2 download magnet link (close #1665) --- internal/aria2/monitor.go | 9 ++++++++- pkg/task/manager.go | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/internal/aria2/monitor.go b/internal/aria2/monitor.go index 4160f8d7..4f11274b 100644 --- a/internal/aria2/monitor.go +++ b/internal/aria2/monitor.go @@ -76,10 +76,15 @@ func (m *Monitor) Update() (bool, error) { } m.retried = 0 if len(info.FollowedBy) != 0 { + log.Debugf("followen by: %+v", info.FollowedBy) gid := info.FollowedBy[0] notify.Signals.Delete(m.tsk.ID) + oldId := m.tsk.ID m.tsk.ID = gid + DownTaskManager.RawTasks().Delete(oldId) + DownTaskManager.RawTasks().Store(m.tsk.ID, m.tsk) notify.Signals.Store(gid, m.c) + return false, nil } // update download status total, err := strconv.ParseUint(info.TotalLength, 10, 64) @@ -120,6 +125,7 @@ func (m *Monitor) Complete() error { } // get files files, err := client.GetFiles(m.tsk.ID) + log.Debugf("files len: %d", len(files)) if err != nil { return errors.Wrapf(err, "failed to get files of %s", m.tsk.ID) } @@ -134,7 +140,8 @@ func (m *Monitor) Complete() error { log.Errorf("failed to remove aria2 temp dir: %+v", err.Error()) } }() - for _, file := range files { + for i, _ := range files { + file := files[i] TransferTaskManager.Submit(task.WithCancelCtx(&task.Task[uint64]{ Name: fmt.Sprintf("transfer %s to [%s](%s)", file.Path, storage.GetStorage().MountPath, dstDirActualPath), Func: func(tsk *task.Task[uint64]) error { diff --git a/pkg/task/manager.go b/pkg/task/manager.go index 68092fef..f70ba762 100644 --- a/pkg/task/manager.go +++ b/pkg/task/manager.go @@ -122,6 +122,10 @@ func (tm *Manager[K]) ClearDone() { tm.RemoveByStates(SUCCEEDED, CANCELED, ERRORED) } +func (tm *Manager[K]) RawTasks() *generic_sync.MapOf[K, *Task[K]] { + return &tm.tasks +} + func NewTaskManager[K comparable](maxWorker int, updateID ...func(*K)) *Manager[K] { tm := &Manager[K]{ tasks: generic_sync.MapOf[K, *Task[K]]{},