mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-06-06 18:30:57 +00:00
Merge branch 'main' into session_2025_03_22
This commit is contained in:
commit
bc5312d421
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@ -128,7 +128,7 @@ jobs:
|
|||||||
sudo chmod +x /usr/local/bin/docker-compose
|
sudo chmod +x /usr/local/bin/docker-compose
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
|
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
cache: 'pip' # caching pip dependencies
|
cache: 'pip' # caching pip dependencies
|
||||||
|
2
.github/workflows/check_properties.yml
vendored
2
.github/workflows/check_properties.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
|||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
|
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
|
|
||||||
|
4
.github/workflows/licenses-update.yml
vendored
4
.github/workflows/licenses-update.yml
vendored
@ -24,7 +24,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate GitHub App Token
|
- name: Generate GitHub App Token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7
|
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.GH_APP_ID }}
|
app-id: ${{ secrets.GH_APP_ID }}
|
||||||
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
||||||
@ -38,7 +38,7 @@ jobs:
|
|||||||
java-version: "17"
|
java-version: "17"
|
||||||
distribution: "adopt"
|
distribution: "adopt"
|
||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
|
|
||||||
- name: check the licenses for compatibility
|
- name: check the licenses for compatibility
|
||||||
run: ./gradlew clean checkLicense
|
run: ./gradlew clean checkLicense
|
||||||
|
2
.github/workflows/manage-label.yml
vendored
2
.github/workflows/manage-label.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
|||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Run Labeler
|
- name: Run Labeler
|
||||||
uses: crazy-max/ghaction-github-labeler@31674a3852a9074f2086abcf1c53839d466a47e7 # v5.2.0
|
uses: crazy-max/ghaction-github-labeler@24d110aa46a59976b8a7f35518cb7f14f434c916 # v5.3.0
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
yaml-file: .github/labels.yml
|
yaml-file: .github/labels.yml
|
||||||
|
5
.github/workflows/multiOSReleases.yml
vendored
5
.github/workflows/multiOSReleases.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
|||||||
java-version: "21"
|
java-version: "21"
|
||||||
distribution: "temurin"
|
distribution: "temurin"
|
||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.12
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ jobs:
|
|||||||
java-version: "21"
|
java-version: "21"
|
||||||
distribution: "temurin"
|
distribution: "temurin"
|
||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.12
|
||||||
|
|
||||||
@ -180,6 +180,7 @@ jobs:
|
|||||||
mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.version }}.exe" "./binaries/Stirling-PDF-win-installer.exe"
|
mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.version }}.exe" "./binaries/Stirling-PDF-win-installer.exe"
|
||||||
elif [ "${{ matrix.os }}" = "macos-latest" ]; then
|
elif [ "${{ matrix.os }}" = "macos-latest" ]; then
|
||||||
mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.versionMac }}.dmg" "./binaries/Stirling-PDF-mac-installer.dmg"
|
mv "./build/jpackage/Stirling-PDF-${{ needs.read_versions.outputs.versionMac }}.dmg" "./binaries/Stirling-PDF-mac-installer.dmg"
|
||||||
|
mv "./build/jpackage/Stirling-PDF-x86_64-${{ needs.read_versions.outputs.versionMac }}.dmg" "./binaries/Stirling-PDF-mac-x86_64-installer.dmg"
|
||||||
else
|
else
|
||||||
mv "./build/jpackage/stirling-pdf_${{ needs.read_versions.outputs.version }}-1_amd64.deb" "./binaries/Stirling-PDF-linux-installer.deb"
|
mv "./build/jpackage/stirling-pdf_${{ needs.read_versions.outputs.version }}-1_amd64.deb" "./binaries/Stirling-PDF-linux-installer.deb"
|
||||||
fi
|
fi
|
||||||
|
4
.github/workflows/pre_commit.yml
vendored
4
.github/workflows/pre_commit.yml
vendored
@ -22,7 +22,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate GitHub App Token
|
- name: Generate GitHub App Token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7
|
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.GH_APP_ID }}
|
app-id: ${{ secrets.GH_APP_ID }}
|
||||||
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
||||||
@ -42,7 +42,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
|
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||||
with:
|
with:
|
||||||
python-version: 3.12
|
python-version: 3.12
|
||||||
cache: 'pip' # caching pip dependencies
|
cache: 'pip' # caching pip dependencies
|
||||||
|
2
.github/workflows/push-docker.yml
vendored
2
.github/workflows/push-docker.yml
vendored
@ -30,7 +30,7 @@ jobs:
|
|||||||
java-version: "17"
|
java-version: "17"
|
||||||
distribution: "temurin"
|
distribution: "temurin"
|
||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.12
|
||||||
|
|
||||||
|
2
.github/workflows/releaseArtifacts.yml
vendored
2
.github/workflows/releaseArtifacts.yml
vendored
@ -35,7 +35,7 @@ jobs:
|
|||||||
java-version: "17"
|
java-version: "17"
|
||||||
distribution: "temurin"
|
distribution: "temurin"
|
||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.12
|
gradle-version: 8.12
|
||||||
|
|
||||||
|
2
.github/workflows/sonarqube.yml
vendored
2
.github/workflows/sonarqube.yml
vendored
@ -27,7 +27,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup Gradle
|
- name: Setup Gradle
|
||||||
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
|
uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
|
|
||||||
- name: Build and analyze with Gradle
|
- name: Build and analyze with Gradle
|
||||||
env:
|
env:
|
||||||
|
2
.github/workflows/swagger.yml
vendored
2
.github/workflows/swagger.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
|||||||
java-version: "17"
|
java-version: "17"
|
||||||
distribution: "temurin"
|
distribution: "temurin"
|
||||||
|
|
||||||
- uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
|
- uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
|
||||||
|
|
||||||
- name: Generate Swagger documentation
|
- name: Generate Swagger documentation
|
||||||
run: ./gradlew generateOpenApiDocs
|
run: ./gradlew generateOpenApiDocs
|
||||||
|
6
.github/workflows/sync_files.yml
vendored
6
.github/workflows/sync_files.yml
vendored
@ -30,7 +30,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate GitHub App Token
|
- name: Generate GitHub App Token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7
|
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.GH_APP_ID }}
|
app-id: ${{ secrets.GH_APP_ID }}
|
||||||
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
||||||
@ -63,7 +63,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate GitHub App Token
|
- name: Generate GitHub App Token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@af35edadc00be37caa72ed9f3e6d5f7801bfdf09 # v1.11.7
|
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1.12.0
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.GH_APP_ID }}
|
app-id: ${{ vars.GH_APP_ID }}
|
||||||
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
||||||
@ -71,7 +71,7 @@ jobs:
|
|||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
|
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
cache: 'pip' # caching pip dependencies
|
cache: 'pip' # caching pip dependencies
|
||||||
|
@ -143,7 +143,7 @@ Stirling-PDF currently supports 39 languages!
|
|||||||
| Portuguese (Português) (pt_PT) |  |
|
| Portuguese (Português) (pt_PT) |  |
|
||||||
| Portuguese Brazilian (Português) (pt_BR) |  |
|
| Portuguese Brazilian (Português) (pt_BR) |  |
|
||||||
| Romanian (Română) (ro_RO) |  |
|
| Romanian (Română) (ro_RO) |  |
|
||||||
| Russian (Русский) (ru_RU) |  |
|
| Russian (Русский) (ru_RU) |  |
|
||||||
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
||||||
| Simplified Chinese (简体中文) (zh_CN) |  |
|
| Simplified Chinese (简体中文) (zh_CN) |  |
|
||||||
| Slovakian (Slovensky) (sk_SK) |  |
|
| Slovakian (Slovensky) (sk_SK) |  |
|
||||||
@ -154,7 +154,7 @@ Stirling-PDF currently supports 39 languages!
|
|||||||
| Tibetan (བོད་ཡིག་) (zh_BO) |  |
|
| Tibetan (བོད་ཡིག་) (zh_BO) |  |
|
||||||
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
||||||
| Turkish (Türkçe) (tr_TR) |  |
|
| Turkish (Türkçe) (tr_TR) |  |
|
||||||
| Ukrainian (Українська) (uk_UA) |  |
|
| Ukrainian (Українська) (uk_UA) |  |
|
||||||
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
||||||
|
|
||||||
|
|
||||||
|
142
build.gradle
142
build.gradle
@ -9,19 +9,23 @@ plugins {
|
|||||||
id "com.github.jk1.dependency-license-report" version "2.9"
|
id "com.github.jk1.dependency-license-report" version "2.9"
|
||||||
//id "nebula.lint" version "19.0.3"
|
//id "nebula.lint" version "19.0.3"
|
||||||
id("org.panteleyev.jpackageplugin") version "1.6.1"
|
id("org.panteleyev.jpackageplugin") version "1.6.1"
|
||||||
id "org.sonarqube" version "6.0.1.5171"
|
id "org.sonarqube" version "6.1.0.5360"
|
||||||
}
|
}
|
||||||
|
|
||||||
import com.github.jk1.license.render.*
|
import com.github.jk1.license.render.*
|
||||||
|
import org.gradle.internal.os.OperatingSystem
|
||||||
|
import java.nio.file.Files
|
||||||
|
import java.time.Year
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
springBootVersion = "3.4.4"
|
springBootVersion = "3.4.4"
|
||||||
pdfboxVersion = "3.0.4"
|
pdfboxVersion = "3.0.4"
|
||||||
imageioVersion = "3.12.0"
|
imageioVersion = "3.12.0"
|
||||||
lombokVersion = "1.18.36"
|
lombokVersion = "1.18.38"
|
||||||
bouncycastleVersion = "1.80"
|
bouncycastleVersion = "1.80"
|
||||||
springSecuritySamlVersion = "6.4.4"
|
springSecuritySamlVersion = "6.4.4"
|
||||||
openSamlVersion = "4.3.2"
|
openSamlVersion = "4.3.2"
|
||||||
|
tempJrePath = null
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "stirling.software"
|
group = "stirling.software"
|
||||||
@ -104,8 +108,8 @@ openApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//0.11.5 to 2024.11.5
|
//0.11.5 to 2024.11.5
|
||||||
def getMacVersion(String version) {
|
static def getMacVersion(String version) {
|
||||||
def currentYear = java.time.Year.now().getValue()
|
def currentYear = Year.now().getValue()
|
||||||
def versionParts = version.split("\\.", 2)
|
def versionParts = version.split("\\.", 2)
|
||||||
return "${currentYear}.${versionParts.length > 1 ? versionParts[1] : versionParts[0]}"
|
return "${currentYear}.${versionParts.length > 1 ? versionParts[1] : versionParts[0]}"
|
||||||
}
|
}
|
||||||
@ -116,6 +120,7 @@ jpackage {
|
|||||||
mainJar = "Stirling-PDF-${project.version}.jar"
|
mainJar = "Stirling-PDF-${project.version}.jar"
|
||||||
appName = "Stirling-PDF"
|
appName = "Stirling-PDF"
|
||||||
appVersion = project.version
|
appVersion = project.version
|
||||||
|
// appVersion = "2005.45.1"
|
||||||
vendor = "Stirling-Software"
|
vendor = "Stirling-Software"
|
||||||
appDescription = "Stirling PDF - Your Local PDF Editor"
|
appDescription = "Stirling PDF - Your Local PDF Editor"
|
||||||
icon = "src/main/resources/static/favicon.ico"
|
icon = "src/main/resources/static/favicon.ico"
|
||||||
@ -162,22 +167,22 @@ jpackage {
|
|||||||
icon = "src/main/resources/static/favicon.icns"
|
icon = "src/main/resources/static/favicon.icns"
|
||||||
type = "dmg"
|
type = "dmg"
|
||||||
macPackageIdentifier = "com.stirling.software.pdf"
|
macPackageIdentifier = "com.stirling.software.pdf"
|
||||||
macPackageName = "Stirling-PDF"
|
macPackageName = "Stirling-PDF_aarch64"
|
||||||
macAppCategory = "public.app-category.productivity"
|
macAppCategory = "public.app-category.productivity"
|
||||||
macSign = false // Enable signing
|
macSign = false // Enable signing
|
||||||
macAppStore = false // Not targeting App Store initially
|
macAppStore = false // Not targeting App Store initially
|
||||||
|
//
|
||||||
//installDir = "Applications"
|
// //installDir = "Applications"
|
||||||
|
//
|
||||||
// Add license and other documentation to DMG
|
// // Add license and other documentation to DMG
|
||||||
/*macDmgContent = [
|
// /*macDmgContent = [
|
||||||
"README.md",
|
// "README.md",
|
||||||
"LICENSE",
|
// "LICENSE",
|
||||||
"CHANGELOG.md"
|
// "CHANGELOG.md"
|
||||||
]*/
|
// ]*/
|
||||||
|
//
|
||||||
// Enable Mac-specific entitlements
|
// // Enable Mac-specific entitlements
|
||||||
//macEntitlements = "entitlements.plist" // You'll need to create this file
|
// //macEntitlements = "entitlements.plist" // You'll need to create this file
|
||||||
}
|
}
|
||||||
|
|
||||||
// Linux-specific configuration
|
// Linux-specific configuration
|
||||||
@ -223,6 +228,107 @@ jpackage {
|
|||||||
licenseFile = "LICENSE"
|
licenseFile = "LICENSE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.register('jpackageMacX64') {
|
||||||
|
group = 'distribution'
|
||||||
|
description = 'Packages app for MacOS x86_64'
|
||||||
|
|
||||||
|
if (OperatingSystem.current().isMacOsX()) {
|
||||||
|
println "MacOS detected. Downloading temp JRE."
|
||||||
|
dependsOn("downloadTempJre")
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
doLast {
|
||||||
|
def jrePath = project.ext.tempJrePath
|
||||||
|
|
||||||
|
if (!jrePath) {
|
||||||
|
throw new GradleException("JRE path not found.")
|
||||||
|
}
|
||||||
|
|
||||||
|
def outputStream = new ByteArrayOutputStream()
|
||||||
|
def errorStream = new ByteArrayOutputStream()
|
||||||
|
|
||||||
|
def result = exec {
|
||||||
|
commandLine 'jpackage',
|
||||||
|
'--type', 'dmg',
|
||||||
|
'--name', 'Stirling-PDF-x86_64',
|
||||||
|
'--input', 'build/libs',
|
||||||
|
'--main-jar', "Stirling-PDF-${project.version}.jar",
|
||||||
|
'--main-class', 'stirling.software.SPDF.SPDFApplication',
|
||||||
|
'--runtime-image', file(jrePath + "/zulu-17.jre/Contents/Home"),
|
||||||
|
'--dest', 'build/jpackage',
|
||||||
|
'--icon', 'src/main/resources/static/favicon.icns',
|
||||||
|
'--app-version', getMacVersion(project.version.toString()),
|
||||||
|
'--mac-package-name', 'Stirling-PDF',
|
||||||
|
'--mac-package-identifier', 'com.stirling.software.pdf',
|
||||||
|
'--mac-app-category', 'public.app-category.productivity'
|
||||||
|
standardOutput = outputStream
|
||||||
|
errorOutput = errorStream
|
||||||
|
ignoreExitValue = true
|
||||||
|
}
|
||||||
|
|
||||||
|
def stdout = outputStream.toString("UTF-8")
|
||||||
|
def stderr = errorStream.toString("UTF-8")
|
||||||
|
|
||||||
|
if (!stdout.isBlank()) {
|
||||||
|
println "📝 jpackage stdout:\n$stdout"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.exitValue != 0) {
|
||||||
|
throw new GradleException("❌ jpackage failed with exit code ${result.exitValue}.\n\n$stderr")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
jpackage.finalizedBy(jpackageMacX64)
|
||||||
|
|
||||||
|
tasks.register('downloadTempJre') {
|
||||||
|
group = 'distribution'
|
||||||
|
description = 'Downloads and extracts a temporary JRE'
|
||||||
|
|
||||||
|
doLast {
|
||||||
|
try {
|
||||||
|
def jreUrl = 'https://cdn.azul.com/zulu/bin/zulu17.56.15-ca-jre17.0.14-macosx_x64.tar.gz'
|
||||||
|
def tmpDir = Files.createTempDirectory('zulu-jre').toFile()
|
||||||
|
def jreArchive = new File(tmpDir, 'jre.tar.gz')
|
||||||
|
def jreDir = new File(tmpDir, 'jre')
|
||||||
|
|
||||||
|
println "🔽 Downloading JRE to $jreArchive..."
|
||||||
|
jreArchive.withOutputStream { out ->
|
||||||
|
new URI(jreUrl).toURL().withInputStream { from -> out << from }
|
||||||
|
}
|
||||||
|
|
||||||
|
println "📦 Extracting JRE to $jreDir..."
|
||||||
|
jreDir.mkdirs()
|
||||||
|
providers.exec {
|
||||||
|
commandLine 'tar', '-xzf', jreArchive.absolutePath, '-C', jreDir.absolutePath, '--strip-components=1'
|
||||||
|
}.result.get()
|
||||||
|
|
||||||
|
println "✅ JRE ready at: $jreDir"
|
||||||
|
ext.tempJrePath = jreDir.absolutePath
|
||||||
|
project.ext.tempJrePath = jreDir.absolutePath
|
||||||
|
} catch (Exception e) {
|
||||||
|
println "Failed to download JRE. ${e.getLocalizedMessage()}"
|
||||||
|
cleanTempJre
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register('cleanTempJre') {
|
||||||
|
dependsOn('jpackageMacX64')
|
||||||
|
group = 'distribution'
|
||||||
|
description = 'Deletes the temporary JRE'
|
||||||
|
|
||||||
|
doLast {
|
||||||
|
def path = project.ext.tempJrePath
|
||||||
|
|
||||||
|
if (path && new File("$path").exists()) {
|
||||||
|
println "🧹 Cleaning up temporary JRE: $path"
|
||||||
|
new File("$path").parentFile.deleteDir()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
launch4j {
|
launch4j {
|
||||||
icon = "${projectDir}/src/main/resources/static/favicon.ico"
|
icon = "${projectDir}/src/main/resources/static/favicon.ico"
|
||||||
@ -461,12 +567,12 @@ jar {
|
|||||||
attributes "Implementation-Title": "Stirling-PDF",
|
attributes "Implementation-Title": "Stirling-PDF",
|
||||||
"Implementation-Version": project.version
|
"Implementation-Version": project.version
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.named("test") {
|
tasks.named("test") {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
}
|
}
|
||||||
|
|
||||||
task printVersion {
|
task printVersion {
|
||||||
doLast {
|
doLast {
|
||||||
println project.version
|
println project.version
|
||||||
|
@ -186,7 +186,6 @@ public class OAuth2Configuration {
|
|||||||
oauth.getClientSecret(),
|
oauth.getClientSecret(),
|
||||||
oauth.getScopes(),
|
oauth.getScopes(),
|
||||||
UsernameAttribute.valueOf(oauth.getUseAsUsername().toUpperCase()),
|
UsernameAttribute.valueOf(oauth.getUseAsUsername().toUpperCase()),
|
||||||
oauth.getLogoutUrl(),
|
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null);
|
null);
|
||||||
|
@ -122,7 +122,8 @@ public class OtherWebController {
|
|||||||
return Arrays.stream(files)
|
return Arrays.stream(files)
|
||||||
.filter(file -> file.getName().endsWith(".traineddata"))
|
.filter(file -> file.getName().endsWith(".traineddata"))
|
||||||
.map(file -> file.getName().replace(".traineddata", ""))
|
.map(file -> file.getName().replace(".traineddata", ""))
|
||||||
.filter(lang -> !lang.equalsIgnoreCase("osd")).sorted()
|
.filter(lang -> !lang.equalsIgnoreCase("osd"))
|
||||||
|
.sorted()
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +230,6 @@ public class ApplicationProperties {
|
|||||||
private Collection<String> scopes = new ArrayList<>();
|
private Collection<String> scopes = new ArrayList<>();
|
||||||
private String provider;
|
private String provider;
|
||||||
private Client client = new Client();
|
private Client client = new Client();
|
||||||
private String logoutUrl;
|
|
||||||
|
|
||||||
public void setScopes(String scopes) {
|
public void setScopes(String scopes) {
|
||||||
List<String> scopesList =
|
List<String> scopesList =
|
||||||
|
@ -29,7 +29,6 @@ public class GitHubProvider extends Provider {
|
|||||||
clientSecret,
|
clientSecret,
|
||||||
scopes,
|
scopes,
|
||||||
useAsUsername != null ? useAsUsername : UsernameAttribute.LOGIN,
|
useAsUsername != null ? useAsUsername : UsernameAttribute.LOGIN,
|
||||||
null,
|
|
||||||
AUTHORIZATION_URI,
|
AUTHORIZATION_URI,
|
||||||
TOKEN_URI,
|
TOKEN_URI,
|
||||||
USER_INFO_URI);
|
USER_INFO_URI);
|
||||||
|
@ -30,7 +30,6 @@ public class GoogleProvider extends Provider {
|
|||||||
clientSecret,
|
clientSecret,
|
||||||
scopes,
|
scopes,
|
||||||
useAsUsername,
|
useAsUsername,
|
||||||
null,
|
|
||||||
AUTHORIZATION_URI,
|
AUTHORIZATION_URI,
|
||||||
TOKEN_URI,
|
TOKEN_URI,
|
||||||
USER_INFO_URI);
|
USER_INFO_URI);
|
||||||
|
@ -29,7 +29,6 @@ public class KeycloakProvider extends Provider {
|
|||||||
useAsUsername,
|
useAsUsername,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null,
|
|
||||||
null);
|
null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ public class Provider {
|
|||||||
private String clientSecret;
|
private String clientSecret;
|
||||||
private Collection<String> scopes;
|
private Collection<String> scopes;
|
||||||
private UsernameAttribute useAsUsername;
|
private UsernameAttribute useAsUsername;
|
||||||
private String logoutUrl;
|
|
||||||
private String authorizationUri;
|
private String authorizationUri;
|
||||||
private String tokenUri;
|
private String tokenUri;
|
||||||
private String userInfoUri;
|
private String userInfoUri;
|
||||||
@ -38,7 +37,6 @@ public class Provider {
|
|||||||
String clientSecret,
|
String clientSecret,
|
||||||
Collection<String> scopes,
|
Collection<String> scopes,
|
||||||
UsernameAttribute useAsUsername,
|
UsernameAttribute useAsUsername,
|
||||||
String logoutUrl,
|
|
||||||
String authorizationUri,
|
String authorizationUri,
|
||||||
String tokenUri,
|
String tokenUri,
|
||||||
String userInfoUri) {
|
String userInfoUri) {
|
||||||
@ -50,7 +48,6 @@ public class Provider {
|
|||||||
this.scopes = scopes == null ? new ArrayList<>() : scopes;
|
this.scopes = scopes == null ? new ArrayList<>() : scopes;
|
||||||
this.useAsUsername =
|
this.useAsUsername =
|
||||||
useAsUsername != null ? validateUsernameAttribute(useAsUsername) : EMAIL;
|
useAsUsername != null ? validateUsernameAttribute(useAsUsername) : EMAIL;
|
||||||
this.logoutUrl = logoutUrl;
|
|
||||||
this.authorizationUri = authorizationUri;
|
this.authorizationUri = authorizationUri;
|
||||||
this.tokenUri = tokenUri;
|
this.tokenUri = tokenUri;
|
||||||
this.userInfoUri = userInfoUri;
|
this.userInfoUri = userInfoUri;
|
||||||
|
@ -83,6 +83,7 @@ loading=Loading...
|
|||||||
addToDoc=Add to Document
|
addToDoc=Add to Document
|
||||||
reset=Reset
|
reset=Reset
|
||||||
apply=Apply
|
apply=Apply
|
||||||
|
noFileSelected=No file selected. Please upload one.
|
||||||
|
|
||||||
legal.privacy=Privacy Policy
|
legal.privacy=Privacy Policy
|
||||||
legal.terms=Terms and Conditions
|
legal.terms=Terms and Conditions
|
||||||
|
@ -83,6 +83,7 @@ loading=Loading...
|
|||||||
addToDoc=Add to Document
|
addToDoc=Add to Document
|
||||||
reset=Reset
|
reset=Reset
|
||||||
apply=Apply
|
apply=Apply
|
||||||
|
noFileSelected=No file selected. Please upload one.
|
||||||
|
|
||||||
legal.privacy=Privacy Policy
|
legal.privacy=Privacy Policy
|
||||||
legal.terms=Terms and Conditions
|
legal.terms=Terms and Conditions
|
||||||
|
@ -35,6 +35,7 @@ function setupFileInput(chooser) {
|
|||||||
const pdfPrompt = chooser.getAttribute('data-bs-pdf-prompt');
|
const pdfPrompt = chooser.getAttribute('data-bs-pdf-prompt');
|
||||||
const inputContainerId = chooser.getAttribute('data-bs-element-container-id');
|
const inputContainerId = chooser.getAttribute('data-bs-element-container-id');
|
||||||
const showUploads = chooser.getAttribute('data-bs-show-uploads') === "true";
|
const showUploads = chooser.getAttribute('data-bs-show-uploads') === "true";
|
||||||
|
const noFileSelectedPrompt = chooser.getAttribute('data-bs-no-file-selected');
|
||||||
|
|
||||||
let inputContainer = document.getElementById(inputContainerId);
|
let inputContainer = document.getElementById(inputContainerId);
|
||||||
const input = document.getElementById(elementId);
|
const input = document.getElementById(elementId);
|
||||||
@ -58,6 +59,12 @@ function setupFileInput(chooser) {
|
|||||||
inputBtn.click();
|
inputBtn.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Handle form validation if the input is left empty
|
||||||
|
input.addEventListener("invalid", (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
alert(noFileSelectedPrompt);
|
||||||
|
});
|
||||||
|
|
||||||
const dragenterListener = function () {
|
const dragenterListener = function () {
|
||||||
dragCounter++;
|
dragCounter++;
|
||||||
if (!overlay) {
|
if (!overlay) {
|
||||||
|
@ -228,7 +228,7 @@
|
|||||||
loading: '[[#{loading}]]'
|
loading: '[[#{loading}]]'
|
||||||
};</script>
|
};</script>
|
||||||
<div class="custom-file-chooser mb-3"
|
<div class="custom-file-chooser mb-3"
|
||||||
th:attr="data-bs-unique-id=${name}, data-bs-element-id=${name+'-input'}, data-bs-element-container-id=${name+'-input-container'}, data-bs-show-uploads=${showUploads}, data-bs-files-selected=#{filesSelected}, data-bs-pdf-prompt=#{pdfPrompt}">
|
th:attr="data-bs-unique-id=${name}, data-bs-element-id=${name+'-input'}, data-bs-element-container-id=${name+'-input-container'}, data-bs-show-uploads=${showUploads}, data-bs-files-selected=#{filesSelected}, data-bs-pdf-prompt=#{pdfPrompt}, data-bs-no-file-selected=#{noFileSelected}">
|
||||||
<div class="mb-3 d-flex flex-row justify-content-center align-items-center flex-wrap input-container"
|
<div class="mb-3 d-flex flex-row justify-content-center align-items-center flex-wrap input-container"
|
||||||
th:name="${name}+'-input'" th:id="${name}+'-input-container'" th:data-text="#{fileChooser.hoveredDragAndDrop}">
|
th:name="${name}+'-input'" th:id="${name}+'-input-container'" th:data-text="#{fileChooser.hoveredDragAndDrop}">
|
||||||
<label class="file-input-btn d-none">
|
<label class="file-input-btn d-none">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user