-
Notifications
You must be signed in to change notification settings - Fork 142
Expand file tree
/
Copy pathTextToDocumentProvider.php
More file actions
132 lines (109 loc) · 3.09 KB
/
TextToDocumentProvider.php
File metadata and controls
132 lines (109 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
declare(strict_types=1);
namespace OCA\Richdocuments\TaskProcessing;
use OCA\Richdocuments\AppInfo\Application;
use OCA\Richdocuments\Service\DocumentGenerationService;
use OCP\IL10N;
use OCP\TaskProcessing\EShapeType;
use OCP\TaskProcessing\ISynchronousWatermarkingProvider;
use OCP\TaskProcessing\ShapeDescriptor;
use OCP\TaskProcessing\ShapeEnumValue;
class TextToDocumentProvider implements ISynchronousWatermarkingProvider {
public const DEFAULT_TARGET_FORMAT = 'docx';
public function __construct(
private DocumentGenerationService $documentGenerationService,
private IL10N $l,
) {
}
#[\Override]
public function getId(): string {
return Application::APPNAME . '-text_document_generator';
}
#[\Override]
public function getName(): string {
return $this->l->t('Nextcloud Office (Collabora) text document generator');
}
#[\Override]
public function getTaskTypeId(): string {
return TextToDocumentTaskType::ID;
}
#[\Override]
public function getExpectedRuntime(): int {
return 120;
}
#[\Override]
public function getInputShapeEnumValues(): array {
return [];
}
#[\Override]
public function getInputShapeDefaults(): array {
return [];
}
#[\Override]
public function getOptionalInputShape(): array {
return [
'target_format' => new ShapeDescriptor(
$this->l->t('Document format'),
$this->l->t('The format of the generated document'),
EShapeType::Enum
),
];
}
#[\Override]
public function getOptionalInputShapeEnumValues(): array {
return [
'target_format' => [
new ShapeEnumValue($this->l->t('OpenXML (docx)'), 'docx'),
new ShapeEnumValue($this->l->t('OpenDocument (odt)'), 'odt'),
new ShapeEnumValue($this->l->t('Portable Document Format (pdf)'), 'pdf'),
],
];
}
#[\Override]
public function getOptionalInputShapeDefaults(): array {
return [
'target_format' => self::DEFAULT_TARGET_FORMAT,
];
}
#[\Override]
public function getOutputShapeEnumValues(): array {
return [];
}
#[\Override]
public function getOptionalOutputShape(): array {
return [];
}
#[\Override]
public function getOptionalOutputShapeEnumValues(): array {
return [];
}
/**
* @inheritDoc
*/
#[\Override]
public function process(?string $userId, array $input, callable $reportProgress, bool $includeWatermark = true): array {
if ($userId === null) {
throw new \RuntimeException('User ID is required to process the prompt.');
}
if (!isset($input['text']) || !is_string($input['text'])) {
throw new \RuntimeException('Invalid input, expected "text" key with string value');
}
$targetFormat = self::DEFAULT_TARGET_FORMAT;
if (isset($input['target_format']) && is_string($input['target_format']) && in_array($input['target_format'], ['docx', 'odt', 'pdf'], true)) {
$targetFormat = $input['target_format'];
}
$fileContent = $this->documentGenerationService->generateTextDocument(
$userId,
$input['text'],
$targetFormat,
$includeWatermark
);
return [
'file' => $fileContent,
];
}
}