mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-16 19:33:11 +02:00
Fix tool disabling (#5585)
# Description of Changes <!-- Please provide a summary of the changes, including: - What was changed - Why the change was made - Any challenges encountered Closes #(issue_number) --> --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details.
This commit is contained in:
@@ -303,22 +303,23 @@ public class EndpointConfiguration {
|
|||||||
// Adding endpoints to "PageOps" group
|
// Adding endpoints to "PageOps" group
|
||||||
addEndpointToGroup("PageOps", "remove-pages");
|
addEndpointToGroup("PageOps", "remove-pages");
|
||||||
addEndpointToGroup("PageOps", "merge-pdfs");
|
addEndpointToGroup("PageOps", "merge-pdfs");
|
||||||
addEndpointToGroup("PageOps", "split-pdfs");
|
addEndpointToGroup("PageOps", "split-pages");
|
||||||
addEndpointToGroup("PageOps", "pdf-organizer");
|
addEndpointToGroup("PageOps", "rearrange-pages");
|
||||||
addEndpointToGroup("PageOps", "rotate-pdf");
|
addEndpointToGroup("PageOps", "rotate-pdf");
|
||||||
addEndpointToGroup("PageOps", "multi-page-layout");
|
addEndpointToGroup("PageOps", "multi-page-layout");
|
||||||
addEndpointToGroup("PageOps", "booklet-imposition");
|
addEndpointToGroup("PageOps", "booklet-imposition");
|
||||||
addEndpointToGroup("PageOps", "scale-pages");
|
addEndpointToGroup("PageOps", "scale-pages");
|
||||||
addEndpointToGroup("PageOps", "crop");
|
addEndpointToGroup("PageOps", "crop");
|
||||||
addEndpointToGroup("PageOps", "extract-page");
|
|
||||||
addEndpointToGroup("PageOps", "pdf-to-single-page");
|
addEndpointToGroup("PageOps", "pdf-to-single-page");
|
||||||
addEndpointToGroup("PageOps", "auto-split-pdf");
|
addEndpointToGroup("PageOps", "auto-split-pdf");
|
||||||
addEndpointToGroup("PageOps", "split-by-size-or-count");
|
addEndpointToGroup("PageOps", "split-by-size-or-count");
|
||||||
addEndpointToGroup("PageOps", "overlay-pdf");
|
addEndpointToGroup("PageOps", "overlay-pdf");
|
||||||
addEndpointToGroup("PageOps", "split-pdf-by-sections");
|
addEndpointToGroup("PageOps", "split-pdf-by-sections");
|
||||||
addEndpointToGroup("PageOps", "split-pdf-by-chapters");
|
addEndpointToGroup("PageOps", "split-pdf-by-chapters");
|
||||||
|
addEndpointToGroup("PageOps", "add-page-numbers");
|
||||||
|
addEndpointToGroup("PageOps", "extract-pages");
|
||||||
|
|
||||||
// Adding endpoints to "Convert" group
|
// Adding endpoints to "Convert" group (Frontend has 15 convert endpoints)
|
||||||
addEndpointToGroup("Convert", "pdf-to-img");
|
addEndpointToGroup("Convert", "pdf-to-img");
|
||||||
addEndpointToGroup("Convert", "img-to-pdf");
|
addEndpointToGroup("Convert", "img-to-pdf");
|
||||||
addEndpointToGroup("Convert", "pdf-to-pdfa");
|
addEndpointToGroup("Convert", "pdf-to-pdfa");
|
||||||
@@ -334,6 +335,8 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Convert", "pdf-to-csv");
|
addEndpointToGroup("Convert", "pdf-to-csv");
|
||||||
addEndpointToGroup("Convert", "pdf-to-markdown");
|
addEndpointToGroup("Convert", "pdf-to-markdown");
|
||||||
addEndpointToGroup("Convert", "eml-to-pdf");
|
addEndpointToGroup("Convert", "eml-to-pdf");
|
||||||
|
addEndpointToGroup("Convert", "pdf-to-epub");
|
||||||
|
// Backend-only endpoints (not in frontend tool registry)
|
||||||
addEndpointToGroup("Convert", "pdf-to-vector");
|
addEndpointToGroup("Convert", "pdf-to-vector");
|
||||||
addEndpointToGroup("Convert", "vector-to-pdf");
|
addEndpointToGroup("Convert", "vector-to-pdf");
|
||||||
addEndpointToGroup("Convert", "pdf-to-video");
|
addEndpointToGroup("Convert", "pdf-to-video");
|
||||||
@@ -341,6 +344,7 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Convert", "pdf-to-cbz");
|
addEndpointToGroup("Convert", "pdf-to-cbz");
|
||||||
addEndpointToGroup("Convert", "pdf-to-json");
|
addEndpointToGroup("Convert", "pdf-to-json");
|
||||||
addEndpointToGroup("Convert", "json-to-pdf");
|
addEndpointToGroup("Convert", "json-to-pdf");
|
||||||
|
addEndpointToGroup("Convert", "pdf-to-rtf");
|
||||||
|
|
||||||
// Adding endpoints to "Security" group
|
// Adding endpoints to "Security" group
|
||||||
addEndpointToGroup("Security", "add-password");
|
addEndpointToGroup("Security", "add-password");
|
||||||
@@ -351,51 +355,49 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Security", "remove-cert-sign");
|
addEndpointToGroup("Security", "remove-cert-sign");
|
||||||
addEndpointToGroup("Security", "sanitize-pdf");
|
addEndpointToGroup("Security", "sanitize-pdf");
|
||||||
addEndpointToGroup("Security", "auto-redact");
|
addEndpointToGroup("Security", "auto-redact");
|
||||||
addEndpointToGroup("Security", "redact");
|
|
||||||
addEndpointToGroup("Security", "validate-signature");
|
addEndpointToGroup("Security", "validate-signature");
|
||||||
|
addEndpointToGroup("Security", "add-stamp");
|
||||||
|
addEndpointToGroup("Security", "unlock-pdf-forms");
|
||||||
|
// Backend-only endpoints (not in frontend tool registry endpoints)
|
||||||
|
addEndpointToGroup("Security", "redact");
|
||||||
addEndpointToGroup("Security", "verify-pdf");
|
addEndpointToGroup("Security", "verify-pdf");
|
||||||
addEndpointToGroup("Security", "stamp");
|
|
||||||
addEndpointToGroup("Security", "sign");
|
addEndpointToGroup("Security", "sign");
|
||||||
|
|
||||||
// Adding endpoints to "Other" group
|
// Adding endpoints to "Other" group
|
||||||
addEndpointToGroup("Other", "ocr-pdf");
|
addEndpointToGroup("Other", "ocr-pdf");
|
||||||
addEndpointToGroup("Other", "add-image");
|
|
||||||
addEndpointToGroup("Other", "extract-images");
|
addEndpointToGroup("Other", "extract-images");
|
||||||
addEndpointToGroup("Other", "change-metadata");
|
addEndpointToGroup("Other", "update-metadata");
|
||||||
addEndpointToGroup("Other", "flatten");
|
addEndpointToGroup("Other", "flatten");
|
||||||
addEndpointToGroup("Other", "unlock-pdf-forms");
|
|
||||||
addEndpointToGroup("Other", REMOVE_BLANKS);
|
addEndpointToGroup("Other", REMOVE_BLANKS);
|
||||||
addEndpointToGroup("Other", "remove-annotations");
|
addEndpointToGroup("Other", "remove-annotations");
|
||||||
addEndpointToGroup("Other", "compare");
|
|
||||||
addEndpointToGroup("Other", "add-page-numbers");
|
|
||||||
addEndpointToGroup("Other", "get-info-on-pdf");
|
addEndpointToGroup("Other", "get-info-on-pdf");
|
||||||
addEndpointToGroup("Other", "remove-image-pdf");
|
addEndpointToGroup("Other", "remove-image-pdf");
|
||||||
addEndpointToGroup("Other", "add-attachments");
|
addEndpointToGroup("Other", "add-attachments");
|
||||||
|
addEndpointToGroup("Other", "replace-invert-pdf");
|
||||||
|
addEndpointToGroup("Other", "edit-table-of-contents");
|
||||||
|
addEndpointToGroup("Other", "text-editor-pdf");
|
||||||
|
// Backend-only endpoints (not in frontend tool registry endpoints)
|
||||||
|
addEndpointToGroup("Other", "add-image");
|
||||||
|
addEndpointToGroup("Other", "compare");
|
||||||
addEndpointToGroup("Other", "view-pdf");
|
addEndpointToGroup("Other", "view-pdf");
|
||||||
addEndpointToGroup("Other", "replace-and-invert-color-pdf");
|
|
||||||
addEndpointToGroup("Other", "multi-tool");
|
addEndpointToGroup("Other", "multi-tool");
|
||||||
|
|
||||||
// Adding form-related endpoints to "Other" group
|
|
||||||
addEndpointToGroup("Other", "fields");
|
addEndpointToGroup("Other", "fields");
|
||||||
addEndpointToGroup("Other", "modify-fields");
|
addEndpointToGroup("Other", "modify-fields");
|
||||||
addEndpointToGroup("Other", "delete-fields");
|
addEndpointToGroup("Other", "delete-fields");
|
||||||
addEndpointToGroup("Other", "fill");
|
addEndpointToGroup("Other", "fill");
|
||||||
|
|
||||||
// Adding endpoints to "Advance" group
|
// Adding endpoints to "Advance" group
|
||||||
addEndpointToGroup("Advance", "adjust-contrast");
|
|
||||||
addEndpointToGroup("Advance", "compress-pdf");
|
addEndpointToGroup("Advance", "compress-pdf");
|
||||||
addEndpointToGroup("Advance", "extract-image-scans");
|
addEndpointToGroup("Advance", "extract-image-scans");
|
||||||
addEndpointToGroup("Advance", "repair");
|
addEndpointToGroup("Advance", "repair");
|
||||||
addEndpointToGroup("Advance", "auto-rename");
|
addEndpointToGroup("Advance", "auto-rename");
|
||||||
addEndpointToGroup("Advance", "pipeline");
|
addEndpointToGroup("Advance", "handleData");
|
||||||
addEndpointToGroup("Advance", "scanner-effect");
|
addEndpointToGroup("Advance", "scanner-effect");
|
||||||
addEndpointToGroup("Advance", "auto-split-pdf");
|
|
||||||
addEndpointToGroup("Advance", "show-javascript");
|
addEndpointToGroup("Advance", "show-javascript");
|
||||||
addEndpointToGroup("Advance", "split-by-size-or-count");
|
|
||||||
addEndpointToGroup("Advance", "overlay-pdf");
|
addEndpointToGroup("Advance", "overlay-pdf");
|
||||||
addEndpointToGroup("Advance", "split-pdf-by-sections");
|
// Backend-only endpoints
|
||||||
addEndpointToGroup("Advance", "edit-table-of-contents");
|
addEndpointToGroup("Advance", "adjust-contrast");
|
||||||
addEndpointToGroup("Advance", "split-pdf-by-chapters");
|
addEndpointToGroup("Advance", "pipeline");
|
||||||
|
|
||||||
// CLI
|
// CLI
|
||||||
addEndpointToGroup("CLI", "compress-pdf");
|
addEndpointToGroup("CLI", "compress-pdf");
|
||||||
@@ -436,8 +438,8 @@ public class EndpointConfiguration {
|
|||||||
// Java
|
// Java
|
||||||
addEndpointToGroup("Java", "merge-pdfs");
|
addEndpointToGroup("Java", "merge-pdfs");
|
||||||
addEndpointToGroup("Java", "remove-pages");
|
addEndpointToGroup("Java", "remove-pages");
|
||||||
addEndpointToGroup("Java", "split-pdfs");
|
addEndpointToGroup("Java", "split-pages");
|
||||||
addEndpointToGroup("Java", "pdf-organizer");
|
addEndpointToGroup("Java", "rearrange-pages");
|
||||||
addEndpointToGroup("Java", "rotate-pdf");
|
addEndpointToGroup("Java", "rotate-pdf");
|
||||||
addEndpointToGroup("Java", "pdf-to-img");
|
addEndpointToGroup("Java", "pdf-to-img");
|
||||||
addEndpointToGroup("Java", "img-to-pdf");
|
addEndpointToGroup("Java", "img-to-pdf");
|
||||||
@@ -445,9 +447,10 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Java", "remove-password");
|
addEndpointToGroup("Java", "remove-password");
|
||||||
addEndpointToGroup("Java", "change-permissions");
|
addEndpointToGroup("Java", "change-permissions");
|
||||||
addEndpointToGroup("Java", "add-watermark");
|
addEndpointToGroup("Java", "add-watermark");
|
||||||
|
addEndpointToGroup("Java", "add-stamp");
|
||||||
addEndpointToGroup("Java", "add-image");
|
addEndpointToGroup("Java", "add-image");
|
||||||
addEndpointToGroup("Java", "extract-images");
|
addEndpointToGroup("Java", "extract-images");
|
||||||
addEndpointToGroup("Java", "change-metadata");
|
addEndpointToGroup("Java", "update-metadata");
|
||||||
addEndpointToGroup("Java", "cert-sign");
|
addEndpointToGroup("Java", "cert-sign");
|
||||||
addEndpointToGroup("Java", "remove-cert-sign");
|
addEndpointToGroup("Java", "remove-cert-sign");
|
||||||
addEndpointToGroup("Java", "multi-page-layout");
|
addEndpointToGroup("Java", "multi-page-layout");
|
||||||
@@ -459,7 +462,6 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Java", "sanitize-pdf");
|
addEndpointToGroup("Java", "sanitize-pdf");
|
||||||
addEndpointToGroup("Java", "crop");
|
addEndpointToGroup("Java", "crop");
|
||||||
addEndpointToGroup("Java", "get-info-on-pdf");
|
addEndpointToGroup("Java", "get-info-on-pdf");
|
||||||
addEndpointToGroup("Java", "extract-page");
|
|
||||||
addEndpointToGroup("Java", "pdf-to-single-page");
|
addEndpointToGroup("Java", "pdf-to-single-page");
|
||||||
addEndpointToGroup("Java", "markdown-to-pdf");
|
addEndpointToGroup("Java", "markdown-to-pdf");
|
||||||
addEndpointToGroup("Java", "show-javascript");
|
addEndpointToGroup("Java", "show-javascript");
|
||||||
@@ -469,7 +471,9 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Java", "split-by-size-or-count");
|
addEndpointToGroup("Java", "split-by-size-or-count");
|
||||||
addEndpointToGroup("Java", "overlay-pdf");
|
addEndpointToGroup("Java", "overlay-pdf");
|
||||||
addEndpointToGroup("Java", "split-pdf-by-sections");
|
addEndpointToGroup("Java", "split-pdf-by-sections");
|
||||||
|
addEndpointToGroup("Java", "split-pdf-by-chapters");
|
||||||
addEndpointToGroup("Java", REMOVE_BLANKS);
|
addEndpointToGroup("Java", REMOVE_BLANKS);
|
||||||
|
addEndpointToGroup("Java", "remove-annotations");
|
||||||
addEndpointToGroup("Java", "pdf-to-text");
|
addEndpointToGroup("Java", "pdf-to-text");
|
||||||
addEndpointToGroup("Java", "remove-image-pdf");
|
addEndpointToGroup("Java", "remove-image-pdf");
|
||||||
addEndpointToGroup("Java", "pdf-to-markdown");
|
addEndpointToGroup("Java", "pdf-to-markdown");
|
||||||
@@ -479,15 +483,24 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Java", "pdf-to-cbz");
|
addEndpointToGroup("Java", "pdf-to-cbz");
|
||||||
addEndpointToGroup("Java", "pdf-to-json");
|
addEndpointToGroup("Java", "pdf-to-json");
|
||||||
addEndpointToGroup("Java", "json-to-pdf");
|
addEndpointToGroup("Java", "json-to-pdf");
|
||||||
addEndpointToGroup("rar", "pdf-to-cbr");
|
|
||||||
addEndpointToGroup("Java", "pdf-to-video");
|
addEndpointToGroup("Java", "pdf-to-video");
|
||||||
addEndpointToGroup("Java", "verify-pdf");
|
addEndpointToGroup("Java", "verify-pdf");
|
||||||
|
addEndpointToGroup("Java", "flatten");
|
||||||
|
addEndpointToGroup("Java", "unlock-pdf-forms");
|
||||||
|
addEndpointToGroup("Java", "validate-signature");
|
||||||
|
addEndpointToGroup("Java", "text-editor-pdf");
|
||||||
|
addEndpointToGroup("Java", "edit-table-of-contents");
|
||||||
|
addEndpointToGroup("Java", "pdf-to-epub");
|
||||||
|
addEndpointToGroup("Java", "eml-to-pdf");
|
||||||
|
addEndpointToGroup("Java", "handleData");
|
||||||
|
addEndpointToGroup("rar", "pdf-to-cbr");
|
||||||
|
|
||||||
// Javascript
|
// Javascript
|
||||||
addEndpointToGroup("Javascript", "pdf-organizer");
|
addEndpointToGroup("Javascript", "rearrange-pages");
|
||||||
addEndpointToGroup("Javascript", "sign");
|
addEndpointToGroup("Javascript", "sign");
|
||||||
addEndpointToGroup("Javascript", "compare");
|
addEndpointToGroup("Javascript", "compare");
|
||||||
addEndpointToGroup("Javascript", "adjust-contrast");
|
addEndpointToGroup("Javascript", "adjust-contrast");
|
||||||
|
addEndpointToGroup("Javascript", "text-editor-pdf");
|
||||||
|
|
||||||
/* qpdf */
|
/* qpdf */
|
||||||
addEndpointToGroup("qpdf", "repair");
|
addEndpointToGroup("qpdf", "repair");
|
||||||
@@ -498,6 +511,7 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Ghostscript", "compress-pdf");
|
addEndpointToGroup("Ghostscript", "compress-pdf");
|
||||||
addEndpointToGroup("Ghostscript", "crop");
|
addEndpointToGroup("Ghostscript", "crop");
|
||||||
addEndpointToGroup("Ghostscript", "replace-invert-pdf");
|
addEndpointToGroup("Ghostscript", "replace-invert-pdf");
|
||||||
|
addEndpointToGroup("Ghostscript", "scanner-effect");
|
||||||
addEndpointToGroup("Ghostscript", "pdf-to-vector");
|
addEndpointToGroup("Ghostscript", "pdf-to-vector");
|
||||||
addEndpointToGroup("Ghostscript", "vector-to-pdf");
|
addEndpointToGroup("Ghostscript", "vector-to-pdf");
|
||||||
|
|
||||||
@@ -546,6 +560,9 @@ public class EndpointConfiguration {
|
|||||||
// Pdftohtml dependent endpoints
|
// Pdftohtml dependent endpoints
|
||||||
addEndpointToGroup("Pdftohtml", "pdf-to-html");
|
addEndpointToGroup("Pdftohtml", "pdf-to-html");
|
||||||
addEndpointToGroup("Pdftohtml", "pdf-to-markdown");
|
addEndpointToGroup("Pdftohtml", "pdf-to-markdown");
|
||||||
|
|
||||||
|
// Calibre dependent endpoints
|
||||||
|
addEndpointToGroup("Calibre", "pdf-to-epub");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processEnvironmentConfigs() {
|
private void processEnvironmentConfigs() {
|
||||||
|
|||||||
@@ -118,7 +118,8 @@ public class ExternalAppDepConfig {
|
|||||||
|
|
||||||
for (String group : affectedGroups) {
|
for (String group : affectedGroups) {
|
||||||
List<String> affectedFeatures = getAffectedFeatures(group);
|
List<String> affectedFeatures = getAffectedFeatures(group);
|
||||||
endpointConfiguration.disableGroup(group);
|
endpointConfiguration.disableGroup(
|
||||||
|
group, EndpointConfiguration.DisableReason.DEPENDENCY);
|
||||||
log.warn(
|
log.warn(
|
||||||
"Missing dependency: {} - Disabling group: {} (Affected features: {})",
|
"Missing dependency: {} - Disabling group: {} (Affected features: {})",
|
||||||
command,
|
command,
|
||||||
@@ -143,7 +144,8 @@ public class ExternalAppDepConfig {
|
|||||||
commandToGroupMapping.getOrDefault(
|
commandToGroupMapping.getOrDefault(
|
||||||
command, List.of("Weasyprint"));
|
command, List.of("Weasyprint"));
|
||||||
for (String group : affectedGroups) {
|
for (String group : affectedGroups) {
|
||||||
endpointConfiguration.disableGroup(group);
|
endpointConfiguration.disableGroup(
|
||||||
|
group, EndpointConfiguration.DisableReason.DEPENDENCY);
|
||||||
}
|
}
|
||||||
log.warn(
|
log.warn(
|
||||||
"WeasyPrint version {} is below required {} - disabling"
|
"WeasyPrint version {} is below required {} - disabling"
|
||||||
@@ -172,7 +174,8 @@ public class ExternalAppDepConfig {
|
|||||||
List<String> affectedGroups =
|
List<String> affectedGroups =
|
||||||
commandToGroupMapping.getOrDefault(command, List.of("qpdf"));
|
commandToGroupMapping.getOrDefault(command, List.of("qpdf"));
|
||||||
for (String group : affectedGroups) {
|
for (String group : affectedGroups) {
|
||||||
endpointConfiguration.disableGroup(group);
|
endpointConfiguration.disableGroup(
|
||||||
|
group, EndpointConfiguration.DisableReason.DEPENDENCY);
|
||||||
}
|
}
|
||||||
log.warn(
|
log.warn(
|
||||||
"qpdf version {} is below required {} - disabling group(s): {}",
|
"qpdf version {} is below required {} - disabling group(s): {}",
|
||||||
@@ -226,7 +229,8 @@ public class ExternalAppDepConfig {
|
|||||||
int ec = runAndWait(List.of(python, "-c", "import cv2"), DEFAULT_TIMEOUT).exitCode();
|
int ec = runAndWait(List.of(python, "-c", "import cv2"), DEFAULT_TIMEOUT).exitCode();
|
||||||
if (ec != 0) {
|
if (ec != 0) {
|
||||||
List<String> openCVFeatures = getAffectedFeatures("OpenCV");
|
List<String> openCVFeatures = getAffectedFeatures("OpenCV");
|
||||||
endpointConfiguration.disableGroup("OpenCV");
|
endpointConfiguration.disableGroup(
|
||||||
|
"OpenCV", EndpointConfiguration.DisableReason.DEPENDENCY);
|
||||||
log.warn(
|
log.warn(
|
||||||
"OpenCV not available in Python - Disabling OpenCV features: {}",
|
"OpenCV not available in Python - Disabling OpenCV features: {}",
|
||||||
String.join(", ", openCVFeatures));
|
String.join(", ", openCVFeatures));
|
||||||
@@ -236,8 +240,10 @@ public class ExternalAppDepConfig {
|
|||||||
private void disablePythonAndOpenCV(String reason) {
|
private void disablePythonAndOpenCV(String reason) {
|
||||||
List<String> pythonFeatures = getAffectedFeatures("Python");
|
List<String> pythonFeatures = getAffectedFeatures("Python");
|
||||||
List<String> openCVFeatures = getAffectedFeatures("OpenCV");
|
List<String> openCVFeatures = getAffectedFeatures("OpenCV");
|
||||||
endpointConfiguration.disableGroup("Python");
|
endpointConfiguration.disableGroup(
|
||||||
endpointConfiguration.disableGroup("OpenCV");
|
"Python", EndpointConfiguration.DisableReason.DEPENDENCY);
|
||||||
|
endpointConfiguration.disableGroup(
|
||||||
|
"OpenCV", EndpointConfiguration.DisableReason.DEPENDENCY);
|
||||||
log.warn(
|
log.warn(
|
||||||
"Missing dependency: Python (reason: {}) - Disabling Python features: {} and OpenCV"
|
"Missing dependency: Python (reason: {}) - Disabling Python features: {} and OpenCV"
|
||||||
+ " features: {}",
|
+ " features: {}",
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
categoryId: ToolCategoryId.RECOMMENDED_TOOLS,
|
categoryId: ToolCategoryId.RECOMMENDED_TOOLS,
|
||||||
subcategoryId: SubcategoryId.GENERAL,
|
subcategoryId: SubcategoryId.GENERAL,
|
||||||
maxFiles: -1,
|
maxFiles: -1,
|
||||||
|
endpoints: ["multi-tool"],
|
||||||
synonyms: getSynonyms(t, "multiTool"),
|
synonyms: getSynonyms(t, "multiTool"),
|
||||||
supportsAutomate: false,
|
supportsAutomate: false,
|
||||||
automationSettings: null
|
automationSettings: null
|
||||||
@@ -218,6 +219,7 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
description: t("home.sign.desc", "Adds signature to PDF by drawing, text or image"),
|
description: t("home.sign.desc", "Adds signature to PDF by drawing, text or image"),
|
||||||
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
||||||
subcategoryId: SubcategoryId.SIGNING,
|
subcategoryId: SubcategoryId.SIGNING,
|
||||||
|
endpoints: ["sign"],
|
||||||
operationConfig: signOperationConfig,
|
operationConfig: signOperationConfig,
|
||||||
automationSettings: SignSettings, // TODO:: not all settings shown, suggested next tools shown
|
automationSettings: SignSettings, // TODO:: not all settings shown, suggested next tools shown
|
||||||
synonyms: getSynonyms(t, "sign"),
|
synonyms: getSynonyms(t, "sign"),
|
||||||
@@ -230,6 +232,7 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
description: t('home.addText.desc', 'Add custom text anywhere in your PDF'),
|
description: t('home.addText.desc', 'Add custom text anywhere in your PDF'),
|
||||||
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
||||||
subcategoryId: SubcategoryId.GENERAL,
|
subcategoryId: SubcategoryId.GENERAL,
|
||||||
|
endpoints: ["sign"],
|
||||||
operationConfig: signOperationConfig,
|
operationConfig: signOperationConfig,
|
||||||
automationSettings: null,
|
automationSettings: null,
|
||||||
synonyms: getSynonyms(t, 'addText'),
|
synonyms: getSynonyms(t, 'addText'),
|
||||||
@@ -242,6 +245,7 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
description: t('home.addImage.desc', 'Add images anywhere in your PDF'),
|
description: t('home.addImage.desc', 'Add images anywhere in your PDF'),
|
||||||
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
||||||
subcategoryId: SubcategoryId.GENERAL,
|
subcategoryId: SubcategoryId.GENERAL,
|
||||||
|
endpoints: ["add-image"],
|
||||||
operationConfig: signOperationConfig,
|
operationConfig: signOperationConfig,
|
||||||
automationSettings: null,
|
automationSettings: null,
|
||||||
synonyms: getSynonyms(t, 'addImage'),
|
synonyms: getSynonyms(t, 'addImage'),
|
||||||
@@ -255,6 +259,7 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
||||||
subcategoryId: SubcategoryId.GENERAL,
|
subcategoryId: SubcategoryId.GENERAL,
|
||||||
workbench: 'viewer',
|
workbench: 'viewer',
|
||||||
|
endpoints: ["view-pdf"],
|
||||||
operationConfig: signOperationConfig,
|
operationConfig: signOperationConfig,
|
||||||
automationSettings: null,
|
automationSettings: null,
|
||||||
synonyms: getSynonyms(t, 'annotate'),
|
synonyms: getSynonyms(t, 'annotate'),
|
||||||
@@ -393,6 +398,7 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
),
|
),
|
||||||
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
||||||
subcategoryId: SubcategoryId.DOCUMENT_REVIEW,
|
subcategoryId: SubcategoryId.DOCUMENT_REVIEW,
|
||||||
|
endpoints: ["view-pdf"],
|
||||||
synonyms: getSynonyms(t, "read"),
|
synonyms: getSynonyms(t, "read"),
|
||||||
supportsAutomate: false,
|
supportsAutomate: false,
|
||||||
automationSettings: null
|
automationSettings: null
|
||||||
@@ -710,6 +716,8 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
description: t("home.adjustContrast.desc", "Adjust colors and contrast of PDF documents"),
|
description: t("home.adjustContrast.desc", "Adjust colors and contrast of PDF documents"),
|
||||||
categoryId: ToolCategoryId.ADVANCED_TOOLS,
|
categoryId: ToolCategoryId.ADVANCED_TOOLS,
|
||||||
subcategoryId: SubcategoryId.ADVANCED_FORMATTING,
|
subcategoryId: SubcategoryId.ADVANCED_FORMATTING,
|
||||||
|
maxFiles: -1,
|
||||||
|
endpoints: ["adjust-contrast"],
|
||||||
operationConfig: adjustContrastOperationConfig,
|
operationConfig: adjustContrastOperationConfig,
|
||||||
automationSettings: AdjustContrastSingleStepSettings,
|
automationSettings: AdjustContrastSingleStepSettings,
|
||||||
synonyms: getSynonyms(t, "adjustContrast"),
|
synonyms: getSynonyms(t, "adjustContrast"),
|
||||||
@@ -850,6 +858,7 @@ export function useTranslatedToolCatalog(): TranslatedToolCatalog {
|
|||||||
categoryId: ToolCategoryId.RECOMMENDED_TOOLS,
|
categoryId: ToolCategoryId.RECOMMENDED_TOOLS,
|
||||||
subcategoryId: SubcategoryId.GENERAL,
|
subcategoryId: SubcategoryId.GENERAL,
|
||||||
maxFiles: 2,
|
maxFiles: 2,
|
||||||
|
endpoints: ["compare"],
|
||||||
operationConfig: undefined,
|
operationConfig: undefined,
|
||||||
automationSettings: null,
|
automationSettings: null,
|
||||||
synonyms: getSynonyms(t, "compare"),
|
synonyms: getSynonyms(t, "compare"),
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { useMemo } from "react";
|
||||||
import { createToolFlow } from "@app/components/tools/shared/createToolFlow";
|
import { createToolFlow } from "@app/components/tools/shared/createToolFlow";
|
||||||
import CardSelector from "@app/components/shared/CardSelector";
|
import CardSelector from "@app/components/shared/CardSelector";
|
||||||
import SplitSettings from "@app/components/tools/split/SplitSettings";
|
import SplitSettings from "@app/components/tools/split/SplitSettings";
|
||||||
@@ -8,7 +9,8 @@ import { useBaseTool } from "@app/hooks/tools/shared/useBaseTool";
|
|||||||
import { useSplitMethodTips } from "@app/components/tooltips/useSplitMethodTips";
|
import { useSplitMethodTips } from "@app/components/tooltips/useSplitMethodTips";
|
||||||
import { useSplitSettingsTips } from "@app/components/tooltips/useSplitSettingsTips";
|
import { useSplitSettingsTips } from "@app/components/tooltips/useSplitSettingsTips";
|
||||||
import { BaseToolProps, ToolComponent } from "@app/types/tool";
|
import { BaseToolProps, ToolComponent } from "@app/types/tool";
|
||||||
import { type SplitMethod, METHOD_OPTIONS, type MethodOption } from "@app/constants/splitConstants";
|
import { type SplitMethod, METHOD_OPTIONS, type MethodOption, ENDPOINTS } from "@app/constants/splitConstants";
|
||||||
|
import { useMultipleEndpointsEnabled } from "@app/hooks/useEndpointConfig";
|
||||||
|
|
||||||
const Split = (props: BaseToolProps) => {
|
const Split = (props: BaseToolProps) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@@ -20,15 +22,23 @@ const Split = (props: BaseToolProps) => {
|
|||||||
props
|
props
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Check which split endpoints are available
|
||||||
|
const allSplitEndpoints = useMemo(() => Object.values(ENDPOINTS), []);
|
||||||
|
const { endpointStatus } = useMultipleEndpointsEnabled(allSplitEndpoints);
|
||||||
|
|
||||||
|
// Filter METHOD_OPTIONS to only show methods with enabled endpoints
|
||||||
|
const availableMethodOptions = useMemo(() => {
|
||||||
|
return METHOD_OPTIONS.filter(option => {
|
||||||
|
const endpoint = ENDPOINTS[option.value];
|
||||||
|
// If endpoint status is not loaded yet, show all options (optimistic)
|
||||||
|
// If endpoint is explicitly disabled (false), hide the option
|
||||||
|
return endpointStatus[endpoint] !== false;
|
||||||
|
});
|
||||||
|
}, [endpointStatus]);
|
||||||
|
|
||||||
const methodTips = useSplitMethodTips();
|
const methodTips = useSplitMethodTips();
|
||||||
const settingsTips = useSplitSettingsTips(base.params.parameters.method);
|
const settingsTips = useSplitSettingsTips(base.params.parameters.method);
|
||||||
|
|
||||||
// Get tooltip content for a specific method
|
|
||||||
const getMethodTooltip = (option: MethodOption) => {
|
|
||||||
const tooltipContent = useSplitSettingsTips(option.value);
|
|
||||||
return tooltipContent?.tips || [];
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get the method name for the settings step title
|
// Get the method name for the settings step title
|
||||||
const getSettingsTitle = () => {
|
const getSettingsTitle = () => {
|
||||||
if (!base.params.parameters.method) return t("split.steps.settings", "Settings");
|
if (!base.params.parameters.method) return t("split.steps.settings", "Settings");
|
||||||
@@ -54,10 +64,9 @@ const Split = (props: BaseToolProps) => {
|
|||||||
tooltip: methodTips,
|
tooltip: methodTips,
|
||||||
content: (
|
content: (
|
||||||
<CardSelector<SplitMethod, MethodOption>
|
<CardSelector<SplitMethod, MethodOption>
|
||||||
options={METHOD_OPTIONS}
|
options={availableMethodOptions}
|
||||||
onSelect={(method) => base.params.updateParameter('method', method)}
|
onSelect={(method) => base.params.updateParameter('method', method)}
|
||||||
disabled={base.endpointLoading}
|
disabled={base.endpointLoading}
|
||||||
getTooltipContent={getMethodTooltip}
|
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
|||||||
+85
-33
@@ -65,51 +65,103 @@ export default function AdminEndpointsSection() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Common endpoint examples
|
// Complete list of all endpoints from frontend tool registry (alphabetical)
|
||||||
const commonEndpoints = [
|
const commonEndpoints = [
|
||||||
'img-to-pdf',
|
'add-attachments',
|
||||||
'pdf-to-img',
|
'add-image',
|
||||||
'merge-pdfs',
|
|
||||||
'split-pdf',
|
|
||||||
'rotate-pdf',
|
|
||||||
'compress-pdf',
|
|
||||||
'extract-images',
|
|
||||||
'extract-image-scans',
|
|
||||||
'add-watermark',
|
|
||||||
'remove-watermark',
|
|
||||||
'add-password',
|
|
||||||
'remove-password',
|
|
||||||
'change-permissions',
|
|
||||||
'ocr-pdf',
|
|
||||||
'pdf-to-pdfa',
|
|
||||||
'html-to-pdf',
|
|
||||||
'url-to-pdf',
|
|
||||||
'markdown-to-pdf',
|
|
||||||
'get-info-on-pdf',
|
|
||||||
'extract-pdf-metadata',
|
|
||||||
'pdf-to-single-page',
|
|
||||||
'crop',
|
|
||||||
'auto-split-pdf',
|
|
||||||
'sanitize-pdf',
|
|
||||||
'add-page-numbers',
|
'add-page-numbers',
|
||||||
|
'add-password',
|
||||||
|
'add-stamp',
|
||||||
|
'add-watermark',
|
||||||
|
'adjust-contrast',
|
||||||
|
'auto-redact',
|
||||||
'auto-rename',
|
'auto-rename',
|
||||||
'scale-pages',
|
'auto-split-pdf',
|
||||||
'repair',
|
'booklet-imposition',
|
||||||
|
'cert-sign',
|
||||||
|
'compare',
|
||||||
|
'compress-pdf',
|
||||||
|
'crop',
|
||||||
|
'edit-table-of-contents',
|
||||||
|
'eml-to-pdf',
|
||||||
|
'extract-image-scans',
|
||||||
|
'extract-images',
|
||||||
|
'file-to-pdf',
|
||||||
'flatten',
|
'flatten',
|
||||||
|
'get-info-on-pdf',
|
||||||
|
'handleData',
|
||||||
|
'html-to-pdf',
|
||||||
|
'img-to-pdf',
|
||||||
|
'markdown-to-pdf',
|
||||||
|
'merge-pdfs',
|
||||||
|
'multi-page-layout',
|
||||||
|
'multi-tool',
|
||||||
|
'ocr-pdf',
|
||||||
|
'overlay-pdf',
|
||||||
|
'pdf-to-csv',
|
||||||
|
'pdf-to-epub',
|
||||||
|
'pdf-to-html',
|
||||||
|
'pdf-to-img',
|
||||||
|
'pdf-to-markdown',
|
||||||
|
'pdf-to-pdfa',
|
||||||
|
'pdf-to-presentation',
|
||||||
|
'pdf-to-single-page',
|
||||||
|
'pdf-to-text',
|
||||||
|
'pdf-to-word',
|
||||||
|
'pdf-to-xml',
|
||||||
|
'rearrange-pages',
|
||||||
|
'remove-annotations',
|
||||||
'remove-blanks',
|
'remove-blanks',
|
||||||
'compare-pdfs'
|
'remove-cert-sign',
|
||||||
|
'remove-image-pdf',
|
||||||
|
'remove-pages',
|
||||||
|
'remove-password',
|
||||||
|
'repair',
|
||||||
|
'replace-invert-pdf',
|
||||||
|
'rotate-pdf',
|
||||||
|
'sanitize-pdf',
|
||||||
|
'scale-pages',
|
||||||
|
'scanner-effect',
|
||||||
|
'show-javascript',
|
||||||
|
'sign',
|
||||||
|
'split-by-size-or-count',
|
||||||
|
'split-pages',
|
||||||
|
'split-pdf-by-chapters',
|
||||||
|
'split-pdf-by-sections',
|
||||||
|
'text-editor-pdf',
|
||||||
|
'unlock-pdf-forms',
|
||||||
|
'update-metadata',
|
||||||
|
'validate-signature',
|
||||||
|
'view-pdf',
|
||||||
];
|
];
|
||||||
|
|
||||||
// Common endpoint groups
|
// Complete list of functional and tool groups from EndpointConfiguration.java
|
||||||
const commonGroups = [
|
const commonGroups = [
|
||||||
'Conversion',
|
// Functional Groups
|
||||||
|
'PageOps',
|
||||||
|
'Convert',
|
||||||
'Security',
|
'Security',
|
||||||
'Other',
|
'Other',
|
||||||
'Organize',
|
'Advance',
|
||||||
'LibreOffice',
|
// Tool Groups
|
||||||
'CLI',
|
'CLI',
|
||||||
'Python',
|
'Python',
|
||||||
'OpenCV'
|
'OpenCV',
|
||||||
|
'LibreOffice',
|
||||||
|
'Unoconvert',
|
||||||
|
'Java',
|
||||||
|
'Javascript',
|
||||||
|
'qpdf',
|
||||||
|
'Ghostscript',
|
||||||
|
'ImageMagick',
|
||||||
|
'tesseract',
|
||||||
|
'OCRmyPDF',
|
||||||
|
'Weasyprint',
|
||||||
|
'Pdftohtml',
|
||||||
|
'Calibre',
|
||||||
|
'FFmpeg',
|
||||||
|
'veraPDF',
|
||||||
|
'rar',
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user