MCPcopy Create free account
hub / github.com/cloudreve/cloudreve / ListTasks

Method ListTasks

service/explorer/workflows.go:324–384  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

322)
323
324func (service *ListTaskService) ListTasks(c *gin.Context) (*TaskListResponse, error) {
325 dep := dependency.FromContext(c)
326 user := inventory.UserFromContext(c)
327 hasher := dep.HashIDEncoder()
328 taskClient := dep.TaskClient()
329
330 args := &inventory.ListTaskArgs{
331 PaginationArgs: &inventory.PaginationArgs{
332 UseCursorPagination: true,
333 PageToken: service.NextPageToken,
334 PageSize: service.PageSize,
335 },
336 Types: []string{queue.CreateArchiveTaskType, queue.ExtractArchiveTaskType, queue.RelocateTaskType, queue.ImportTaskType},
337 UserID: user.ID,
338 }
339
340 if service.Category != "general" {
341 args.Types = []string{queue.RemoteDownloadTaskType}
342 if service.Category == "downloading" {
343 args.PageSize = intsets.MaxInt
344 args.Status = []task.Status{task.StatusSuspending, task.StatusProcessing, task.StatusQueued}
345 } else if service.Category == "downloaded" {
346 args.Status = []task.Status{task.StatusCanceled, task.StatusError, task.StatusCompleted}
347 }
348 }
349
350 // Get tasks
351 res, err := taskClient.List(c, args)
352 if err != nil {
353 return nil, serializer.NewError(serializer.CodeDBError, "Failed to query tasks", err)
354 }
355
356 tasks := make([]queue.Task, 0, len(res.Tasks))
357 nodeMap := make(map[int]*ent.Node)
358 for _, t := range res.Tasks {
359 task, err := queue.NewTaskFromModel(t)
360 if err != nil {
361 return nil, serializer.NewError(serializer.CodeDBError, "Failed to parse task", err)
362 }
363
364 summary := task.Summarize(hasher)
365 if summary != nil && summary.NodeID > 0 {
366 if _, ok := nodeMap[summary.NodeID]; !ok {
367 nodeMap[summary.NodeID] = nil
368 }
369 }
370 tasks = append(tasks, task)
371 }
372
373 // Get nodes
374 nodes, err := dep.NodeClient().ListActiveNodes(c, lo.Keys(nodeMap))
375 if err != nil {
376 return nil, serializer.NewError(serializer.CodeDBError, "Failed to query nodes", err)
377 }
378 for _, n := range nodes {
379 nodeMap[n.ID] = n
380 }
381

Callers 1

ListTasksFunction · 0.80

Calls 11

FromContextFunction · 0.92
UserFromContextFunction · 0.92
NewErrorFunction · 0.92
NewTaskFromModelFunction · 0.92
BuildTaskListResponseFunction · 0.85
HashIDEncoderMethod · 0.65
TaskClientMethod · 0.65
ListMethod · 0.65
SummarizeMethod · 0.65
ListActiveNodesMethod · 0.65
NodeClientMethod · 0.65

Tested by

no test coverage detected