(c *gin.Context, taskID int)
| 421 | ) |
| 422 | |
| 423 | func (service *SetDownloadFilesService) SetDownloadFiles(c *gin.Context, taskID int) error { |
| 424 | dep := dependency.FromContext(c) |
| 425 | u := inventory.UserFromContext(c) |
| 426 | r := dep.TaskRegistry() |
| 427 | |
| 428 | t, found := r.Get(taskID) |
| 429 | if !found || t.Owner().ID != u.ID { |
| 430 | return serializer.NewError(serializer.CodeNotFound, "Task not found", nil) |
| 431 | } |
| 432 | |
| 433 | status := t.Status() |
| 434 | summary := t.Summarize(dep.HashIDEncoder()) |
| 435 | // Task must be in processing state |
| 436 | if status != task.StatusSuspending && status != task.StatusProcessing { |
| 437 | return serializer.NewError(serializer.CodeNotFound, "Task not in processing state", nil) |
| 438 | } |
| 439 | |
| 440 | // Task must in monitoring loop |
| 441 | if summary.Phase != workflows.RemoteDownloadTaskPhaseMonitor { |
| 442 | return serializer.NewError(serializer.CodeNotFound, "Task not in monitoring loop", nil) |
| 443 | } |
| 444 | |
| 445 | if downloadTask, ok := t.(*workflows.RemoteDownloadTask); ok { |
| 446 | if err := downloadTask.SetDownloadTarget(c, service.Files...); err != nil { |
| 447 | return serializer.NewError(serializer.CodeInternalSetting, "Failed to set download files", err) |
| 448 | } |
| 449 | } |
| 450 | |
| 451 | return nil |
| 452 | } |
| 453 | |
| 454 | type ( |
| 455 | RebuildFTSIndexWorkflowService struct { |
no test coverage detected