From f0a68236a8a724a17a16486aed817f18d93e347e Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Mon, 23 Nov 2020 19:24:56 +0800 Subject: [PATCH] Feat: delete aria2 record in client side (#335) --- assets | 2 +- models/download.go | 5 +++++ models/download_test.go | 16 ++++++++++++++++ pkg/serializer/aria2.go | 2 ++ routers/controllers/aria2.go | 2 +- routers/router.go | 2 +- service/aria2/manage.go | 10 +++++++--- 7 files changed, 33 insertions(+), 6 deletions(-) diff --git a/assets b/assets index 253bf0c..1a2f8ce 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 253bf0c5a064345af2ba4e5c3df68978de49755b +Subproject commit 1a2f8ce8ca7346b4b1822a7f4dd84bef70db71de diff --git a/models/download.go b/models/download.go index e73ae5f..edafb1c 100644 --- a/models/download.go +++ b/models/download.go @@ -109,3 +109,8 @@ func (task *Download) GetOwner() *User { } return task.User } + +// Delete 删除离线下载记录 +func (download *Download) Delete() error { + return DB.Model(download).Delete(download).Error +} diff --git a/models/download_test.go b/models/download_test.go index 7be81d0..9d9cd34 100644 --- a/models/download_test.go +++ b/models/download_test.go @@ -161,3 +161,19 @@ func TestGetDownloadsByStatusAndUser(t *testing.T) { asserts.Len(res, 2) } } + +func TestDownload_Delete(t *testing.T) { + asserts := assert.New(t) + share := Download{} + + { + mock.ExpectBegin() + mock.ExpectExec("UPDATE(.+)"). + WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectCommit() + err := share.Delete() + asserts.NoError(mock.ExpectationsWereMet()) + asserts.NoError(err) + } + +} diff --git a/pkg/serializer/aria2.go b/pkg/serializer/aria2.go index 61afafa..d9eea54 100644 --- a/pkg/serializer/aria2.go +++ b/pkg/serializer/aria2.go @@ -23,6 +23,7 @@ type DownloadListResponse struct { // FinishedListResponse 已完成任务条目 type FinishedListResponse struct { Name string `json:"name"` + GID string `json:"gid"` Status int `json:"status"` Dst string `json:"dst"` Error string `json:"error"` @@ -51,6 +52,7 @@ func BuildFinishedListResponse(tasks []model.Download) Response { download := FinishedListResponse{ Name: fileName, + GID: tasks[i].GID, Status: tasks[i].Status, Error: tasks[i].Error, Dst: tasks[i].Dst, diff --git a/routers/controllers/aria2.go b/routers/controllers/aria2.go index 7abe444..b2bc6d6 100644 --- a/routers/controllers/aria2.go +++ b/routers/controllers/aria2.go @@ -63,7 +63,7 @@ func AddAria2Torrent(c *gin.Context) { } } -// CancelAria2Download 取消aria2离线下载任务 +// CancelAria2Download 取消或删除aria2离线下载任务 func CancelAria2Download(c *gin.Context) { var selectService aria2.DownloadTaskService if err := c.ShouldBindUri(&selectService); err == nil { diff --git a/routers/router.go b/routers/router.go index 73243f5..baf5253 100644 --- a/routers/router.go +++ b/routers/router.go @@ -485,7 +485,7 @@ func InitMasterRouter() *gin.Engine { aria2.POST("torrent/:id", middleware.HashID(hashid.FileID), controllers.AddAria2Torrent) // 重新选择要下载的文件 aria2.PUT("select/:gid", controllers.SelectAria2File) - // 取消下载任务 + // 取消或删除下载任务 aria2.DELETE("task/:gid", controllers.CancelAria2Download) // 获取正在下载中的任务 aria2.GET("downloading", controllers.ListDownloading) diff --git a/service/aria2/manage.go b/service/aria2/manage.go index 1da3e05..d93bbca 100644 --- a/service/aria2/manage.go +++ b/service/aria2/manage.go @@ -36,7 +36,7 @@ func (service *DownloadListService) Downloading(c *gin.Context, user *model.User return serializer.BuildDownloadingResponse(downloads) } -// Delete 取消下载任务 +// Delete 取消或删除下载任务 func (service *DownloadTaskService) Delete(c *gin.Context) serializer.Response { userCtx, _ := c.Get("user") user := userCtx.(*model.User) @@ -47,8 +47,12 @@ func (service *DownloadTaskService) Delete(c *gin.Context) serializer.Response { return serializer.Err(serializer.CodeNotFound, "下载记录不存在", err) } - if download.Status != aria2.Downloading && download.Status != aria2.Paused { - return serializer.Err(serializer.CodeNoPermissionErr, "此下载任务无法取消", err) + if download.Status >= aria2.Error { + // 如果任务已完成,则删除任务记录 + if err := download.Delete(); err != nil { + return serializer.Err(serializer.CodeDBError, "任务记录删除失败", err) + } + return serializer.Response{} } // 取消任务