Skip to content

Commit f27ebf5

Browse files
Merge pull request #4874 from LibreSign/chore/reduce-configure-check-time
chore: reduce configure check time
2 parents e94aed9 + 13ba8d0 commit f27ebf5

File tree

1 file changed

+58
-38
lines changed

1 file changed

+58
-38
lines changed

lib/Service/Install/ConfigureCheckService.php

+58-38
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
class ConfigureCheckService {
2121
private string $architecture;
2222
private bool $isCacheDisabled = false;
23+
private array $result = [];
2324
public function __construct(
2425
private IAppConfig $appConfig,
2526
private SystemConfig $systemConfig,
@@ -72,8 +73,11 @@ public function checkPoppler(): array {
7273
}
7374

7475
public function checkPdfSig(): array {
76+
if (!empty($this->result['poppler'])) {
77+
return $this->result['poppler'];
78+
}
7579
if (shell_exec('which pdfsig') === null) {
76-
return [
80+
return $this->result['poppler'] = [
7781
(new ConfigureCheckHelper())
7882
->setInfoMessage('Poppler utils not installed')
7983
->setResource('pdfsig')
@@ -84,7 +88,7 @@ public function checkPdfSig(): array {
8488
// With 2>&1 the STRERR is redirected to STDOUT
8589
$version = shell_exec('pdfsig -v 2>&1');
8690
if (!$version) {
87-
return [
91+
return $this->result['poppler'] = [
8892
(new ConfigureCheckHelper())
8993
->setErrorMessage('Fail to retrieve pdfsig version')
9094
->setResource('pdfsig')
@@ -93,22 +97,25 @@ public function checkPdfSig(): array {
9397
}
9498
$version = preg_match('/pdfsig version (?<version>.*)/', $version, $matches);
9599
if (!$version) {
96-
return [
100+
return $this->result['poppler'] = [
97101
(new ConfigureCheckHelper())
98102
->setErrorMessage('Fail to retrieve pdfsig version')
99103
->setResource('pdfsig')
100104
->setTip("This is a poppler-utils dependency and wasn't possible to parse the output of command pdfsig -v"),
101105
];
102106
}
103-
return [(new ConfigureCheckHelper())
107+
return $this->result['poppler'] = [(new ConfigureCheckHelper())
104108
->setSuccessMessage('pdfsig version: ' . $matches['version'])
105109
->setResource('pdfsig')
106110
];
107111
}
108112

109113
public function checkPdfinfo(): array {
114+
if (!empty($this->result['pdfinfo'])) {
115+
return $this->result['pdfinfo'];
116+
}
110117
if (shell_exec('which pdfinfo') === null) {
111-
return [
118+
return $this->result['pdfinfo'] = [
112119
(new ConfigureCheckHelper())
113120
->setInfoMessage('Poppler utils not installed')
114121
->setResource('pdfinfo')
@@ -119,7 +126,7 @@ public function checkPdfinfo(): array {
119126
// With 2>&1 the STRERR is redirected to STDOUT
120127
$version = shell_exec('pdfinfo -v 2>&1');
121128
if (!$version) {
122-
return [
129+
return $this->result['pdfinfo'] = [
123130
(new ConfigureCheckHelper())
124131
->setErrorMessage('Fail to retrieve pdfinfo version')
125132
->setResource('pdfinfo')
@@ -128,14 +135,14 @@ public function checkPdfinfo(): array {
128135
}
129136
$version = preg_match('/pdfinfo version (?<version>.*)/', $version, $matches);
130137
if (!$version) {
131-
return [
138+
return $this->result['pdfinfo'] = [
132139
(new ConfigureCheckHelper())
133140
->setErrorMessage('Fail to retrieve pdfinfo version')
134141
->setResource('pdfinfo')
135142
->setTip("This is a poppler-utils dependency and wasn't possible to parse the output of command pdfinfo -v"),
136143
];
137144
}
138-
return [(new ConfigureCheckHelper())
145+
return $this->result['pdfinfo'] = [(new ConfigureCheckHelper())
139146
->setSuccessMessage('pdfinfo version: ' . $matches['version'])
140147
->setResource('pdfinfo')
141148
];
@@ -147,12 +154,15 @@ public function checkPdfinfo(): array {
147154
* @return ConfigureCheckHelper[]
148155
*/
149156
public function checkJSignPdf(): array {
157+
if (!empty($this->result['jsignpdf'])) {
158+
return $this->result['jsignpdf'];
159+
}
150160
$jsignpdJarPath = $this->appConfig->getValueString(Application::APP_ID, 'jsignpdf_jar_path');
151161
if ($jsignpdJarPath) {
152162
$resultOfVerify = $this->verify('jsignpdf');
153163
if (count($resultOfVerify)) {
154164
[$errorMessage, $tip] = $this->getErrorAndTipToResultOfVerify($resultOfVerify);
155-
return [
165+
return $this->result['jsignpdf'] = [
156166
(new ConfigureCheckHelper())
157167
->setErrorMessage($errorMessage)
158168
->setResource('jsignpdf')
@@ -161,7 +171,7 @@ public function checkJSignPdf(): array {
161171
}
162172
if (file_exists($jsignpdJarPath)) {
163173
if (!$this->isJavaOk()) {
164-
return [
174+
return $this->result['jsignpdf'] = [
165175
(new ConfigureCheckHelper())
166176
->setErrorMessage('Necessary Java to run JSignPdf')
167177
->setResource('jsignpdf')
@@ -171,6 +181,7 @@ public function checkJSignPdf(): array {
171181
$jsignPdf = $this->jSignPdfHandler->getJSignPdf();
172182
$jsignPdf->setParam($this->jSignPdfHandler->getJSignParam());
173183
$currentVersion = $jsignPdf->getVersion();
184+
$return = [];
174185
if ($currentVersion < InstallService::JSIGNPDF_VERSION) {
175186
if (!$currentVersion) {
176187
$message = 'Necessary install the version ' . InstallService::JSIGNPDF_VERSION;
@@ -196,14 +207,14 @@ public function checkJSignPdf(): array {
196207
->setResource('jsignpdf');
197208
return $return;
198209
}
199-
return [
210+
return $this->result['jsignpdf'] = [
200211
(new ConfigureCheckHelper())
201212
->setErrorMessage('JSignPdf binary not found: ' . $jsignpdJarPath)
202213
->setResource('jsignpdf')
203214
->setTip('Run occ libresign:install --jsignpdf'),
204215
];
205216
}
206-
return [
217+
return $this->result['jsignpdf'] = [
207218
(new ConfigureCheckHelper())
208219
->setErrorMessage('JSignPdf not found')
209220
->setResource('jsignpdf')
@@ -217,12 +228,15 @@ public function checkJSignPdf(): array {
217228
* @return ConfigureCheckHelper[]
218229
*/
219230
public function checkPdftk(): array {
231+
if (!empty($this->result['pdftk'])) {
232+
return $this->result['pdftk'];
233+
}
220234
$pdftkPath = $this->appConfig->getValueString(Application::APP_ID, 'pdftk_path');
221235
if ($pdftkPath) {
222236
$resultOfVerify = $this->verify('pdftk');
223237
if (count($resultOfVerify)) {
224238
[$errorMessage, $tip] = $this->getErrorAndTipToResultOfVerify($resultOfVerify);
225-
return [
239+
return $this->result['pdftk'] = [
226240
(new ConfigureCheckHelper())
227241
->setErrorMessage($errorMessage)
228242
->setResource('pdftk')
@@ -231,7 +245,7 @@ public function checkPdftk(): array {
231245
}
232246
if (file_exists($pdftkPath)) {
233247
if (!$this->isJavaOk()) {
234-
return [
248+
return $this->result['pdftk'] = [
235249
(new ConfigureCheckHelper())
236250
->setErrorMessage('Necessary Java to run PDFtk')
237251
->setResource('jsignpdf')
@@ -242,7 +256,7 @@ public function checkPdftk(): array {
242256
$version = [];
243257
\exec($javaPath . ' -jar ' . $pdftkPath . ' --version 2>&1', $version, $resultCode);
244258
if ($resultCode !== 0) {
245-
return [
259+
return $this->result['pdftk'] = [
246260
(new ConfigureCheckHelper())
247261
->setErrorMessage('Failure to check PDFtk version.')
248262
->setResource('java')
@@ -253,36 +267,39 @@ public function checkPdftk(): array {
253267
preg_match('/pdftk port to java (?<version>.*) a Handy Tool/', $version[0], $matches);
254268
if (isset($matches['version'])) {
255269
if ($matches['version'] === InstallService::PDFTK_VERSION) {
256-
$return[] = (new ConfigureCheckHelper())
257-
->setSuccessMessage('PDFtk version: ' . InstallService::PDFTK_VERSION)
258-
->setResource('pdftk');
259-
$return[] = (new ConfigureCheckHelper())
260-
->setSuccessMessage('PDFtk path: ' . $pdftkPath)
261-
->setResource('pdftk');
262-
return $return;
270+
return $this->result['pdftk'] = [
271+
$this->result['pdftk'][] = (new ConfigureCheckHelper())
272+
->setSuccessMessage('PDFtk version: ' . InstallService::PDFTK_VERSION)
273+
->setResource('pdftk'),
274+
$this->result['pdftk'][] = (new ConfigureCheckHelper())
275+
->setSuccessMessage('PDFtk path: ' . $pdftkPath)
276+
->setResource('pdftk'),
277+
];
263278
}
264279
$message = 'Necessary install the version ' . InstallService::PDFTK_VERSION;
265-
$return[] = (new ConfigureCheckHelper())
266-
->setErrorMessage($message)
267-
->setResource('jsignpdf')
268-
->setTip('Run occ libresign:install --jsignpdf');
280+
return $this->result['pdftk'] = [
281+
(new ConfigureCheckHelper())
282+
->setErrorMessage($message)
283+
->setResource('jsignpdf')
284+
->setTip('Run occ libresign:install --jsignpdf')
285+
];
269286
}
270287
}
271-
return [
288+
return $this->result['pdftk'] = [
272289
(new ConfigureCheckHelper())
273290
->setErrorMessage('PDFtk binary is invalid: ' . $pdftkPath)
274291
->setResource('pdftk')
275292
->setTip('Run occ libresign:install --pdftk'),
276293
];
277294
}
278-
return [
295+
return $this->result['pdftk'] = [
279296
(new ConfigureCheckHelper())
280297
->setErrorMessage('PDFtk binary not found: ' . $pdftkPath)
281298
->setResource('pdftk')
282299
->setTip('Run occ libresign:install --pdftk'),
283300
];
284301
}
285-
return [
302+
return $this->result['pdftk'] = [
286303
(new ConfigureCheckHelper())
287304
->setErrorMessage('PDFtk not found')
288305
->setResource('pdftk')
@@ -336,12 +353,15 @@ private function getErrorAndTipToResultOfVerify(array $result): array {
336353
* @return ConfigureCheckHelper[]
337354
*/
338355
private function checkJava(): array {
356+
if (!empty($this->result['java'])) {
357+
return $this->result['java'];
358+
}
339359
$javaPath = $this->appConfig->getValueString(Application::APP_ID, 'java_path');
340360
if ($javaPath) {
341361
$resultOfVerify = $this->verify('java');
342362
if (count($resultOfVerify)) {
343363
[$errorMessage, $tip] = $this->getErrorAndTipToResultOfVerify($resultOfVerify);
344-
return [
364+
return $this->result['java'] = [
345365
(new ConfigureCheckHelper())
346366
->setErrorMessage($errorMessage)
347367
->setResource('java')
@@ -351,7 +371,7 @@ private function checkJava(): array {
351371
if (file_exists($javaPath)) {
352372
\exec($javaPath . ' -version 2>&1', $javaVersion, $resultCode);
353373
if (empty($javaVersion)) {
354-
return [
374+
return $this->result['java'] = [
355375
(new ConfigureCheckHelper())
356376
->setErrorMessage(
357377
'Failed to execute Java. Sounds that your operational system is blocking the JVM.'
@@ -361,7 +381,7 @@ private function checkJava(): array {
361381
];
362382
}
363383
if ($resultCode !== 0) {
364-
return [
384+
return $this->result['java'] = [
365385
(new ConfigureCheckHelper())
366386
->setErrorMessage('Failure to check Java version.')
367387
->setResource('java')
@@ -370,7 +390,7 @@ private function checkJava(): array {
370390
}
371391
$javaVersion = current($javaVersion);
372392
if ($javaVersion !== InstallService::JAVA_VERSION) {
373-
return [
393+
return $this->result['java'] = [
374394
(new ConfigureCheckHelper())
375395
->setErrorMessage(
376396
sprintf(
@@ -386,22 +406,22 @@ private function checkJava(): array {
386406
\exec($javaPath . ' -XshowSettings:properties -version 2>&1', $output, $resultCode);
387407
preg_match('/native.encoding = (?<encoding>.*)\n/', implode("\n", $output), $matches);
388408
if (!isset($matches['encoding'])) {
389-
return [
409+
return $this->result['java'] = [
390410
(new ConfigureCheckHelper())
391411
->setErrorMessage('Java encoding not found.')
392412
->setResource('java')
393413
->setTip(sprintf('The command %s need to have native.encoding', $javaPath . ' -XshowSettings:properties -version')),
394414
];
395415
}
396416
if (!str_contains($matches['encoding'], 'UTF-8')) {
397-
return [
417+
return $this->result['java'] = [
398418
(new ConfigureCheckHelper())
399419
->setInfoMessage('Non-UTF-8 encoding detected. This may cause issues with accented or special characters')
400420
->setResource('java')
401421
->setTip(' Ensure the system encoding is UTF-8. You can check it using: locale charmap'),
402422
];
403423
}
404-
return [
424+
return $this->result['java'] = [
405425
(new ConfigureCheckHelper())
406426
->setSuccessMessage('Java version: ' . $javaVersion)
407427
->setResource('java'),
@@ -410,14 +430,14 @@ private function checkJava(): array {
410430
->setResource('java'),
411431
];
412432
}
413-
return [
433+
return $this->result['java'] = [
414434
(new ConfigureCheckHelper())
415435
->setErrorMessage('Java binary not found: ' . $javaPath)
416436
->setResource('java')
417437
->setTip('Run occ libresign:install --java'),
418438
];
419439
}
420-
return [
440+
return $this->result['java'] = [
421441
(new ConfigureCheckHelper())
422442
->setErrorMessage('Java not installed')
423443
->setResource('java')

0 commit comments

Comments
 (0)