From 7a6c84a115cf73563f0daabf729309e765471722 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Sun, 9 Feb 2020 10:52:06 +0800 Subject: [PATCH] Fix: unsafe pointer while initializing unfinished aria2 task --- pkg/aria2/aria2.go | 5 +++-- pkg/serializer/aria2.go | 43 ++++++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/pkg/aria2/aria2.go b/pkg/aria2/aria2.go index 5f31967..e5c7595 100644 --- a/pkg/aria2/aria2.go +++ b/pkg/aria2/aria2.go @@ -125,9 +125,10 @@ func Init() { // 从数据库中读取未完成任务,创建监控 unfinished := model.GetDownloadsByStatus(Ready, Paused, Downloading) - for _, task := range unfinished { + + for i := 0; i < len(unfinished); i++ { // 创建任务监控 - NewMonitor(&task) + NewMonitor(&unfinished[i]) } } diff --git a/pkg/serializer/aria2.go b/pkg/serializer/aria2.go index a540af5..a366cad 100644 --- a/pkg/serializer/aria2.go +++ b/pkg/serializer/aria2.go @@ -8,21 +8,23 @@ import ( // DownloadListResponse 下载列表响应条目 type DownloadListResponse struct { - UpdateTime int64 `json:"update"` - Name string `json:"name"` - Status int `json:"status"` - UserID uint `json:"uid"` - Error string `json:"error"` - Dst string `json:"dst"` - Total uint64 `json:"total"` - Downloaded uint64 `json:"downloaded"` - Speed int `json:"speed"` - Info rpc.StatusInfo `json:"info"` + UpdateTime int64 `json:"update"` + UpdateInterval int `json:"interval"` + Name string `json:"name"` + Status int `json:"status"` + UserID uint `json:"uid"` + Error string `json:"error"` + Dst string `json:"dst"` + Total uint64 `json:"total"` + Downloaded uint64 `json:"downloaded"` + Speed int `json:"speed"` + Info rpc.StatusInfo `json:"info"` } // BuildDownloadingResponse 构建正在下载的列表响应 func BuildDownloadingResponse(tasks []model.Download) Response { resp := make([]DownloadListResponse, 0, len(tasks)) + interval := model.GetIntSetting("aria2_interval", 10) for i := 0; i < len(tasks); i++ { fileName := "" @@ -37,16 +39,17 @@ func BuildDownloadingResponse(tasks []model.Download) Response { } resp = append(resp, DownloadListResponse{ - UpdateTime: tasks[i].UpdatedAt.Unix(), - Name: fileName, - Status: tasks[i].Status, - UserID: tasks[i].UserID, - Error: tasks[i].Error, - Dst: tasks[i].Dst, - Total: tasks[i].TotalSize, - Downloaded: tasks[i].DownloadedSize, - Speed: tasks[i].Speed, - Info: tasks[i].StatusInfo, + UpdateTime: tasks[i].UpdatedAt.Unix(), + UpdateInterval: interval, + Name: fileName, + Status: tasks[i].Status, + UserID: tasks[i].UserID, + Error: tasks[i].Error, + Dst: tasks[i].Dst, + Total: tasks[i].TotalSize, + Downloaded: tasks[i].DownloadedSize, + Speed: tasks[i].Speed, + Info: tasks[i].StatusInfo, }) }