chore: get or remove by states
This commit is contained in:
parent
6c61f1d261
commit
92983aa185
@ -61,7 +61,7 @@ func TestDown(t *testing.T) {
|
|||||||
for {
|
for {
|
||||||
tsk := tasks[0]
|
tsk := tasks[0]
|
||||||
t.Logf("task: %+v", tsk)
|
t.Logf("task: %+v", tsk)
|
||||||
if tsk.GetState() == task.FINISHED {
|
if tsk.GetState() == task.Succeeded {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if tsk.GetState() == task.ERRORED {
|
if tsk.GetState() == task.ERRORED {
|
||||||
@ -75,7 +75,7 @@ func TestDown(t *testing.T) {
|
|||||||
}
|
}
|
||||||
tsk := transferTaskManager.GetAll()[0]
|
tsk := transferTaskManager.GetAll()[0]
|
||||||
t.Logf("task: %+v", tsk)
|
t.Logf("task: %+v", tsk)
|
||||||
if tsk.GetState() == task.FINISHED {
|
if tsk.GetState() == task.Succeeded {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if tsk.GetState() == task.ERRORED {
|
if tsk.GetState() == task.ERRORED {
|
||||||
|
@ -2,6 +2,7 @@ package task
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/alist-org/alist/v3/pkg/generic_sync"
|
"github.com/alist-org/alist/v3/pkg/generic_sync"
|
||||||
|
"github.com/alist-org/alist/v3/pkg/utils"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
@ -78,22 +79,24 @@ func (tm *Manager[K]) RemoveAll() {
|
|||||||
tm.tasks.Clear()
|
tm.tasks.Clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tm *Manager[K]) RemoveFinished() {
|
func (tm *Manager[K]) RemoveByStates(states ...string) {
|
||||||
tasks := tm.GetAll()
|
tasks := tm.GetAll()
|
||||||
for _, task := range tasks {
|
for _, task := range tasks {
|
||||||
if task.state == FINISHED {
|
if utils.SliceContains(states, task.GetState()) {
|
||||||
tm.Remove(task.ID)
|
tm.Remove(task.ID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tm *Manager[K]) RemoveError() {
|
func (tm *Manager[K]) GetByStates(states ...string) []*Task[K] {
|
||||||
tasks := tm.GetAll()
|
var tasks []*Task[K]
|
||||||
for _, task := range tasks {
|
tm.tasks.Range(func(key K, value *Task[K]) bool {
|
||||||
if task.Error != nil {
|
if utils.SliceContains(states, value.GetState()) {
|
||||||
tm.Remove(task.ID)
|
tasks = append(tasks, value)
|
||||||
}
|
}
|
||||||
}
|
return true
|
||||||
|
})
|
||||||
|
return tasks
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTaskManager[K comparable](maxWorker int, updateID ...func(*K)) *Manager[K] {
|
func NewTaskManager[K comparable](maxWorker int, updateID ...func(*K)) *Manager[K] {
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
PENDING = "pending"
|
PENDING = "pending"
|
||||||
RUNNING = "running"
|
RUNNING = "running"
|
||||||
FINISHED = "finished"
|
Succeeded = "succeeded"
|
||||||
CANCELING = "canceling"
|
CANCELING = "canceling"
|
||||||
CANCELED = "canceled"
|
CANCELED = "canceled"
|
||||||
ERRORED = "errored"
|
ERRORED = "errored"
|
||||||
@ -65,7 +65,7 @@ func (t *Task[K]) run() {
|
|||||||
} else if t.Error != nil {
|
} else if t.Error != nil {
|
||||||
t.state = ERRORED
|
t.state = ERRORED
|
||||||
} else {
|
} else {
|
||||||
t.state = FINISHED
|
t.state = Succeeded
|
||||||
if t.callback != nil {
|
if t.callback != nil {
|
||||||
t.callback(t)
|
t.callback(t)
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ func (t *Task[K]) retry() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *Task[K]) Cancel() {
|
func (t *Task[K]) Cancel() {
|
||||||
if t.state == FINISHED || t.state == CANCELED {
|
if t.state == Succeeded || t.state == CANCELED {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if t.cancel != nil {
|
if t.cancel != nil {
|
||||||
|
@ -28,7 +28,7 @@ func TestTask_Manager(t *testing.T) {
|
|||||||
t.Errorf("task status not running: %s", task.state)
|
t.Errorf("task status not running: %s", task.state)
|
||||||
}
|
}
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
if task.state != FINISHED {
|
if task.state != Succeeded {
|
||||||
t.Errorf("task status not finished: %s", task.state)
|
t.Errorf("task status not finished: %s", task.state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,3 +11,12 @@ func SliceEqual[T comparable](a, b []T) bool {
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SliceContains[T comparable](arr []T, v T) bool {
|
||||||
|
for _, vv := range arr {
|
||||||
|
if vv == v {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user