feat: remove and clear task
This commit is contained in:
parent
be452aafde
commit
cb06d3a19a
@ -4,4 +4,5 @@ import "errors"
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ErrTaskNotFound = errors.New("task not found")
|
ErrTaskNotFound = errors.New("task not found")
|
||||||
|
ErrTaskRunning = errors.New("task is running")
|
||||||
)
|
)
|
||||||
|
@ -72,8 +72,16 @@ func (tm *Manager[K]) Cancel(tid K) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tm *Manager[K]) Remove(tid K) {
|
func (tm *Manager[K]) Remove(tid K) error {
|
||||||
|
t, ok := tm.Get(tid)
|
||||||
|
if !ok {
|
||||||
|
return errors.WithStack(ErrTaskNotFound)
|
||||||
|
}
|
||||||
|
if !t.Done() {
|
||||||
|
return errors.WithStack(ErrTaskRunning)
|
||||||
|
}
|
||||||
tm.tasks.Delete(tid)
|
tm.tasks.Delete(tid)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveAll removes all tasks from the manager, this maybe shouldn't be used
|
// RemoveAll removes all tasks from the manager, this maybe shouldn't be used
|
||||||
@ -110,6 +118,10 @@ func (tm *Manager[K]) ListDone() []*Task[K] {
|
|||||||
return tm.GetByStates(SUCCEEDED, CANCELED, ERRORED)
|
return tm.GetByStates(SUCCEEDED, CANCELED, ERRORED)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (tm *Manager[K]) ClearDone() {
|
||||||
|
tm.RemoveByStates(SUCCEEDED, CANCELED, ERRORED)
|
||||||
|
}
|
||||||
|
|
||||||
func NewTaskManager[K comparable](maxWorker int, updateID ...func(*K)) *Manager[K] {
|
func NewTaskManager[K comparable](maxWorker int, updateID ...func(*K)) *Manager[K] {
|
||||||
tm := &Manager[K]{
|
tm := &Manager[K]{
|
||||||
tasks: generic_sync.MapOf[K, *Task[K]]{},
|
tasks: generic_sync.MapOf[K, *Task[K]]{},
|
||||||
|
@ -3,6 +3,7 @@ package task
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
@ -91,6 +92,10 @@ func (t *Task[K]) retry() {
|
|||||||
t.run()
|
t.run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Task[K]) Done() bool {
|
||||||
|
return t.state == SUCCEEDED || t.state == CANCELED || t.state == ERRORED
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Task[K]) Cancel() {
|
func (t *Task[K]) Cancel() {
|
||||||
if t.state == SUCCEEDED || t.state == CANCELED {
|
if t.state == SUCCEEDED || t.state == CANCELED {
|
||||||
return
|
return
|
||||||
|
@ -74,6 +74,20 @@ func CancelDownTask(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RemoveDownTask(c *gin.Context) {
|
||||||
|
tid := c.Query("tid")
|
||||||
|
if err := aria2.DownTaskManager.Remove(tid); err != nil {
|
||||||
|
common.ErrorResp(c, err, 500)
|
||||||
|
} else {
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearDoneDownTasks(c *gin.Context) {
|
||||||
|
aria2.DownTaskManager.ClearDone()
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
|
||||||
func UndoneTransferTask(c *gin.Context) {
|
func UndoneTransferTask(c *gin.Context) {
|
||||||
common.SuccessResp(c, getTaskInfosUint(aria2.TransferTaskManager.ListUndone()))
|
common.SuccessResp(c, getTaskInfosUint(aria2.TransferTaskManager.ListUndone()))
|
||||||
}
|
}
|
||||||
@ -96,6 +110,25 @@ func CancelTransferTask(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RemoveTransferTask(c *gin.Context) {
|
||||||
|
id := c.Query("tid")
|
||||||
|
tid, err := strconv.ParseUint(id, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorResp(c, err, 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := aria2.TransferTaskManager.Remove(tid); err != nil {
|
||||||
|
common.ErrorResp(c, err, 500)
|
||||||
|
} else {
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearDoneTransferTasks(c *gin.Context) {
|
||||||
|
aria2.TransferTaskManager.ClearDone()
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
|
||||||
func UndoneUploadTask(c *gin.Context) {
|
func UndoneUploadTask(c *gin.Context) {
|
||||||
common.SuccessResp(c, getTaskInfosUint(fs.UploadTaskManager.ListUndone()))
|
common.SuccessResp(c, getTaskInfosUint(fs.UploadTaskManager.ListUndone()))
|
||||||
}
|
}
|
||||||
@ -118,6 +151,25 @@ func CancelUploadTask(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RemoveUploadTask(c *gin.Context) {
|
||||||
|
id := c.Query("tid")
|
||||||
|
tid, err := strconv.ParseUint(id, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorResp(c, err, 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := fs.UploadTaskManager.Remove(tid); err != nil {
|
||||||
|
common.ErrorResp(c, err, 500)
|
||||||
|
} else {
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearDoneUploadTasks(c *gin.Context) {
|
||||||
|
fs.UploadTaskManager.ClearDone()
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
|
||||||
func UndoneCopyTask(c *gin.Context) {
|
func UndoneCopyTask(c *gin.Context) {
|
||||||
common.SuccessResp(c, getTaskInfosUint(fs.CopyTaskManager.ListUndone()))
|
common.SuccessResp(c, getTaskInfosUint(fs.CopyTaskManager.ListUndone()))
|
||||||
}
|
}
|
||||||
@ -139,3 +191,22 @@ func CancelCopyTask(c *gin.Context) {
|
|||||||
common.SuccessResp(c)
|
common.SuccessResp(c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RemoveCopyTask(c *gin.Context) {
|
||||||
|
id := c.Query("tid")
|
||||||
|
tid, err := strconv.ParseUint(id, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
common.ErrorResp(c, err, 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := fs.CopyTaskManager.Remove(tid); err != nil {
|
||||||
|
common.ErrorResp(c, err, 500)
|
||||||
|
} else {
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearDoneCopyTasks(c *gin.Context) {
|
||||||
|
fs.CopyTaskManager.ClearDone()
|
||||||
|
common.SuccessResp(c)
|
||||||
|
}
|
||||||
|
@ -72,15 +72,23 @@ func admin(g *gin.RouterGroup) {
|
|||||||
task.GET("/down/undone", handles.UndoneDownTask)
|
task.GET("/down/undone", handles.UndoneDownTask)
|
||||||
task.GET("/down/done", handles.DoneDownTask)
|
task.GET("/down/done", handles.DoneDownTask)
|
||||||
task.POST("/down/cancel", handles.CancelDownTask)
|
task.POST("/down/cancel", handles.CancelDownTask)
|
||||||
|
task.POST("/down/remove", handles.RemoveDownTask)
|
||||||
|
task.POST("/down/clear_done", handles.ClearDoneDownTasks)
|
||||||
task.GET("/transfer/undone", handles.UndoneTransferTask)
|
task.GET("/transfer/undone", handles.UndoneTransferTask)
|
||||||
task.GET("/transfer/done", handles.DoneTransferTask)
|
task.GET("/transfer/done", handles.DoneTransferTask)
|
||||||
task.POST("/transfer/cancel", handles.CancelTransferTask)
|
task.POST("/transfer/cancel", handles.CancelTransferTask)
|
||||||
|
task.POST("/transfer/remove", handles.RemoveTransferTask)
|
||||||
|
task.POST("/transfer/clear_done", handles.ClearDoneTransferTasks)
|
||||||
task.GET("/upload/undone", handles.UndoneUploadTask)
|
task.GET("/upload/undone", handles.UndoneUploadTask)
|
||||||
task.GET("/upload/done", handles.DoneUploadTask)
|
task.GET("/upload/done", handles.DoneUploadTask)
|
||||||
task.POST("/upload/cancel", handles.CancelUploadTask)
|
task.POST("/upload/cancel", handles.CancelUploadTask)
|
||||||
|
task.POST("/upload/remove", handles.RemoveUploadTask)
|
||||||
|
task.POST("/upload/clear_done", handles.ClearDoneUploadTasks)
|
||||||
task.GET("/copy/undone", handles.UndoneCopyTask)
|
task.GET("/copy/undone", handles.UndoneCopyTask)
|
||||||
task.GET("/copy/done", handles.DoneCopyTask)
|
task.GET("/copy/done", handles.DoneCopyTask)
|
||||||
task.POST("/copy/cancel", handles.CancelCopyTask)
|
task.POST("/copy/cancel", handles.CancelCopyTask)
|
||||||
|
task.POST("/copy/remove", handles.RemoveCopyTask)
|
||||||
|
task.POST("/copy/clear_done", handles.ClearDoneCopyTasks)
|
||||||
|
|
||||||
ms := g.Group("/message")
|
ms := g.Group("/message")
|
||||||
ms.GET("/get", message.PostInstance.GetHandle)
|
ms.GET("/get", message.PostInstance.GetHandle)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user