mirror of
				https://github.com/cloudreve/cloudreve.git
				synced 2025-11-04 13:16:02 +08:00 
			
		
		
		
	Feat: delete aria2 record in client side (#335)
This commit is contained in:
		
							
								
								
									
										2
									
								
								assets
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								assets
									
									
									
									
									
								
							 Submodule assets updated: 253bf0c5a0...1a2f8ce8ca
									
								
							@ -109,3 +109,8 @@ func (task *Download) GetOwner() *User {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return task.User
 | 
						return task.User
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Delete 删除离线下载记录
 | 
				
			||||||
 | 
					func (download *Download) Delete() error {
 | 
				
			||||||
 | 
						return DB.Model(download).Delete(download).Error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -161,3 +161,19 @@ func TestGetDownloadsByStatusAndUser(t *testing.T) {
 | 
				
			|||||||
		asserts.Len(res, 2)
 | 
							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)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -23,6 +23,7 @@ type DownloadListResponse struct {
 | 
				
			|||||||
// FinishedListResponse 已完成任务条目
 | 
					// FinishedListResponse 已完成任务条目
 | 
				
			||||||
type FinishedListResponse struct {
 | 
					type FinishedListResponse struct {
 | 
				
			||||||
	Name       string         `json:"name"`
 | 
						Name       string         `json:"name"`
 | 
				
			||||||
 | 
						GID        string         `json:"gid"`
 | 
				
			||||||
	Status     int            `json:"status"`
 | 
						Status     int            `json:"status"`
 | 
				
			||||||
	Dst        string         `json:"dst"`
 | 
						Dst        string         `json:"dst"`
 | 
				
			||||||
	Error      string         `json:"error"`
 | 
						Error      string         `json:"error"`
 | 
				
			||||||
@ -51,6 +52,7 @@ func BuildFinishedListResponse(tasks []model.Download) Response {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		download := FinishedListResponse{
 | 
							download := FinishedListResponse{
 | 
				
			||||||
			Name:       fileName,
 | 
								Name:       fileName,
 | 
				
			||||||
 | 
								GID:        tasks[i].GID,
 | 
				
			||||||
			Status:     tasks[i].Status,
 | 
								Status:     tasks[i].Status,
 | 
				
			||||||
			Error:      tasks[i].Error,
 | 
								Error:      tasks[i].Error,
 | 
				
			||||||
			Dst:        tasks[i].Dst,
 | 
								Dst:        tasks[i].Dst,
 | 
				
			||||||
 | 
				
			|||||||
@ -63,7 +63,7 @@ func AddAria2Torrent(c *gin.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CancelAria2Download 取消aria2离线下载任务
 | 
					// CancelAria2Download 取消或删除aria2离线下载任务
 | 
				
			||||||
func CancelAria2Download(c *gin.Context) {
 | 
					func CancelAria2Download(c *gin.Context) {
 | 
				
			||||||
	var selectService aria2.DownloadTaskService
 | 
						var selectService aria2.DownloadTaskService
 | 
				
			||||||
	if err := c.ShouldBindUri(&selectService); err == nil {
 | 
						if err := c.ShouldBindUri(&selectService); err == nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -485,7 +485,7 @@ func InitMasterRouter() *gin.Engine {
 | 
				
			|||||||
				aria2.POST("torrent/:id", middleware.HashID(hashid.FileID), controllers.AddAria2Torrent)
 | 
									aria2.POST("torrent/:id", middleware.HashID(hashid.FileID), controllers.AddAria2Torrent)
 | 
				
			||||||
				// 重新选择要下载的文件
 | 
									// 重新选择要下载的文件
 | 
				
			||||||
				aria2.PUT("select/:gid", controllers.SelectAria2File)
 | 
									aria2.PUT("select/:gid", controllers.SelectAria2File)
 | 
				
			||||||
				// 取消下载任务
 | 
									// 取消或删除下载任务
 | 
				
			||||||
				aria2.DELETE("task/:gid", controllers.CancelAria2Download)
 | 
									aria2.DELETE("task/:gid", controllers.CancelAria2Download)
 | 
				
			||||||
				// 获取正在下载中的任务
 | 
									// 获取正在下载中的任务
 | 
				
			||||||
				aria2.GET("downloading", controllers.ListDownloading)
 | 
									aria2.GET("downloading", controllers.ListDownloading)
 | 
				
			||||||
 | 
				
			|||||||
@ -36,7 +36,7 @@ func (service *DownloadListService) Downloading(c *gin.Context, user *model.User
 | 
				
			|||||||
	return serializer.BuildDownloadingResponse(downloads)
 | 
						return serializer.BuildDownloadingResponse(downloads)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Delete 取消下载任务
 | 
					// Delete 取消或删除下载任务
 | 
				
			||||||
func (service *DownloadTaskService) Delete(c *gin.Context) serializer.Response {
 | 
					func (service *DownloadTaskService) Delete(c *gin.Context) serializer.Response {
 | 
				
			||||||
	userCtx, _ := c.Get("user")
 | 
						userCtx, _ := c.Get("user")
 | 
				
			||||||
	user := userCtx.(*model.User)
 | 
						user := userCtx.(*model.User)
 | 
				
			||||||
@ -47,8 +47,12 @@ func (service *DownloadTaskService) Delete(c *gin.Context) serializer.Response {
 | 
				
			|||||||
		return serializer.Err(serializer.CodeNotFound, "下载记录不存在", err)
 | 
							return serializer.Err(serializer.CodeNotFound, "下载记录不存在", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if download.Status != aria2.Downloading && download.Status != aria2.Paused {
 | 
						if download.Status >= aria2.Error {
 | 
				
			||||||
		return serializer.Err(serializer.CodeNoPermissionErr, "此下载任务无法取消", err)
 | 
							// 如果任务已完成,则删除任务记录
 | 
				
			||||||
 | 
							if err := download.Delete(); err != nil {
 | 
				
			||||||
 | 
								return serializer.Err(serializer.CodeDBError, "任务记录删除失败", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return serializer.Response{}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 取消任务
 | 
						// 取消任务
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user