From cae0abcd388a3c44df581a4201310bbd1a28e64b Mon Sep 17 00:00:00 2001 From: Roxym3 <2493889475@qq.com> Date: Wed, 18 Mar 2026 15:24:22 +0800 Subject: [PATCH] fix: add IsCreated flag to reliably track task creation state, fix #1286 --- pkg/download/downloader.go | 9 ++++----- pkg/download/model.go | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/download/downloader.go b/pkg/download/downloader.go index 6dbf9169c..96c748d69 100644 --- a/pkg/download/downloader.go +++ b/pkg/download/downloader.go @@ -1186,7 +1186,7 @@ func (d *Downloader) statusMut(task *Task, fn func() (bool, error)) (bool, error } func (d *Downloader) doStart(task *Task) (err error) { - var isCreate bool + var needCreate bool isReturn, err := d.statusMut(task, func() (isReturn bool, err error) { if task.Status == base.DownloadStatusRunning || task.Status == base.DownloadStatusDone { isReturn = true @@ -1198,7 +1198,7 @@ func (d *Downloader) doStart(task *Task) (err error) { d.Logger.Error().Stack().Err(err).Msgf("restore fetcher failed, task id: %s", task.ID) return } - isCreate = task.Status == base.DownloadStatusReady + needCreate = !task.IsCreated task.updateStatus(base.DownloadStatusRunning) return @@ -1224,7 +1224,7 @@ func (d *Downloader) doStart(task *Task) (err error) { task.Meta.Res = task.fetcher.Meta().Res } - if isCreate { + if needCreate { if task.fetcherManager.AutoRename() { d.checkDuplicateLock.Lock() defer d.checkDuplicateLock.Unlock() @@ -1248,10 +1248,9 @@ func (d *Downloader) doStart(task *Task) (err error) { task.Meta.Opts.Name = newName } } - + task.IsCreated = true task.Meta.Res.CalcSize(task.Meta.Opts.SelectFiles) } - task.Progress.Speed = 0 task.timer.Start() if err := task.fetcher.Start(); err != nil { diff --git a/pkg/download/model.go b/pkg/download/model.go index c3126c1ce..f45397a9f 100644 --- a/pkg/download/model.go +++ b/pkg/download/model.go @@ -26,6 +26,7 @@ type Task struct { Status base.Status `json:"status"` Uploading bool `json:"uploading"` Progress *Progress `json:"progress"` + IsCreated bool `json:"isCreated"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` @@ -48,6 +49,7 @@ func NewTask() *Task { Status: base.DownloadStatusReady, CreatedAt: time.Now(), UpdatedAt: time.Now(), + IsCreated: false, } }