Signed-off-by: Marcel Klehr <mklehr@gmx.net>pull/45094/head
@@ -360,4 +360,36 @@ class TaskProcessingApiController extends \OCP\AppFramework\OCSController { | |||
return new DataResponse(['message' => $this->l->t('Internal error')], Http::STATUS_INTERNAL_SERVER_ERROR); | |||
} | |||
} | |||
/** | |||
* This endpoint cancels a task | |||
* | |||
* @param int $taskId The id of the task | |||
* @return DataResponse<Http::STATUS_OK, array{task: CoreTaskProcessingTask}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR|Http::STATUS_NOT_FOUND, array{message: string}, array{}> | |||
* | |||
* 200: File content returned | |||
* 404: Task not found | |||
*/ | |||
#[NoAdminRequired] | |||
#[ApiRoute(verb: 'POST', url: '/tasks/{taskId}/cancel', root: '/taskprocessing')] | |||
public function cancelTask(int $taskId): DataResponse { | |||
try { | |||
// Check if the current user can access the task | |||
$this->taskProcessingManager->getUserTask($taskId, $this->userId); | |||
// set result | |||
$this->taskProcessingManager->cancelTask($taskId); | |||
$task = $this->taskProcessingManager->getUserTask($taskId, $this->userId); | |||
/** @var CoreTaskProcessingTask $json */ | |||
$json = $task->jsonSerialize(); | |||
return new DataResponse([ | |||
'task' => $json, | |||
]); | |||
} catch (\OCP\TaskProcessing\Exception\NotFoundException $e) { | |||
return new DataResponse(['message' => $this->l->t('Not found')], Http::STATUS_NOT_FOUND); | |||
} catch (Exception $e) { | |||
return new DataResponse(['message' => $this->l->t('Internal error')], Http::STATUS_INTERNAL_SERVER_ERROR); | |||
} | |||
} | |||
} |
@@ -4551,6 +4551,161 @@ | |||
} | |||
} | |||
}, | |||
"/ocs/v2.php/taskprocessing/tasks/{taskId}/cancel": { | |||
"post": { | |||
"operationId": "task_processing_api-cancel-task", | |||
"summary": "This endpoint cancels a task", | |||
"tags": [ | |||
"task_processing_api" | |||
], | |||
"security": [ | |||
{ | |||
"bearer_auth": [] | |||
}, | |||
{ | |||
"basic_auth": [] | |||
} | |||
], | |||
"parameters": [ | |||
{ | |||
"name": "taskId", | |||
"in": "path", | |||
"description": "The id of the task", | |||
"required": true, | |||
"schema": { | |||
"type": "integer", | |||
"format": "int64" | |||
} | |||
}, | |||
{ | |||
"name": "OCS-APIRequest", | |||
"in": "header", | |||
"description": "Required to be true for the API request to pass", | |||
"required": true, | |||
"schema": { | |||
"type": "boolean", | |||
"default": true | |||
} | |||
} | |||
], | |||
"responses": { | |||
"200": { | |||
"description": "File content returned", | |||
"content": { | |||
"application/json": { | |||
"schema": { | |||
"type": "object", | |||
"required": [ | |||
"ocs" | |||
], | |||
"properties": { | |||
"ocs": { | |||
"type": "object", | |||
"required": [ | |||
"meta", | |||
"data" | |||
], | |||
"properties": { | |||
"meta": { | |||
"$ref": "#/components/schemas/OCSMeta" | |||
}, | |||
"data": { | |||
"type": "object", | |||
"required": [ | |||
"task" | |||
], | |||
"properties": { | |||
"task": { | |||
"$ref": "#/components/schemas/TaskProcessingTask" | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
"500": { | |||
"description": "", | |||
"content": { | |||
"application/json": { | |||
"schema": { | |||
"type": "object", | |||
"required": [ | |||
"ocs" | |||
], | |||
"properties": { | |||
"ocs": { | |||
"type": "object", | |||
"required": [ | |||
"meta", | |||
"data" | |||
], | |||
"properties": { | |||
"meta": { | |||
"$ref": "#/components/schemas/OCSMeta" | |||
}, | |||
"data": { | |||
"type": "object", | |||
"required": [ | |||
"message" | |||
], | |||
"properties": { | |||
"message": { | |||
"type": "string" | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
"404": { | |||
"description": "Task not found", | |||
"content": { | |||
"application/json": { | |||
"schema": { | |||
"type": "object", | |||
"required": [ | |||
"ocs" | |||
], | |||
"properties": { | |||
"ocs": { | |||
"type": "object", | |||
"required": [ | |||
"meta", | |||
"data" | |||
], | |||
"properties": { | |||
"meta": { | |||
"$ref": "#/components/schemas/OCSMeta" | |||
}, | |||
"data": { | |||
"type": "object", | |||
"required": [ | |||
"message" | |||
], | |||
"properties": { | |||
"message": { | |||
"type": "string" | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
"/ocs/v2.php/teams/{teamId}/resources": { | |||
"get": { | |||
"operationId": "teams_api-resolve-one", |
@@ -636,6 +636,9 @@ class Manager implements IManager { | |||
public function cancelTask(int $id): void { | |||
$task = $this->getTask($id); | |||
if ($task->getStatus() !== Task::STATUS_SCHEDULED && $task->getStatus() !== Task::STATUS_RUNNING) { | |||
return; | |||
} | |||
$task->setStatus(Task::STATUS_CANCELLED); | |||
$taskEntity = \OC\TaskProcessing\Db\Task::fromPublicTask($task); | |||
try { |