mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-21 15:34:27 +00:00
Compare commits
80
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b9f847fd4 | ||
|
|
1712d31a5c | ||
|
|
8d732e19ce | ||
|
|
264e1590c2 | ||
|
|
3e8d8a9c76 | ||
|
|
5bcecf2976 | ||
|
|
af99135172 | ||
|
|
a02224640b | ||
|
|
04fe64b9e0 | ||
|
|
44434aa404 | ||
|
|
35ac351541 | ||
|
|
1eb70aeea7 | ||
|
|
abcbefdd2c | ||
|
|
7af6c79b80 | ||
|
|
193aa1887d | ||
|
|
0ce6008576 | ||
|
|
0bf3e0a071 | ||
|
|
3d82e9a97f | ||
|
|
bdab18b7c3 | ||
|
|
688d1a4a24 | ||
|
|
56e655c5a9 | ||
|
|
4c9dbb60fe | ||
|
|
7ddedea5c2 | ||
|
|
fc76f5f83f | ||
|
|
bfc8542551 | ||
|
|
24a20911f1 | ||
|
|
b681c26d72 | ||
|
|
34f5c06795 | ||
|
|
f4928fd981 | ||
|
|
f748bfd953 | ||
|
|
cb689946ed | ||
|
|
38bdf6d0e4 | ||
|
|
409209fd89 | ||
|
|
1fd44ff651 | ||
|
|
9bb19b0130 | ||
|
|
1b5319f706 | ||
|
|
33b4aa5ba3 | ||
|
|
1879c6fa77 | ||
|
|
8b4c4dca8e | ||
|
|
32c0327058 | ||
|
|
3be6b6eceb | ||
|
|
1ff01e17f4 | ||
|
|
c932810bd8 | ||
|
|
4b6c4d1ce4 | ||
|
|
3d76ed5048 | ||
|
|
47d2900f37 | ||
|
|
95f5c7aecd | ||
|
|
bda019f0b4 | ||
|
|
69e87c067e | ||
|
|
fc7cf0da2d | ||
|
|
c3de54f256 | ||
|
|
40f0a363c9 | ||
|
|
09e8cc7fdf | ||
|
|
b4ea03a7cd | ||
|
|
a30e887177 | ||
|
|
331f66db0c | ||
|
|
dd5827204c | ||
|
|
8bee60975e | ||
|
|
f96a03ae30 | ||
|
|
41ce350b61 | ||
|
|
64b0e63b21 | ||
|
|
6c62b4d293 | ||
|
|
3f312b183e | ||
|
|
719a91692a | ||
|
|
85b7265b95 | ||
|
|
fbdf1b1bdb | ||
|
|
ae2fd74411 | ||
|
|
49ca7f4891 | ||
|
|
d5d992b1c2 | ||
|
|
01b30b173e | ||
|
|
be4a39c628 | ||
|
|
e63a0e8ee8 | ||
|
|
6c925d6a1f | ||
|
|
602c206dae | ||
|
|
426b33ae1a | ||
|
|
8e52161fa4 | ||
|
|
f1540e13eb | ||
|
|
2c2165cb22 | ||
|
|
03cb5f6be9 | ||
|
|
8a98048835 |
@@ -48,7 +48,7 @@ runs:
|
|||||||
echo "client-secret=${{ inputs.client-secret }}" >> "$GITHUB_OUTPUT"
|
echo "client-secret=${{ inputs.client-secret }}" >> "$GITHUB_OUTPUT"
|
||||||
shell: bash
|
shell: bash
|
||||||
- name: Sign DLLs with Azure Trusted Signing
|
- name: Sign DLLs with Azure Trusted Signing
|
||||||
uses: azure/artifact-signing-action@87c2e83e6868da99d3380aa309851b32ed9a8346 # v1.1.0
|
uses: azure/artifact-signing-action@c7ab2a863ab5f9a846ddb8265964877ef296ee82 # v2.0.0
|
||||||
with:
|
with:
|
||||||
files-folder: ${{ inputs.base-dir }}
|
files-folder: ${{ inputs.base-dir }}
|
||||||
files-folder-filter: ${{ inputs.file-extensions }}
|
files-folder-filter: ${{ inputs.file-extensions }}
|
||||||
|
|||||||
@@ -10,10 +10,8 @@ updates:
|
|||||||
- dependency-name: "jakarta.inject:jakarta.inject-api"
|
- dependency-name: "jakarta.inject:jakarta.inject-api"
|
||||||
versions: ["2.0.1.MR"]
|
versions: ["2.0.1.MR"]
|
||||||
- dependency-name: "org.openjfx:*"
|
- dependency-name: "org.openjfx:*"
|
||||||
update-types: ["version-update:semver-major"]
|
- dependency-name: "com.fasterxml.jackson.*"
|
||||||
# due to https://github.com/fabriciorby/maven-surefire-junit5-tree-reporter/issues/68
|
versions: [ "[2.22,)" ] # 2.21.x is LTS, see https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.21
|
||||||
- dependency-name: "org.apache.maven.plugins:maven-surefire-plugin"
|
|
||||||
versions: [ "3.5.4", "3.5.5" ]
|
|
||||||
groups:
|
groups:
|
||||||
maven-dependencies:
|
maven-dependencies:
|
||||||
patterns:
|
patterns:
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ flowchart TD
|
|||||||
| Job | Runs on | Description |
|
| Job | Runs on | Description |
|
||||||
|-----|---------|-------------|
|
|-----|---------|-------------|
|
||||||
| **get-version** | ubuntu | Parses the tag into semver components (`semVerNum`, `semVerSuffix`, `revNum`, `versionType`). The release is aborted if not an alpha, beta, rc or 'stable' release. |
|
| **get-version** | ubuntu | Parses the tag into semver components (`semVerNum`, `semVerSuffix`, `revNum`, `versionType`). The release is aborted if not an alpha, beta, rc or 'stable' release. |
|
||||||
| **create-release-draft** | ubuntu | Checks out the repo, verifies the tag is **signed** and lives on a `main` or `release/*` branch. Runs `mvn verify` (with `xvfb-run`). Creates a GitHub Release **draft** using the [release body template](../release-body.md.template). Downloads and GPG-signs the source tarball. |
|
| **create-release-draft** | ubuntu | Checks out the repo, verifies the tag is **signed** and lives on a `main` or `release/*` branch. Runs `./mvnw verify` (with `xvfb-run`). Creates a GitHub Release **draft** using the [release body template](../release-body.md.template). Downloads and GPG-signs the source tarball. |
|
||||||
| **build-exe-and-msi** | windows | Calls [`win-exe.yml`](win-exe.yml). Builds the MSI and EXE bundle installer for x64 Windows. Code-signed via Azure Trusted Signing, GPG-signed, and uploaded to the draft release. Outputs SHA-256 checksums. |
|
| **build-exe-and-msi** | windows | Calls [`win-exe.yml`](win-exe.yml). Builds the MSI and EXE bundle installer for x64 Windows. Code-signed via Azure Trusted Signing, GPG-signed, and uploaded to the draft release. Outputs SHA-256 checksums. |
|
||||||
| **build-dmg-arm64** | macos-15 | Calls [`mac-dmg.yml`](mac-dmg.yml). Builds the DMG for Apple Silicon. Code-signed, notarized with Apple, GPG-signed, and uploaded. Outputs SHA-256 checksum. |
|
| **build-dmg-arm64** | macos-15 | Calls [`mac-dmg.yml`](mac-dmg.yml). Builds the DMG for Apple Silicon. Code-signed, notarized with Apple, GPG-signed, and uploaded. Outputs SHA-256 checksum. |
|
||||||
| **build-dmg-x64** | macos-15-large | Calls [`mac-dmg-x64.yml`](mac-dmg-x64.yml). Same as above but for Intel Macs. Uses macFUSE instead of FUSE-T. |
|
| **build-dmg-x64** | macos-15-large | Calls [`mac-dmg-x64.yml`](mac-dmg-x64.yml). Same as above but for Intel Macs. Uses macFUSE instead of FUSE-T. |
|
||||||
|
|||||||
@@ -48,9 +48,12 @@ on:
|
|||||||
- 'dist/linux/common/**'
|
- 'dist/linux/common/**'
|
||||||
- 'dist/linux/resources/**'
|
- 'dist/linux/resources/**'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: '25.0.2+10.0.LTS'
|
JAVA_VERSION: '26.0.1+8'
|
||||||
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
||||||
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
||||||
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
||||||
@@ -66,18 +69,18 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_linux-x64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_linux-x64_bin-jmods.zip'
|
||||||
openjfx-sha: 'e0a9c29d8cf3af9b8b48848b43f87b5785bc107c53a951b19668ce05842bba1b'
|
openjfx-sha: '47035c653863a8e4be3dc6f142b8dbd84b4bb1efc9a8cbc68413e6a5ff5e9f50'
|
||||||
appimagetool-sha: 'ed4ce84f0d9caff66f50bcca6ff6f35aae54ce8135408b3fa33abfc3cb384eb0'
|
appimagetool-sha: 'ed4ce84f0d9caff66f50bcca6ff6f35aae54ce8135408b3fa33abfc3cb384eb0'
|
||||||
- os: ubuntu-24.04-arm
|
- os: ubuntu-24.04-arm
|
||||||
arch: aarch64
|
arch: aarch64
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_linux-aarch64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_linux-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: 'c3408f818693cce09e59829a8e862a82c7695fdfcd585c41cfd527f5fc3fe646'
|
openjfx-sha: 'e3fd682354346845d2944a2da2b1ff2b6cb9259d92027f2f9c121b9b93c5e42f'
|
||||||
appimagetool-sha: 'f0837e7448a0c1e4e650a93bb3e85802546e60654ef287576f46c71c126a9158'
|
appimagetool-sha: 'f0837e7448a0c1e4e650a93bb3e85802546e60654ef287576f46c71c126a9158'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
@@ -95,7 +98,7 @@ jobs:
|
|||||||
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
||||||
JMOD_VERSION=${JMOD_VERSION#*@}
|
JMOD_VERSION=${JMOD_VERSION#*@}
|
||||||
JMOD_VERSION=${JMOD_VERSION%%.*}
|
JMOD_VERSION=${JMOD_VERSION%%.*}
|
||||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
POM_JFX_VERSION=$(./mvnw help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||||
|
|
||||||
@@ -104,9 +107,9 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Set version
|
- name: Set version
|
||||||
run : mvn versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
run : ./mvnw versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Plinux -DskipTests
|
run: ./mvnw -B clean package -DskipTests
|
||||||
- name: Patch target dir
|
- name: Patch target dir
|
||||||
run: |
|
run: |
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
@@ -210,7 +213,7 @@ jobs:
|
|||||||
gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-*.AppImage
|
gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-*.AppImage
|
||||||
gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-*.AppImage.zsync
|
gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-*.AppImage.zsync
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: appimage-${{ matrix.arch }}
|
name: appimage-${{ matrix.arch }}
|
||||||
path: |
|
path: |
|
||||||
@@ -220,7 +223,7 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
- name: Publish AppImage on GitHub Releases
|
- name: Publish AppImage on GitHub Releases
|
||||||
if: inputs.upload-to-draft
|
if: inputs.upload-to-draft
|
||||||
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
@@ -240,7 +243,7 @@ jobs:
|
|||||||
aarch64-sha256sum: ${{ steps.sha256sum.outputs.aarch64-sha256sum }}
|
aarch64-sha256sum: ${{ steps.sha256sum.outputs.aarch64-sha256sum }}
|
||||||
steps:
|
steps:
|
||||||
- name: Download AppImage artifacts
|
- name: Download AppImage artifacts
|
||||||
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
with:
|
with:
|
||||||
pattern: appimage-*
|
pattern: appimage-*
|
||||||
path: appimage-artifacts
|
path: appimage-artifacts
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ on:
|
|||||||
description: 'Source or Release tag'
|
description: 'Source or Release tag'
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
uses: ./.github/workflows/get-version.yml
|
uses: ./.github/workflows/get-version.yml
|
||||||
@@ -33,7 +36,7 @@ jobs:
|
|||||||
pacman-key --populate archlinux
|
pacman-key --populate archlinux
|
||||||
pacman -Syu --noconfirm --needed git base-devel sudo gnupg maven unzip github-cli curl pacman-contrib
|
pacman -Syu --noconfirm --needed git base-devel sudo gnupg maven unzip github-cli curl pacman-contrib
|
||||||
- name: Checkout cryptomator/aur-bin
|
- name: Checkout cryptomator/aur-bin
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
repository: 'cryptomator/aur-bin'
|
repository: 'cryptomator/aur-bin'
|
||||||
token: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
token: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
||||||
@@ -102,7 +105,7 @@ jobs:
|
|||||||
DIST_VERSION: ${{ steps.pkgrel.outputs.dist-version }}
|
DIST_VERSION: ${{ steps.pkgrel.outputs.dist-version }}
|
||||||
GH_TOKEN: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
GH_TOKEN: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
||||||
- name: Slack Notification
|
- name: Slack Notification
|
||||||
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2.3.3
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
env:
|
env:
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
||||||
SLACK_USERNAME: 'Cryptobot'
|
SLACK_USERNAME: 'Cryptobot'
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
download-file:
|
download-file:
|
||||||
name: Downloads the file into the VM
|
name: Downloads the file into the VM
|
||||||
@@ -51,7 +53,7 @@ jobs:
|
|||||||
- name: Download file
|
- name: Download file
|
||||||
run: curl --silent --fail-with-body --proto "=https" -L "${INPUT_URL}" -o "${{steps.extractName.outputs.fileName}}"
|
run: curl --silent --fail-with-body --proto "=https" -L "${INPUT_URL}" -o "${{steps.extractName.outputs.fileName}}"
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.extractName.outputs.fileName }}
|
name: ${{ steps.extractName.outputs.fileName }}
|
||||||
path: ${{ steps.extractName.outputs.fileName }}
|
path: ${{ steps.extractName.outputs.fileName }}
|
||||||
@@ -68,7 +70,7 @@ jobs:
|
|||||||
name: ${{ needs.download-file.outputs.fileName }}
|
name: ${{ needs.download-file.outputs.fileName }}
|
||||||
path: upload
|
path: upload
|
||||||
- name: Upload to Kaspersky
|
- name: Upload to Kaspersky
|
||||||
uses: SamKirkland/FTP-Deploy-Action@a51268f67f6605236975928ae28b0f7e9971d50a # v4.6.3
|
uses: SamKirkland/FTP-Deploy-Action@110f9186c050f71550953127052e77650219c287 # v4.6.3
|
||||||
with:
|
with:
|
||||||
protocol: ftps
|
protocol: ftps
|
||||||
server: allowlist.kaspersky-labs.com
|
server: allowlist.kaspersky-labs.com
|
||||||
@@ -78,7 +80,7 @@ jobs:
|
|||||||
local-dir: ./upload/
|
local-dir: ./upload/
|
||||||
allowlist-avast:
|
allowlist-avast:
|
||||||
name: Anti Virus Allowlisting Avast
|
name: Anti Virus Allowlisting Avast
|
||||||
runs-on: ubuntu-slim
|
runs-on: ubuntu-latest
|
||||||
needs: download-file
|
needs: download-file
|
||||||
if: inputs.avast
|
if: inputs.avast
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -11,25 +11,29 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: 25
|
JAVA_VERSION: 26
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Compile and Test
|
name: Compile and Test
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
- uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Cache SonarCloud packages
|
- name: Cache SonarCloud packages
|
||||||
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: ~/.sonar/cache
|
path: ~/.sonar/cache
|
||||||
key: ${{ runner.os }}-sonar
|
key: ${{ runner.os }}-sonar
|
||||||
@@ -37,7 +41,7 @@ jobs:
|
|||||||
- name: Build and Test
|
- name: Build and Test
|
||||||
run: >
|
run: >
|
||||||
xvfb-run
|
xvfb-run
|
||||||
mvn -B verify
|
./mvnw -B verify
|
||||||
jacoco:report
|
jacoco:report
|
||||||
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
|
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
|
||||||
-Pcoverage
|
-Pcoverage
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ env:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-version:
|
check-version:
|
||||||
name: Checkout latest jdk version
|
name: Checkout latest jdk version
|
||||||
@@ -26,7 +28,7 @@ jobs:
|
|||||||
run: echo 'JDK_MAJOR_VERSION=${{ env.JDK_VERSION }}'.substring(0,2) >> "$env:GITHUB_ENV"
|
run: echo 'JDK_MAJOR_VERSION=${{ env.JDK_VERSION }}'.substring(0,2) >> "$env:GITHUB_ENV"
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
- name: Checkout latest JDK ${{ env.JDK_MAJOR_VERSION }}
|
- name: Checkout latest JDK ${{ env.JDK_MAJOR_VERSION }}
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
java-version: ${{ env.JDK_MAJOR_VERSION}}
|
java-version: ${{ env.JDK_MAJOR_VERSION}}
|
||||||
distribution: ${{ env.JDK_VENDOR }}
|
distribution: ${{ env.JDK_VENDOR }}
|
||||||
@@ -70,7 +72,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
- name: Notify
|
- name: Notify
|
||||||
if: steps.determine.outputs.UPDATE_AVAILABLE == 'true'
|
if: steps.determine.outputs.UPDATE_AVAILABLE == 'true'
|
||||||
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2.3.3
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
env:
|
env:
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||||
SLACK_USERNAME: 'Cryptobot'
|
SLACK_USERNAME: 'Cryptobot'
|
||||||
|
|||||||
@@ -25,12 +25,15 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: '25.0.2+10.0.LTS'
|
JAVA_VERSION: '26.0.1+8'
|
||||||
DEB_BUILD_DEPENDS: 'debhelper (>=10), openjdk-25-jdk (>= 25+36), libgtk-3-0 (>= 3.20.0), libxxf86vm1, libgl1'
|
DEB_BUILD_DEPENDS: 'debhelper (>=10), coffeelibs-jdk-26 (>= 26.0.1+8-0ppa1), libgtk-3-0 (>= 3.20.0), libxxf86vm1, libgl1'
|
||||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_linux-x64_bin-jmods.zip'
|
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_linux-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: 'e0a9c29d8cf3af9b8b48848b43f87b5785bc107c53a951b19668ce05842bba1b'
|
OPENJFX_JMODS_AMD64_HASH: '47035c653863a8e4be3dc6f142b8dbd84b4bb1efc9a8cbc68413e6a5ff5e9f50'
|
||||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_linux-aarch64_bin-jmods.zip'
|
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_linux-aarch64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AARCH64_HASH: 'c3408f818693cce09e59829a8e862a82c7695fdfcd585c41cfd527f5fc3fe646'
|
OPENJFX_JMODS_AARCH64_HASH: 'e3fd682354346845d2944a2da2b1ff2b6cb9259d92027f2f9c121b9b93c5e42f'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
@@ -45,7 +48,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
INPUT_PPAVER: ${{ inputs.ppaver }}
|
INPUT_PPAVER: ${{ inputs.ppaver }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- id: deb-version
|
- id: deb-version
|
||||||
name: Determine deb-version
|
name: Determine deb-version
|
||||||
run: |
|
run: |
|
||||||
@@ -56,20 +59,21 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
- name: Install build tools
|
- name: Install build tools
|
||||||
run: |
|
run: |
|
||||||
|
sudo add-apt-repository -y ppa:coffeelibs/openjdk
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install devscripts dput
|
sudo apt-get install devscripts dput
|
||||||
sudo apt-get satisfy "${DEB_BUILD_DEPENDS}"
|
sudo apt-get satisfy "${DEB_BUILD_DEPENDS}"
|
||||||
env:
|
env:
|
||||||
DEB_BUILD_DEPENDS: ${{ env.DEB_BUILD_DEPENDS }}
|
DEB_BUILD_DEPENDS: ${{ env.DEB_BUILD_DEPENDS }}
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
check-latest: true
|
check-latest: true
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Plinux -DskipTests
|
run: ./mvnw -B clean package -DskipTests
|
||||||
- name: Download OpenJFX jmods
|
- name: Download OpenJFX jmods
|
||||||
id: download-jmods
|
id: download-jmods
|
||||||
run: |
|
run: |
|
||||||
@@ -89,7 +93,7 @@ jobs:
|
|||||||
JMOD_VERSION_AARCH64=$(jmod describe jmods/aarch64/javafx.base.jmod | head -1)
|
JMOD_VERSION_AARCH64=$(jmod describe jmods/aarch64/javafx.base.jmod | head -1)
|
||||||
JMOD_VERSION_AARCH64=${JMOD_VERSION_AARCH64#*@}
|
JMOD_VERSION_AARCH64=${JMOD_VERSION_AARCH64#*@}
|
||||||
JMOD_VERSION_AARCH64=${JMOD_VERSION_AARCH64%%.*}
|
JMOD_VERSION_AARCH64=${JMOD_VERSION_AARCH64%%.*}
|
||||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
POM_JFX_VERSION=$(./mvnw help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||||
|
|
||||||
@@ -145,7 +149,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator_*_amd64.deb
|
gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator_*_amd64.deb
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: linux-deb-package
|
name: linux-deb-package
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
@@ -5,13 +5,16 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-dependencies:
|
check-dependencies:
|
||||||
uses: skymatic/workflows/.github/workflows/run-dependency-check.yml@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # v3.0.3
|
uses: skymatic/workflows/.github/workflows/run-dependency-check.yml@8356563bf7b8d1c8d693f75ca487e8f57573cec9 # v3.1.0
|
||||||
with:
|
with:
|
||||||
runner-os: 'ubuntu-latest'
|
runner-os: 'ubuntu-latest'
|
||||||
java-distribution: 'temurin'
|
java-distribution: 'temurin'
|
||||||
java-version: 25
|
java-version: 26
|
||||||
secrets:
|
secrets:
|
||||||
nvd-api-key: ${{ secrets.NVD_API_KEY }}
|
nvd-api-key: ${{ secrets.NVD_API_KEY }}
|
||||||
ossindex-username: ${{ secrets.OSSINDEX_USERNAME }}
|
ossindex-username: ${{ secrets.OSSINDEX_USERNAME }}
|
||||||
|
|||||||
@@ -4,13 +4,16 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '0/15 * * * *' # run every 15 min - don't forget to adjust the "interval" in the json sent to the metrics endpoint
|
- cron: '0/15 * * * *' # run every 15 min - don't forget to adjust the "interval" in the json sent to the metrics endpoint
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
report-download-stats:
|
report-download-stats:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Get download count of latest releases
|
- name: Get download count of latest releases
|
||||||
id: get-stats
|
id: get-stats
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const query = `query($owner:String!, $name:String!) {
|
const query = `query($owner:String!, $name:String!) {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: '25.0.2+10.0.LTS'
|
JAVA_VERSION: '26.0.1+8'
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -16,6 +16,8 @@ defaults:
|
|||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
uses: ./.github/workflows/get-version.yml
|
uses: ./.github/workflows/get-version.yml
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
with:
|
with:
|
||||||
version: ''
|
version: ''
|
||||||
|
|
||||||
@@ -23,26 +25,29 @@ jobs:
|
|||||||
name: Compile and Test
|
name: Compile and Test
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: get-version
|
needs: get-version
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
if: needs.get-version.outputs.versionType != 'unknown'
|
if: needs.get-version.outputs.versionType != 'unknown'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Check the git tag is signed
|
- name: Check the git tag is signed
|
||||||
run: git cat-file -p "${GITHUB_REF_NAME}" | grep "BEGIN SSH SIGNATURE"
|
run: git cat-file -p "${GITHUB_REF_NAME}" | grep "BEGIN SSH SIGNATURE"
|
||||||
- name: Check the git tag is on release or main branch
|
- name: Check the git tag is on release or main branch
|
||||||
run: git branch -r --contains "${GITHUB_REF_NAME}" | grep -E '^\s*origin/(main|release/.*)\s*$'
|
run: git branch -r --contains "${GITHUB_REF_NAME}" | grep -E '^\s*origin/(main|release/.*)\s*$'
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
- uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Build and Test
|
- name: Build and Test
|
||||||
run: xvfb-run mvn -B verify -Plinux
|
run: xvfb-run ./mvnw -B verify
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
|
||||||
- name: Draft a release
|
- name: Draft a release
|
||||||
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
discussion_category_name: releases
|
discussion_category_name: releases
|
||||||
@@ -60,7 +65,7 @@ jobs:
|
|||||||
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
||||||
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
||||||
- name: Publish asc on GitHub Releases
|
- name: Publish asc on GitHub Releases
|
||||||
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
@@ -71,6 +76,8 @@ jobs:
|
|||||||
build-exe-and-msi:
|
build-exe-and-msi:
|
||||||
needs: [get-version, create-release-draft]
|
needs: [get-version, create-release-draft]
|
||||||
uses: ./.github/workflows/win-exe.yml
|
uses: ./.github/workflows/win-exe.yml
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
with:
|
with:
|
||||||
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
||||||
revisionNum: ${{needs.get-version.outputs.revNum}}
|
revisionNum: ${{needs.get-version.outputs.revNum}}
|
||||||
@@ -80,6 +87,8 @@ jobs:
|
|||||||
build-dmg-arm64:
|
build-dmg-arm64:
|
||||||
needs: [get-version, create-release-draft]
|
needs: [get-version, create-release-draft]
|
||||||
uses: ./.github/workflows/mac-dmg.yml
|
uses: ./.github/workflows/mac-dmg.yml
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
with:
|
with:
|
||||||
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
||||||
revisionNum: ${{needs.get-version.outputs.revNum}}
|
revisionNum: ${{needs.get-version.outputs.revNum}}
|
||||||
@@ -89,6 +98,8 @@ jobs:
|
|||||||
build-dmg-x64:
|
build-dmg-x64:
|
||||||
needs: [get-version, create-release-draft]
|
needs: [get-version, create-release-draft]
|
||||||
uses: ./.github/workflows/mac-dmg-x64.yml
|
uses: ./.github/workflows/mac-dmg-x64.yml
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
with:
|
with:
|
||||||
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
||||||
revisionNum: ${{needs.get-version.outputs.revNum}}
|
revisionNum: ${{needs.get-version.outputs.revNum}}
|
||||||
@@ -98,6 +109,8 @@ jobs:
|
|||||||
build-appimages:
|
build-appimages:
|
||||||
needs: [get-version, create-release-draft]
|
needs: [get-version, create-release-draft]
|
||||||
uses: ./.github/workflows/appimage.yml
|
uses: ./.github/workflows/appimage.yml
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
with:
|
with:
|
||||||
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
semVerNum: ${{needs.get-version.outputs.semVerNum}}
|
||||||
revisionNum: ${{needs.get-version.outputs.revNum}}
|
revisionNum: ${{needs.get-version.outputs.revNum}}
|
||||||
@@ -107,12 +120,14 @@ jobs:
|
|||||||
update-sha256sums:
|
update-sha256sums:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [get-version, build-exe-and-msi, build-dmg-arm64, build-dmg-x64, build-appimages]
|
needs: [get-version, build-exe-and-msi, build-dmg-arm64, build-dmg-x64, build-appimages]
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
env:
|
env:
|
||||||
TAG: ${{ github.ref_name }}
|
TAG: ${{ github.ref_name }}
|
||||||
SEMVER: ${{ needs.get-version.outputs.semVerStr }}
|
SEMVER: ${{ needs.get-version.outputs.semVerStr }}
|
||||||
GH_TOKEN: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
GH_TOKEN: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- name: Compute source tarball SHA256
|
- name: Compute source tarball SHA256
|
||||||
id: src-sha256
|
id: src-sha256
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ on:
|
|||||||
discussion_comment:
|
discussion_comment:
|
||||||
types: [created, edited, deleted]
|
types: [created, edited, deleted]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
discussions: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update-error-db:
|
update-error-db:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -14,7 +17,7 @@ jobs:
|
|||||||
- name: Query Discussion Data
|
- name: Query Discussion Data
|
||||||
if: github.event_name == 'discussion_comment' || github.event_name == 'discussion' && github.event.action != 'deleted'
|
if: github.event_name == 'discussion_comment' || github.event_name == 'discussion' && github.event.action != 'deleted'
|
||||||
id: query-data
|
id: query-data
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const query = `query ($owner: String!, $name: String!, $discussionNumber: Int!) {
|
const query = `query ($owner: String!, $name: String!, $discussionNumber: Int!) {
|
||||||
|
|||||||
@@ -26,7 +26,10 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: 25
|
JAVA_VERSION: 26
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
determine-version:
|
determine-version:
|
||||||
@@ -39,11 +42,11 @@ jobs:
|
|||||||
revNum: ${{ steps.versions.outputs.revNum }}
|
revNum: ${{ steps.versions.outputs.revNum }}
|
||||||
type: ${{ steps.versions.outputs.type}}
|
type: ${{ steps.versions.outputs.type}}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
@@ -56,7 +59,7 @@ jobs:
|
|||||||
elif [[ "${VERSION_STRING}" =~ [0-9]+\.[0-9]+\.[0-9]+.* ]]; then
|
elif [[ "${VERSION_STRING}" =~ [0-9]+\.[0-9]+\.[0-9]+.* ]]; then
|
||||||
SEM_VER_STR="${VERSION_STRING}"
|
SEM_VER_STR="${VERSION_STRING}"
|
||||||
else
|
else
|
||||||
SEM_VER_STR=`mvn help:evaluate -Dexpression=project.version -q -DforceStdout`
|
SEM_VER_STR=`./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SEM_VER_NUM=$(echo ${SEM_VER_STR} | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
SEM_VER_NUM=$(echo ${SEM_VER_STR} | sed -E 's/([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ on:
|
|||||||
- 'dist/linux/common/**'
|
- 'dist/linux/common/**'
|
||||||
- 'dist/linux/resources/**'
|
- 'dist/linux/resources/**'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
uses: ./.github/workflows/get-version.yml
|
uses: ./.github/workflows/get-version.yml
|
||||||
@@ -49,16 +52,16 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
SRC_GIT_SHA: ${{ inputs.src-tag || github.sha}}
|
SRC_GIT_SHA: ${{ inputs.src-tag || github.sha}}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
repository: flathub/org.cryptomator.Cryptomator
|
repository: flathub/org.cryptomator.Cryptomator
|
||||||
submodules: true
|
submodules: true
|
||||||
- name: Checkout build script
|
- name: Checkout build script
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
path: build-scripts
|
path: build-scripts
|
||||||
- name: Checkout app source
|
- name: Checkout app source
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
path: cryptomator
|
path: cryptomator
|
||||||
ref: ${{ env.SRC_GIT_SHA }}
|
ref: ${{ env.SRC_GIT_SHA }}
|
||||||
@@ -77,7 +80,7 @@ jobs:
|
|||||||
commit: ${{ env.SRC_GIT_SHA }}
|
commit: ${{ env.SRC_GIT_SHA }}
|
||||||
- name: Copy build script for upload
|
- name: Copy build script for upload
|
||||||
run: cp org.cryptomator.Cryptomator.yaml org.cryptomator.Cryptomator.${{matrix.variant.arch}}.yaml
|
run: cp org.cryptomator.Cryptomator.yaml org.cryptomator.Cryptomator.${{matrix.variant.arch}}.yaml
|
||||||
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
archive: false
|
archive: false
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
@@ -129,7 +132,7 @@ jobs:
|
|||||||
EOF
|
EOF
|
||||||
done < maven-dependency-files-javafx.txt
|
done < maven-dependency-files-javafx.txt
|
||||||
) > javafx-maven-dependencies-${{ matrix.variant.arch }}.yaml
|
) > javafx-maven-dependencies-${{ matrix.variant.arch }}.yaml
|
||||||
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: maven-sources-${{ matrix.variant.arch }}
|
name: maven-sources-${{ matrix.variant.arch }}
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
@@ -176,7 +179,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
env:
|
env:
|
||||||
SRC_TAG: ${{ inputs.src-tag }}
|
SRC_TAG: ${{ inputs.src-tag }}
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
repository: flathub/org.cryptomator.Cryptomator
|
repository: flathub/org.cryptomator.Cryptomator
|
||||||
submodules: true #TODO: Update submodule!
|
submodules: true #TODO: Update submodule!
|
||||||
@@ -184,7 +187,7 @@ jobs:
|
|||||||
- name: Checkout release branch
|
- name: Checkout release branch
|
||||||
run: |
|
run: |
|
||||||
git checkout -b release/${{ needs.get-version.outputs.semVerStr }}
|
git checkout -b release/${{ needs.get-version.outputs.semVerStr }}
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
path: cryptomator
|
path: cryptomator
|
||||||
- name: Download source tarball and compute checksum
|
- name: Download source tarball and compute checksum
|
||||||
@@ -250,7 +253,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
GH_TOKEN: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
||||||
- name: Slack Notification
|
- name: Slack Notification
|
||||||
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2.3.3
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
env:
|
env:
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ on:
|
|||||||
- 'dist/linux/common/**'
|
- 'dist/linux/common/**'
|
||||||
- 'dist/linux/resources/**'
|
- 'dist/linux/resources/**'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
uses: ./.github/workflows/get-version.yml
|
uses: ./.github/workflows/get-version.yml
|
||||||
@@ -44,7 +47,7 @@ jobs:
|
|||||||
pacman-key --init
|
pacman-key --init
|
||||||
pacman-key --populate archlinux
|
pacman-key --populate archlinux
|
||||||
pacman -Syu --noconfirm --needed git base-devel sudo gnupg maven unzip
|
pacman -Syu --noconfirm --needed git base-devel sudo gnupg maven unzip
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
path: cryptomator
|
path: cryptomator
|
||||||
- name: Create build user
|
- name: Create build user
|
||||||
@@ -69,13 +72,13 @@ jobs:
|
|||||||
sudo -u builder
|
sudo -u builder
|
||||||
env PKGDEST="$PKGDEST" SRCDEST="$SRCDEST"
|
env PKGDEST="$PKGDEST" SRCDEST="$SRCDEST"
|
||||||
makepkg --syncdeps --cleanbuild --noconfirm --log
|
makepkg --syncdeps --cleanbuild --noconfirm --log
|
||||||
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: arch-package
|
name: arch-package
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
path: |
|
path: |
|
||||||
${{ env.PKGDEST }}/*.pkg.tar.zst
|
${{ env.PKGDEST }}/*.pkg.tar.zst
|
||||||
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: pkgbuild-file
|
name: pkgbuild-file
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
@@ -108,7 +111,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TAG: ${{ needs.get-version.outputs.semVerStr || github.event.release.tag_name }}
|
TAG: ${{ needs.get-version.outputs.semVerStr || github.event.release.tag_name }}
|
||||||
- name: Checkout cryptomator/aur repo
|
- name: Checkout cryptomator/aur repo
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
with:
|
with:
|
||||||
repository: 'cryptomator/aur'
|
repository: 'cryptomator/aur'
|
||||||
token: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
token: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
||||||
@@ -188,7 +191,7 @@ jobs:
|
|||||||
GH_TOKEN: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
GH_TOKEN: ${{ secrets.CRYPTOBOT_PR_TOKEN }}
|
||||||
- name: Slack Notification
|
- name: Slack Notification
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2.3.3
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
env:
|
env:
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
||||||
SLACK_USERNAME: 'Cryptobot'
|
SLACK_USERNAME: 'Cryptobot'
|
||||||
|
|||||||
@@ -56,12 +56,15 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: '25.0.2+10.0.LTS'
|
JAVA_VERSION: '26.0.1+8'
|
||||||
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
||||||
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
||||||
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
||||||
|
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build Cryptomator.app for ${{ matrix.output-suffix }}
|
name: Build Cryptomator.app for ${{ matrix.output-suffix }}
|
||||||
@@ -76,12 +79,12 @@ jobs:
|
|||||||
architecture: x64
|
architecture: x64
|
||||||
output-suffix: x64
|
output-suffix: x64
|
||||||
fuse-lib: macFUSE
|
fuse-lib: macFUSE
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_osx-x64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_osx-x64_bin-jmods.zip'
|
||||||
openjfx-sha: '0b4d8463f03901b7425d94628e4116b7078abb8dd540fbec415266fac20bda5c'
|
openjfx-sha: '3512fabe43aee467538d329cfbbaab3c53dff2a810f0d54e381f461d5e0fac43'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
@@ -100,7 +103,7 @@ jobs:
|
|||||||
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
||||||
JMOD_VERSION=${JMOD_VERSION#*@}
|
JMOD_VERSION=${JMOD_VERSION#*@}
|
||||||
JMOD_VERSION=${JMOD_VERSION%%.*}
|
JMOD_VERSION=${JMOD_VERSION%%.*}
|
||||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
POM_JFX_VERSION=$(./mvnw help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||||
|
|
||||||
@@ -109,9 +112,9 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Set version
|
- name: Set version
|
||||||
run : mvn versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
run : ./mvnw versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Pmac -DskipTests
|
run: ./mvnw -B clean package -Pmac -DskipTests
|
||||||
- name: Patch target dir
|
- name: Patch target dir
|
||||||
run: |
|
run: |
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
@@ -185,14 +188,13 @@ jobs:
|
|||||||
PROVISIONING_PROFILE_BASE64: ${{ secrets.MACOS_PROVISIONING_PROFILE_BASE64 }}
|
PROVISIONING_PROFILE_BASE64: ${{ secrets.MACOS_PROVISIONING_PROFILE_BASE64 }}
|
||||||
- name: Generate license for dmg
|
- name: Generate license for dmg
|
||||||
run: >
|
run: >
|
||||||
mvn -B license:add-third-party
|
./mvnw -B license:add-third-party
|
||||||
-Dlicense.thirdPartyFilename=license.rtf
|
-Dlicense.thirdPartyFilename=license.rtf
|
||||||
-Dlicense.outputDirectory=dist/mac/dmg/resources
|
-Dlicense.outputDirectory=dist/mac/dmg/resources
|
||||||
-Dlicense.fileTemplate=dist/mac/dmg/resources/licenseTemplate.ftl
|
-Dlicense.fileTemplate=dist/mac/dmg/resources/licenseTemplate.ftl
|
||||||
-Dlicense.includedScopes=compile
|
-Dlicense.includedScopes=compile
|
||||||
-Dlicense.excludedGroups=^org\.cryptomator
|
-Dlicense.excludedGroups=^org\.cryptomator
|
||||||
-Dlicense.failOnMissing=true
|
-Dlicense.failOnMissing=true
|
||||||
-Dlicense.licenseMergesUrl=file://${{ github.workspace }}/license/merges
|
|
||||||
- name: Install codesign certificate
|
- name: Install codesign certificate
|
||||||
run: |
|
run: |
|
||||||
# create variables
|
# create variables
|
||||||
@@ -303,7 +305,7 @@ jobs:
|
|||||||
run: security delete-keychain $RUNNER_TEMP/codesign.keychain-db
|
run: security delete-keychain $RUNNER_TEMP/codesign.keychain-db
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: dmg-${{ matrix.output-suffix }}
|
name: dmg-${{ matrix.output-suffix }}
|
||||||
path: |
|
path: |
|
||||||
@@ -312,7 +314,7 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
- name: Publish dmg on GitHub Releases
|
- name: Publish dmg on GitHub Releases
|
||||||
if: inputs.upload-to-draft
|
if: inputs.upload-to-draft
|
||||||
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
|
|||||||
@@ -54,12 +54,15 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: '25.0.2+10.0.LTS'
|
JAVA_VERSION: '26.0.1+8'
|
||||||
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
||||||
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
||||||
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
||||||
|
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build Cryptomator.app for ${{ matrix.output-suffix }}
|
name: Build Cryptomator.app for ${{ matrix.output-suffix }}
|
||||||
@@ -74,12 +77,12 @@ jobs:
|
|||||||
architecture: aarch64
|
architecture: aarch64
|
||||||
output-suffix: arm64
|
output-suffix: arm64
|
||||||
fuse-lib: FUSE-T
|
fuse-lib: FUSE-T
|
||||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_osx-aarch64_bin-jmods.zip'
|
openjfx-url: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_osx-aarch64_bin-jmods.zip'
|
||||||
openjfx-sha: '4cd258001c75af7047005c5c891e2400ed11d24fbb09412324c0cbaf8b503c5a'
|
openjfx-sha: 'a52014d625b8b04e57fd71650f881c1397542b4018e1b04f1b4e66c8800a1f34'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
@@ -98,7 +101,7 @@ jobs:
|
|||||||
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
||||||
JMOD_VERSION=${JMOD_VERSION#*@}
|
JMOD_VERSION=${JMOD_VERSION#*@}
|
||||||
JMOD_VERSION=${JMOD_VERSION%%.*}
|
JMOD_VERSION=${JMOD_VERSION%%.*}
|
||||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
POM_JFX_VERSION=$(./mvnw help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||||
|
|
||||||
@@ -107,9 +110,9 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Set version
|
- name: Set version
|
||||||
run : mvn versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
run : ./mvnw versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Pmac -DskipTests
|
run: ./mvnw -B clean package -Pmac -DskipTests
|
||||||
- name: Patch target dir
|
- name: Patch target dir
|
||||||
run: |
|
run: |
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
@@ -184,14 +187,13 @@ jobs:
|
|||||||
PROVISIONING_PROFILE_BASE64: ${{ secrets.MACOS_PROVISIONING_PROFILE_BASE64 }}
|
PROVISIONING_PROFILE_BASE64: ${{ secrets.MACOS_PROVISIONING_PROFILE_BASE64 }}
|
||||||
- name: Generate license for dmg
|
- name: Generate license for dmg
|
||||||
run: >
|
run: >
|
||||||
mvn -B license:add-third-party
|
./mvnw -B license:add-third-party
|
||||||
-Dlicense.thirdPartyFilename=license.rtf
|
-Dlicense.thirdPartyFilename=license.rtf
|
||||||
-Dlicense.outputDirectory=dist/mac/dmg/resources
|
-Dlicense.outputDirectory=dist/mac/dmg/resources
|
||||||
-Dlicense.fileTemplate=dist/mac/dmg/resources/licenseTemplate.ftl
|
-Dlicense.fileTemplate=dist/mac/dmg/resources/licenseTemplate.ftl
|
||||||
-Dlicense.includedScopes=compile
|
-Dlicense.includedScopes=compile
|
||||||
-Dlicense.excludedGroups=^org\.cryptomator
|
-Dlicense.excludedGroups=^org\.cryptomator
|
||||||
-Dlicense.failOnMissing=true
|
-Dlicense.failOnMissing=true
|
||||||
-Dlicense.licenseMergesUrl=file://${{ github.workspace }}/license/merges
|
|
||||||
- name: Install codesign certificate
|
- name: Install codesign certificate
|
||||||
run: |
|
run: |
|
||||||
# create variables
|
# create variables
|
||||||
@@ -302,7 +304,7 @@ jobs:
|
|||||||
run: security delete-keychain $RUNNER_TEMP/codesign.keychain-db
|
run: security delete-keychain $RUNNER_TEMP/codesign.keychain-db
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: dmg-${{ matrix.output-suffix }}
|
name: dmg-${{ matrix.output-suffix }}
|
||||||
path: |
|
path: |
|
||||||
@@ -311,7 +313,7 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
- name: Publish dmg on GitHub Releases
|
- name: Publish dmg on GitHub Releases
|
||||||
if: inputs.upload-to-draft
|
if: inputs.upload-to-draft
|
||||||
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
|
- uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0
|
||||||
with:
|
with:
|
||||||
days-before-stale: 14
|
days-before-stale: 14
|
||||||
days-before-close: 0
|
days-before-close: 0
|
||||||
|
|||||||
@@ -4,12 +4,14 @@ on:
|
|||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
notify:
|
notify:
|
||||||
runs-on: ubuntu-slim
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Notify about DEB build
|
- name: Notify about DEB build
|
||||||
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2.3.3
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
env:
|
env:
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
||||||
SLACK_USERNAME: 'Cryptobot'
|
SLACK_USERNAME: 'Cryptobot'
|
||||||
@@ -21,7 +23,7 @@ jobs:
|
|||||||
SLACK_FOOTER: ''
|
SLACK_FOOTER: ''
|
||||||
MSG_MINIMAL: true
|
MSG_MINIMAL: true
|
||||||
- name: Notify about latest-version update
|
- name: Notify about latest-version update
|
||||||
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2.3.3
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
env:
|
env:
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
||||||
SLACK_USERNAME: 'Cryptobot'
|
SLACK_USERNAME: 'Cryptobot'
|
||||||
@@ -102,10 +104,10 @@ jobs:
|
|||||||
name: Notify for winget-release
|
name: Notify for winget-release
|
||||||
if: needs.get-asset-urls.outputs.is-windows-release == 'true' && needs.check-release.outputs.release-kind == 'stable'
|
if: needs.get-asset-urls.outputs.is-windows-release == 'true' && needs.check-release.outputs.release-kind == 'stable'
|
||||||
needs: [check-release, get-asset-urls]
|
needs: [check-release, get-asset-urls]
|
||||||
runs-on: ubuntu-slim
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Slack Notification
|
- name: Slack Notification
|
||||||
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # v2.3.3
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
env:
|
env:
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }}
|
||||||
SLACK_USERNAME: 'Cryptobot'
|
SLACK_USERNAME: 'Cryptobot'
|
||||||
@@ -142,4 +144,3 @@ jobs:
|
|||||||
token: ${{ secrets.CRYPTOBOT_WORKFLOW_DISPATCH_TOKEN }}
|
token: ${{ secrets.CRYPTOBOT_WORKFLOW_DISPATCH_TOKEN }}
|
||||||
repository: cryptomator/docs
|
repository: cryptomator/docs
|
||||||
client-payload: '{ "version": "${{ github.event.release.tag_name }}", "release": ${{ toJson(github.event.release.assets) }} }'
|
client-payload: '{ "version": "${{ github.event.release.tag_name }}", "release": ${{ toJson(github.event.release.assets) }} }'
|
||||||
|
|
||||||
|
|||||||
@@ -5,22 +5,25 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: 25
|
JAVA_VERSION: 26
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Compile and Test
|
name: Compile and Test
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
- uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Build and Test
|
- name: Build and Test
|
||||||
run: xvfb-run mvn -B clean install jacoco:report -Pcoverage
|
run: xvfb-run ./mvnw -B clean install jacoco:report -Pcoverage
|
||||||
@@ -12,16 +12,19 @@ defaults:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: 25
|
JAVA_VERSION: 26
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-preconditions:
|
check-preconditions:
|
||||||
name: Validate commits pushed to release/hotfix branch to fulfill release requirements
|
name: Validate commits pushed to release/hotfix branch to fulfill release requirements
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ env.JAVA_DIST }}
|
distribution: ${{ env.JAVA_DIST }}
|
||||||
java-version: ${{ env.JAVA_VERSION }}
|
java-version: ${{ env.JAVA_VERSION }}
|
||||||
@@ -36,7 +39,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${SEM_VER_STR} == `mvn help:evaluate -Dexpression=project.version -q -DforceStdout` ]]; then
|
if [[ ${SEM_VER_STR} == `./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout` ]]; then
|
||||||
echo "semVerStr=${SEM_VER_STR}" >> $GITHUB_OUTPUT
|
echo "semVerStr=${SEM_VER_STR}" >> $GITHUB_OUTPUT
|
||||||
else
|
else
|
||||||
echo "Version not set in POM"
|
echo "Version not set in POM"
|
||||||
@@ -48,19 +51,4 @@ jobs:
|
|||||||
if ! grep -q "<release date=\".*\" version=\"${{ steps.validate-pom-version.outputs.semVerStr }}\">" dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml; then
|
if ! grep -q "<release date=\".*\" version=\"${{ steps.validate-pom-version.outputs.semVerStr }}\">" dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml; then
|
||||||
echo "Release not set in dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml"
|
echo "Release not set in dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Cache NVD DB
|
|
||||||
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
|
|
||||||
with:
|
|
||||||
path: ~/.m2/repository/org/owasp/dependency-check-data/
|
|
||||||
key: dependency-check-${{ github.run_id }}
|
|
||||||
restore-keys: |
|
|
||||||
dependency-check
|
|
||||||
env:
|
|
||||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
|
|
||||||
- name: Run org.owasp:dependency-check plugin
|
|
||||||
id: dependency-check
|
|
||||||
continue-on-error: true
|
|
||||||
run: mvn -B verify -Pdependency-check -DskipTests
|
|
||||||
env:
|
|
||||||
NVD_API_KEY: ${{ secrets.NVD_API_KEY }}
|
|
||||||
@@ -12,7 +12,7 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
|
- uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0
|
||||||
with:
|
with:
|
||||||
days-before-stale: 365
|
days-before-stale: 365
|
||||||
days-before-close: 90
|
days-before-close: 90
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ env:
|
|||||||
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
VERSION_NUM: ${{ inputs.semVerNum || '99.99.99'}}
|
||||||
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
REVISION_NUM: ${{ inputs.revisionNum || '0' }}
|
||||||
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
VERSION_SUFFIX: ${{ inputs.semVerSuffix || ''}}
|
||||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_windows-x64_bin-jmods.zip'
|
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_windows-x64_bin-jmods.zip'
|
||||||
OPENJFX_JMODS_AMD64_HASH: '33d878dfac85590c4d77c518ed413e512d34a8479d90132b230a7ddd173576b3'
|
OPENJFX_JMODS_AMD64_HASH: '0bf9b83260b85607a9ba200124debabd9cdb013cbc0d659e62a20192a7137907'
|
||||||
WINFSP_MSI: 'https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi'
|
WINFSP_MSI: 'https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi'
|
||||||
WINFSP_MSI_HASH: '073a70e00f77423e34bed98b86e600def93393ba5822204fac57a29324db9f7a'
|
WINFSP_MSI_HASH: '073a70e00f77423e34bed98b86e600def93393ba5822204fac57a29324db9f7a'
|
||||||
WINFSP_UNINSTALLER: 'https://github.com/cryptomator/winfsp-uninstaller/releases/latest/download/winfsp-uninstaller.exe'
|
WINFSP_UNINSTALLER: 'https://github.com/cryptomator/winfsp-uninstaller/releases/latest/download/winfsp-uninstaller.exe'
|
||||||
@@ -71,6 +71,9 @@ defaults:
|
|||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-msi:
|
build-msi:
|
||||||
name: Build .msi Installer
|
name: Build .msi Installer
|
||||||
@@ -82,13 +85,13 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- arch: x64
|
- arch: x64
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
java-dist: 'zulu' #cannot use temurin, see https://github.com/cryptomator/cryptomator/issues/3824#issuecomment-2829827427
|
java-dist: 'temurin'
|
||||||
java-version: '25.0.1+8'
|
java-version: '26.0.1+8'
|
||||||
java-package: 'jdk'
|
java-package: 'jdk'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ matrix.java-dist }}
|
distribution: ${{ matrix.java-dist }}
|
||||||
java-version: ${{ matrix.java-version }}
|
java-version: ${{ matrix.java-version }}
|
||||||
@@ -119,7 +122,7 @@ jobs:
|
|||||||
JMOD_VERSION_AMD64=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
JMOD_VERSION_AMD64=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
||||||
JMOD_VERSION_AMD64=${JMOD_VERSION_AMD64#*@}
|
JMOD_VERSION_AMD64=${JMOD_VERSION_AMD64#*@}
|
||||||
JMOD_VERSION_AMD64=${JMOD_VERSION_AMD64%%.*}
|
JMOD_VERSION_AMD64=${JMOD_VERSION_AMD64%%.*}
|
||||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
POM_JFX_VERSION=$(./mvnw help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||||
|
|
||||||
@@ -128,9 +131,9 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Set version
|
- name: Set version
|
||||||
run: mvn versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
run: ./mvnw versions:set -DnewVersion="${VERSION_NUM}${VERSION_SUFFIX}"
|
||||||
- name: Run maven
|
- name: Run maven
|
||||||
run: mvn -B clean package -Pwin -DskipTests
|
run: ./mvnw -B clean package -Pwin -DskipTests
|
||||||
- name: Patch target dir
|
- name: Patch target dir
|
||||||
run: |
|
run: |
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
@@ -220,22 +223,32 @@ jobs:
|
|||||||
}
|
}
|
||||||
$jar.Dispose()
|
$jar.Dispose()
|
||||||
}
|
}
|
||||||
- name: Extract wixhelper.dll for Codesigning #see https://github.com/cryptomator/cryptomator/issues/3130
|
- name: Get msi helper dll for code signing
|
||||||
shell: pwsh
|
|
||||||
run: |
|
run: |
|
||||||
New-Item -Path appdir/jpackage-jmod -ItemType Directory
|
${JAVA_HOME}/bin/jpackage --type msi --win-upgrade-uuid bda45523-42b1-4cae-9354-a45475ed4775 --app-image appdir/Cryptomator --dest /tmp/ --name Test --vendor Test --copyright "None" --app-version "1.0" --temp msi-helper
|
||||||
& $env:JAVA_HOME\bin\jmod.exe extract --dir jpackage-jmod "${env:JAVA_HOME}\jmods\jdk.jpackage.jmod"
|
find ./msi-helper/ -type f -name msica.dll -exec mv {} ./appdir \;
|
||||||
Get-ChildItem -Recurse -Path "jpackage-jmod" -File wixhelper.dll | Select-Object -Last 1 | Copy-Item -Destination "appdir"
|
|
||||||
- name: Sign DLLs with Azure Trusted Signing
|
- name: Sign DLLs with Azure Trusted Signing
|
||||||
if: inputs.sign || github.event_name == 'schedule'
|
if: inputs.sign || github.event_name == 'schedule'
|
||||||
uses: ./.github/actions/win-sign-action
|
uses: ./.github/actions/win-sign-action
|
||||||
with:
|
with:
|
||||||
base-dir: ${{ github.workspace }}\appdir
|
base-dir: ${{ github.workspace }}\appdir
|
||||||
|
file-extensions: 'exe,dll'
|
||||||
recursive: true
|
recursive: true
|
||||||
append-signature: true
|
append-signature: true
|
||||||
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
|
client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
|
||||||
|
- name: Sign Scripts with Azure Trusted Signing
|
||||||
|
if: inputs.sign || github.event_name == 'schedule'
|
||||||
|
uses: ./.github/actions/win-sign-action
|
||||||
|
with:
|
||||||
|
base-dir: ${{ github.workspace }}\appdir\Cryptomator
|
||||||
|
file-extensions: 'ps1'
|
||||||
|
recursive: false
|
||||||
|
append-signature: false # Powershell scripts cannot be signed in append mode, see #4260
|
||||||
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
|
client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
|
||||||
- name: Replace DLLs inside jars with signed ones
|
- name: Replace DLLs inside jars with signed ones
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
@@ -252,14 +265,23 @@ jobs:
|
|||||||
}
|
}
|
||||||
- name: Generate license for MSI
|
- name: Generate license for MSI
|
||||||
run: >
|
run: >
|
||||||
mvn -B license:add-third-party
|
./mvnw -B license:add-third-party
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf"
|
"-Dlicense.thirdPartyFilename=license.rtf"
|
||||||
"-Dlicense.outputDirectory=dist/win/resources"
|
"-Dlicense.outputDirectory=dist/win/resources"
|
||||||
"-Dlicense.fileTemplate=dist/win/resources/licenseTemplate.ftl"
|
"-Dlicense.fileTemplate=dist/win/resources/licenseTemplate.ftl"
|
||||||
"-Dlicense.includedScopes=compile"
|
"-Dlicense.includedScopes=compile"
|
||||||
"-Dlicense.excludedGroups=^org\.cryptomator"
|
"-Dlicense.excludedGroups=^org\.cryptomator"
|
||||||
"-Dlicense.failOnMissing=true"
|
"-Dlicense.failOnMissing=true"
|
||||||
"-Dlicense.licenseMergesUrl=file:///${{ github.workspace }}/license/merges"
|
shell: pwsh
|
||||||
|
- name: Create file association file from template
|
||||||
|
working-directory: dist/win
|
||||||
|
run: |
|
||||||
|
$Env:JP_WIXWIZARD_RESOURCES_PROPERTIES_FORMAT = "${Env:JP_WIXWIZARD_RESOURCES}".Replace('\', '\\');
|
||||||
|
Get-Content .\resources\FAvaultFile.template.properties `
|
||||||
|
| ForEach-Object { $ExecutionContext.InvokeCommand.ExpandString($_) } `
|
||||||
|
| Out-File -FilePath .\resources\FAvaultFile.properties
|
||||||
|
env:
|
||||||
|
JP_WIXWIZARD_RESOURCES: ${{ github.workspace }}/dist/win/resources/ # requires abs path, used in resources/main.wxs
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
- name: Create MSI
|
- name: Create MSI
|
||||||
run: >
|
run: >
|
||||||
@@ -276,14 +298,14 @@ jobs:
|
|||||||
--win-menu
|
--win-menu
|
||||||
--win-dir-chooser
|
--win-dir-chooser
|
||||||
--win-shortcut-prompt
|
--win-shortcut-prompt
|
||||||
--win-update-url "https:\\cryptomator.org\downloads"
|
--win-update-url "https://cryptomator.org/downloads"
|
||||||
--win-menu-group Cryptomator
|
--win-menu-group Cryptomator
|
||||||
--resource-dir dist/win/resources
|
--resource-dir dist/win/resources
|
||||||
--license-file dist/win/resources/license.rtf
|
--license-file dist/win/resources/license.rtf
|
||||||
--file-associations dist/win/resources/FAvaultFile.properties
|
--file-associations dist/win/resources/FAvaultFile.properties
|
||||||
env:
|
env:
|
||||||
JP_WIXWIZARD_RESOURCES: ${{ github.workspace }}/dist/win/resources # requires abs path, used in resources/main.wxs
|
JP_WIXWIZARD_RESOURCES: ${{ github.workspace }}/dist/win/resources/ # requires abs path, used in resources/main.wxs
|
||||||
JP_WIXHELPER_DIR: ${{ github.workspace }}\appdir
|
JP_WIXHELPER_DIR: ${{ github.workspace }}\appdir\
|
||||||
- name: Sign MSI with Azure Trusted Signing
|
- name: Sign MSI with Azure Trusted Signing
|
||||||
if: inputs.sign || github.event_name == 'schedule'
|
if: inputs.sign || github.event_name == 'schedule'
|
||||||
uses: ./.github/actions/win-sign-action
|
uses: ./.github/actions/win-sign-action
|
||||||
@@ -308,7 +330,7 @@ jobs:
|
|||||||
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
||||||
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: msi-${{ matrix.arch }}
|
name: msi-${{ matrix.arch }}
|
||||||
path: |
|
path: |
|
||||||
@@ -328,11 +350,11 @@ jobs:
|
|||||||
- arch: x64
|
- arch: x64
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
executable-suffix: x64
|
executable-suffix: x64
|
||||||
java-dist: 'zulu'
|
java-dist: 'temurin'
|
||||||
java-version: '24.0.1+9'
|
java-version: '26.0.1+8'
|
||||||
java-package: 'jdk'
|
java-package: 'jdk'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
- name: Install wix and extensions
|
- name: Install wix and extensions
|
||||||
run: |
|
run: |
|
||||||
dotnet tool install --global wix --version ${WIX_VERSION}
|
dotnet tool install --global wix --version ${WIX_VERSION}
|
||||||
@@ -348,7 +370,7 @@ jobs:
|
|||||||
- name: Strip version info from msi file name
|
- name: Strip version info from msi file name
|
||||||
run: mv dist/win/bundle/resources/Cryptomator*.msi dist/win/bundle/resources/Cryptomator.msi
|
run: mv dist/win/bundle/resources/Cryptomator*.msi dist/win/bundle/resources/Cryptomator.msi
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
|
uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0
|
||||||
with:
|
with:
|
||||||
distribution: ${{ matrix.java-dist }}
|
distribution: ${{ matrix.java-dist }}
|
||||||
java-version: ${{ matrix.java-version }}
|
java-version: ${{ matrix.java-version }}
|
||||||
@@ -357,14 +379,13 @@ jobs:
|
|||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: Generate license for exe
|
- name: Generate license for exe
|
||||||
run: >
|
run: >
|
||||||
mvn -B license:add-third-party
|
./mvnw -B license:add-third-party
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf"
|
"-Dlicense.thirdPartyFilename=license.rtf"
|
||||||
"-Dlicense.fileTemplate=dist/win/bundle/resources/licenseTemplate.ftl"
|
"-Dlicense.fileTemplate=dist/win/bundle/resources/licenseTemplate.ftl"
|
||||||
"-Dlicense.outputDirectory=dist/win/bundle/resources"
|
"-Dlicense.outputDirectory=dist/win/bundle/resources"
|
||||||
"-Dlicense.includedScopes=compile"
|
"-Dlicense.includedScopes=compile"
|
||||||
"-Dlicense.excludedGroups=^org\.cryptomator"
|
"-Dlicense.excludedGroups=^org\.cryptomator"
|
||||||
"-Dlicense.failOnMissing=true"
|
"-Dlicense.failOnMissing=true"
|
||||||
"-Dlicense.licenseMergesUrl=file:///${{ github.workspace }}/license/merges"
|
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
- name: Download WinFsp
|
- name: Download WinFsp
|
||||||
run: |
|
run: |
|
||||||
@@ -441,7 +462,7 @@ jobs:
|
|||||||
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
||||||
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
with:
|
with:
|
||||||
name: exe-${{ matrix.executable-suffix }}
|
name: exe-${{ matrix.executable-suffix }}
|
||||||
path: |
|
path: |
|
||||||
@@ -461,7 +482,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
- name: Publish installers on GitHub Releases
|
- name: Publish installers on GitHub Releases
|
||||||
id: publish
|
id: publish
|
||||||
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ on:
|
|||||||
description: 'Release tag'
|
description: 'Release tag'
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
winget:
|
winget:
|
||||||
name: Publish winget package
|
name: Publish winget package
|
||||||
|
|||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
wrapperVersion=3.3.4
|
||||||
|
distributionType=only-script
|
||||||
|
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.zip
|
||||||
|
distributionSha256Sum=5af3b743dd8b876b5c45da33b676251e5f1687712644abb4ee519ca56e1d89ce
|
||||||
+43
-1
@@ -8,10 +8,52 @@ The changelog starts with version 1.19.0.
|
|||||||
Changes to prior versions can be found on the [Github release page](https://github.com/cryptomator/cryptomator/releases).
|
Changes to prior versions can be found on the [Github release page](https://github.com/cryptomator/cryptomator/releases).
|
||||||
|
|
||||||
|
|
||||||
## [Unreleased](https://github.com/cryptomator/cryptomator/compare/1.19.2...HEAD)
|
## [Unreleased](https://github.com/cryptomator/cryptomator/compare/1.19.3...HEAD)
|
||||||
|
### Fixed
|
||||||
|
* Fixed "Locate encrypted file" opening the file instead of revealing it in the file manager on Linux ([#4272](https://github.com/cryptomator/cryptomator/issues/4272))
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Improved usability of the trust on first use dialog ([#4295](https://github.com/cryptomator/cryptomator/pull/4295))
|
||||||
|
* Migrated code to common JDK 25 APIs and constructs
|
||||||
|
* Added Maven profile to run the app from the command line ([#4317](https://github.com/cryptomator/cryptomator/pull/4317))
|
||||||
|
* Updated dependencies:
|
||||||
|
- `org.cryptomator:integrations-linux` from 1.7.0 to 1.8.0-beta1
|
||||||
|
- `com.fasterxml.jackson.core:jackson-databind` from 2.21.4 to 2.21.6
|
||||||
|
- `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.21.4 to 2.21.6
|
||||||
|
|
||||||
|
|
||||||
|
## [1.19.3](https://github.com/cryptomator/cryptomator/releases/1.19.3) - 2026-06-29
|
||||||
|
### Added
|
||||||
|
* New error dialog if importing a vault fails ([#4243](https://github.com/cryptomator/cryptomator/pull/4243))
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Fixed Cryptomator file extensions were not registered on Windows ([#4219](https://github.com/cryptomator/cryptomator/issues/4219))
|
||||||
|
* Fixed warning was displayed when accessing update tab in settings even though an update check did not ran ([#4194](https://github.com/cryptomator/cryptomator/pull/4194))
|
||||||
|
* Fixed the same vault could be added several times to the vault list ([#4243](https://github.com/cryptomator/cryptomator/pull/4243))
|
||||||
|
* Fixed several Decrypt Name dialogs could be opened on the same vault ([#4164](https://github.com/cryptomator/cryptomator/pull/4164))
|
||||||
|
* Fixed not all mount options in vault specific settings could be displayed ([#4227](https://github.com/cryptomator/cryptomator/pull/4227))
|
||||||
|
* Fixed localhost alias on Windows was not removed on uninstall ([#3993](https://github.com/cryptomator/cryptomator/issues/3993))
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
* Refactored release pipeline to allow immutable releases ([#4205](https://github.com/cryptomator/cryptomator/pull/4205))
|
* Refactored release pipeline to allow immutable releases ([#4205](https://github.com/cryptomator/cryptomator/pull/4205))
|
||||||
|
* Updated to JDK 26.0.1 ([#4244](https://github.com/cryptomator/cryptomator/pull/4244))
|
||||||
|
* Updated to JavaFX 25.0.3 ([#4255](https://github.com/cryptomator/cryptomator/pull/4255))
|
||||||
|
* Drop signing with Actalis issued certificate ([#4169](https://github.com/cryptomator/cryptomator/pull/4169), [#4262](https://github.com/cryptomator/cryptomator/pull/4262))
|
||||||
|
* Fix dagger binding graph issues ([#4147](https://github.com/cryptomator/cryptomator/pull/4147))
|
||||||
|
* Added flatpak build to CI ([#4199](https://github.com/cryptomator/cryptomator/pull/4199))
|
||||||
|
* Added monthly distribution builds to CI ([#4187](https://github.com/cryptomator/cryptomator/pull/4187))
|
||||||
|
* Replaced Guava cache with Caffeine
|
||||||
|
* Updated translations ([#4223](https://github.com/cryptomator/cryptomator/pull/4223))
|
||||||
|
* Updated dependencies:
|
||||||
|
- `org.cryptomator:webdav-nio-adapter` from 3.0.1 to 3.0.2
|
||||||
|
- `org.cryptomator:integrations-api` from 1.8.0 to 1.9.0
|
||||||
|
- `org.slf4j:slf4j-api` from 2.0.17 to 2.0.18
|
||||||
|
- `ch.qos.logback:logback-core` from 1.5.32 to 1.5.35
|
||||||
|
- `ch.qos.logback:logback-classic` from 1.5.32 to 1.5.35
|
||||||
|
- `com.auth0:java-jwt` from 4.5.1 4.5.2
|
||||||
|
- `com.fasterxml.jackson.core:jackson-databind` from 2.21.1 to 2.21.4
|
||||||
|
- `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.21.1 to 2.21.4
|
||||||
|
- `com.github.ben-manes.caffeine:caffeine` from 3.2.3 to 3.2.4
|
||||||
|
|
||||||
|
|
||||||
## [1.19.2](https://github.com/cryptomator/cryptomator/releases/1.19.2) - 2026-03-20
|
## [1.19.2](https://github.com/cryptomator/cryptomator/releases/1.19.2) - 2026-03-20
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ Become our Gold Sponsor and showcase your brand to a targeted audience! Please c
|
|||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://www.gee-whiz.de/"><img src="https://cryptomator.org/img/sponsors/geewhiz.svg" alt="gee-whiz" height="56"></a></td>
|
<td><a href="https://www.gee-whiz.de/"><img src="https://cryptomator.org/img/sponsors/geewhiz.svg" alt="gee-whiz" height="56"></a></td>
|
||||||
<td><a href="https://www.route4me.com/"><img src="https://cryptomator.org/img/sponsors/route4me.svg" alt="Route4Me" height="56"></a></td>
|
<td><a href="https://www.route4me.com/"><img src="https://cryptomator.org/img/sponsors/route4me.svg" alt="Route4Me" height="56"></a></td>
|
||||||
|
<td><a href="https://www.apivoid.com/"><img src="https://cryptomator.org/img/sponsors/apivoid.svg" alt="ApiVoid" height="56"></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -78,20 +79,30 @@ For more information on the security details visit [cryptomator.org](https://doc
|
|||||||
|
|
||||||
### Dependencies
|
### Dependencies
|
||||||
|
|
||||||
* JDK 25 (e.g. temurin, zulu)
|
* JDK 26 (e.g. temurin, zulu)
|
||||||
* Maven 3
|
|
||||||
|
|
||||||
### Run Maven
|
### Run Maven
|
||||||
|
|
||||||
```
|
```
|
||||||
mvn clean install
|
./mvnw clean install
|
||||||
# or mvn clean install -Pwin
|
|
||||||
# or mvn clean install -Pmac
|
|
||||||
# or mvn clean install -Plinux
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This will build all the jars and bundle them together with their OS-specific dependencies under `target`. This can now be used to build native packages.
|
This will build all the jars and bundle them together with their OS-specific dependencies under `target`. This can now be used to build native packages.
|
||||||
|
|
||||||
|
### Running the app
|
||||||
|
|
||||||
|
```
|
||||||
|
./mvnw -Prun compile exec:exec
|
||||||
|
```
|
||||||
|
|
||||||
|
This starts the app with the defaults defined in `pom.xml`. The OS-specific parameters are picked automatically.
|
||||||
|
|
||||||
|
Add the `dev` profile to use the `Cryptomator-Dev` settings, log and mount directories instead, so a development run does not interfere with an installed Cryptomator:
|
||||||
|
|
||||||
|
```
|
||||||
|
./mvnw -Prun,dev compile exec:exec
|
||||||
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
This project is dual-licensed under the GPLv3 for FOSS projects as well as a commercial license for independent software vendors and resellers. If you want to modify this application under different conditions, feel free to contact our support team.
|
This project is dual-licensed under the GPLv3 for FOSS projects as well as a commercial license for independent software vendors and resellers. If you want to modify this application under different conditions, feel free to contact our support team.
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
# This is the Cryptomator administrative configuration file.
|
# This is the Cryptomator administrative configuration file.
|
||||||
# It is a simple key-value pair file.
|
# It is a simple key-value pair file.
|
||||||
# Lines starting with '#' are comments and will be ignored.
|
# Lines starting with '#' are comments and will be ignored.
|
||||||
# For more info, read the docs at https://docs.cryptomator.org/desktop/advanced-settings/
|
# For more info, read the docs at https://docs.cryptomator.org/desktop/admin-config/
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
# Sets the plugin directory and enables plugin loading
|
# Sets the plugin directory and enables plugin loading
|
||||||
|
|||||||
Vendored
+8
-8
@@ -6,29 +6,29 @@ REVISION_NO=`git rev-list --count HEAD`
|
|||||||
|
|
||||||
# check preconditions
|
# check preconditions
|
||||||
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
||||||
command -v mvn >/dev/null 2>&1 || { echo >&2 "mvn not found."; exit 1; }
|
[ -x ../../../mvnw ] || { echo >&2 "mvnw not found at ../../../mvnw."; exit 1; }
|
||||||
command -v curl >/dev/null 2>&1 || { echo >&2 "curl not found."; exit 1; }
|
command -v curl >/dev/null 2>&1 || { echo >&2 "curl not found."; exit 1; }
|
||||||
command -v unzip >/dev/null 2>&1 || { echo >&2 "unzip not found."; exit 1; }
|
command -v unzip >/dev/null 2>&1 || { echo >&2 "unzip not found."; exit 1; }
|
||||||
|
|
||||||
VERSION=$(mvn -f ../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout)
|
VERSION=$(../../../mvnw -f ../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout)
|
||||||
SEMVER_STR=${VERSION}
|
SEMVER_STR=${VERSION}
|
||||||
CPU_ARCH=$(uname -m)
|
CPU_ARCH=$(uname -m)
|
||||||
|
|
||||||
if [[ ! "${CPU_ARCH}" =~ x86_64|aarch64 ]]; then echo "Platform ${CPU_ARCH} not supported"; exit 1; fi
|
if [[ ! "${CPU_ARCH}" =~ x86_64|aarch64 ]]; then echo "Platform ${CPU_ARCH} not supported"; exit 1; fi
|
||||||
|
|
||||||
mvn -f ../../../pom.xml versions:set -DnewVersion=${SEMVER_STR}
|
../../../mvnw -f ../../../pom.xml versions:set -DnewVersion=${SEMVER_STR}
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests
|
../../../mvnw -B -f ../../../pom.xml clean package -DskipTests
|
||||||
cp ../../../LICENSE.txt ../../../target
|
cp ../../../LICENSE.txt ../../../target
|
||||||
cp ../../../target/cryptomator-*.jar ../../../target/mods
|
cp ../../../target/cryptomator-*.jar ../../../target/mods
|
||||||
|
|
||||||
JAVAFX_VERSION=25.0.2
|
JAVAFX_VERSION=25.0.3
|
||||||
JAVAFX_ARCH="x64"
|
JAVAFX_ARCH="x64"
|
||||||
JAVAFX_JMODS_SHA256='e0a9c29d8cf3af9b8b48848b43f87b5785bc107c53a951b19668ce05842bba1b'
|
JAVAFX_JMODS_SHA256='47035c653863a8e4be3dc6f142b8dbd84b4bb1efc9a8cbc68413e6a5ff5e9f50'
|
||||||
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
||||||
JAVAFX_ARCH="aarch64"
|
JAVAFX_ARCH="aarch64"
|
||||||
JAVAFX_JMODS_SHA256='c3408f818693cce09e59829a8e862a82c7695fdfcd585c41cfd527f5fc3fe646'
|
JAVAFX_JMODS_SHA256='e3fd682354346845d2944a2da2b1ff2b6cb9259d92027f2f9c121b9b93c5e42f'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# download javaFX jmods
|
# download javaFX jmods
|
||||||
@@ -42,7 +42,7 @@ unzip -o -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/jav
|
|||||||
JMOD_VERSION=$(jmod describe ./openjfx-jmods/javafx.base.jmod | head -1)
|
JMOD_VERSION=$(jmod describe ./openjfx-jmods/javafx.base.jmod | head -1)
|
||||||
JMOD_VERSION=${JMOD_VERSION#*@}
|
JMOD_VERSION=${JMOD_VERSION#*@}
|
||||||
JMOD_VERSION=${JMOD_VERSION%%.*}
|
JMOD_VERSION=${JMOD_VERSION%%.*}
|
||||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout -B -f ../../../pom.xml)
|
POM_JFX_VERSION=$(../../../mvnw help:evaluate "-Dexpression=javafx.version" -q -DforceStdout -B -f ../../../pom.xml)
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||||
if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then
|
if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then
|
||||||
|
|||||||
@@ -84,6 +84,9 @@
|
|||||||
</content_rating>
|
</content_rating>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
|
<release date="2026-06-29" version="1.19.3">
|
||||||
|
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.19.3</url>
|
||||||
|
</release>
|
||||||
<release date="2026-03-20" version="1.19.2">
|
<release date="2026-03-20" version="1.19.2">
|
||||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.19.2</url>
|
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.19.2</url>
|
||||||
</release>
|
</release>
|
||||||
|
|||||||
Vendored
+1
-1
@@ -2,7 +2,7 @@ Source: cryptomator
|
|||||||
Maintainer: Cryptobot <releases@cryptomator.org>
|
Maintainer: Cryptobot <releases@cryptomator.org>
|
||||||
Section: utils
|
Section: utils
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Build-Depends: debhelper (>=10), openjdk-25-jdk (>= 25+36), libgtk-3-0 (>= 3.20.0), libxxf86vm1, libgl1
|
Build-Depends: debhelper (>=10), coffeelibs-jdk-26 (>= 26.0.1+8-0ppa1), libgtk-3-0 (>= 3.20.0), libxxf86vm1, libgl1
|
||||||
Standards-Version: 4.5.0
|
Standards-Version: 4.5.0
|
||||||
Homepage: https://cryptomator.org
|
Homepage: https://cryptomator.org
|
||||||
Vcs-Git: https://github.com/cryptomator/cryptomator.git
|
Vcs-Git: https://github.com/cryptomator/cryptomator.git
|
||||||
|
|||||||
Vendored
+1
-2
@@ -4,12 +4,11 @@
|
|||||||
# Uncomment this to turn on verbose mode.
|
# Uncomment this to turn on verbose mode.
|
||||||
#export DH_VERBOSE=1
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
|
JAVA_HOME = /usr/lib/jvm/java-26-coffeelibs
|
||||||
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
||||||
ifeq ($(DEB_BUILD_ARCH),amd64)
|
ifeq ($(DEB_BUILD_ARCH),amd64)
|
||||||
JAVA_HOME = /usr/lib/jvm/java-25-openjdk-amd64
|
|
||||||
JMODS_PATH = jmods/amd64:${JAVA_HOME}/jmods
|
JMODS_PATH = jmods/amd64:${JAVA_HOME}/jmods
|
||||||
else ifeq ($(DEB_BUILD_ARCH),arm64)
|
else ifeq ($(DEB_BUILD_ARCH),arm64)
|
||||||
JAVA_HOME = /usr/lib/jvm/java-25-openjdk-arm64
|
|
||||||
JMODS_PATH = jmods/aarch64:${JAVA_HOME}/jmods
|
JMODS_PATH = jmods/aarch64:${JAVA_HOME}/jmods
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
+13
-9
@@ -1,11 +1,15 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# based on https://gitlab.gnome.org/GNOME/gnome-builder/-/blob/main/build-aux/flatpak/fusermount-wrapper.sh
|
# From: https://gitlab.gnome.org/GNOME/gnome-builder/-/blob/main/build-aux/flatpak/fusermount-wrapper.sh
|
||||||
#
|
|
||||||
# Sandbox escape hatch to call fusermount3 on the host system
|
if [ -z "$_FUSE_COMMFD" ]; then
|
||||||
#
|
FD_ARGS=
|
||||||
# * fusermount3 is required for mount and unmount
|
else
|
||||||
# * FUSE3 requires for mounting a socket for communication, its file descriptor id is given in the _FUSE_COMMFD variable
|
FD_ARGS="--env=_FUSE_COMMFD=${_FUSE_COMMFD} --forward-fd=${_FUSE_COMMFD}"
|
||||||
# * Forwarding fd 1 and fd 2 ensures to catch process output of the fuse process
|
fi
|
||||||
# * watch-bus ensures when the flatpak exits, also this process is killed
|
|
||||||
exec flatpak-spawn --host --watch-bus --forward-fd=1 --forward-fd=2 --env=_FUSE_COMMFD=${_FUSE_COMMFD} --forward-fd=${_FUSE_COMMFD} fusermount3 "$@"
|
if [ -e /proc/self/fd/3 ] && [ 3 != "$_FUSE_COMMFD" ]; then
|
||||||
|
FD_ARGS="$FD_ARGS --forward-fd=3"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec flatpak-spawn --host --forward-fd=1 --forward-fd=2 $FD_ARGS fusermount3 "$@"
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ modules:
|
|||||||
- mkdir maven
|
- mkdir maven
|
||||||
- tar xf maven.tar.gz --strip-components=1 --exclude=jansi-native --directory=maven
|
- tar xf maven.tar.gz --strip-components=1 --exclude=jansi-native --directory=maven
|
||||||
# Build project
|
# Build project
|
||||||
- maven/bin/mvn clean package -DskipTests -P"linux-$(uname -m)"
|
- maven/bin/mvn clean package -DskipTests
|
||||||
- cp target/cryptomator-*.jar target/mods
|
- cp target/cryptomator-*.jar target/mods
|
||||||
- cd target
|
- cd target
|
||||||
- $JAVA_HOME/bin/jlink
|
- $JAVA_HOME/bin/jlink
|
||||||
@@ -150,26 +150,26 @@ modules:
|
|||||||
dest-filename: jdk.tar.gz
|
dest-filename: jdk.tar.gz
|
||||||
only-arches:
|
only-arches:
|
||||||
- x86_64
|
- x86_64
|
||||||
url: https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.2%2B10/OpenJDK25U-jdk_x64_linux_hotspot_25.0.2_10.tar.gz
|
url: https://github.com/adoptium/temurin26-binaries/releases/download/jdk-26.0.1%2B8/OpenJDK26U-jdk_x64_linux_hotspot_26.0.1_8.tar.gz
|
||||||
sha512: 29043fde119a031c2ca8d57aed445fedd9e7f74608fcdc7a809076ba84cfd1c31f08de2ecccf352e159fdcd1cae172395ed46363007552ff242057826c81ab3a
|
sha512: eb46cda97ffd46e2e0c1f6f977dc204d9cc969b958946287b7e7d0bfe859fd92faccb2f6ef79995421a963c6de140c436af559403e0a2cd27c90b06c20260d5c
|
||||||
- type: file
|
- type: file
|
||||||
dest-filename: jdk.tar.gz
|
dest-filename: jdk.tar.gz
|
||||||
only-arches:
|
only-arches:
|
||||||
- aarch64
|
- aarch64
|
||||||
url: https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.2%2B10/OpenJDK25U-jdk_aarch64_linux_hotspot_25.0.2_10.tar.gz
|
url: https://github.com/adoptium/temurin26-binaries/releases/download/jdk-26.0.1%2B8/OpenJDK26U-jdk_aarch64_linux_hotspot_26.0.1_8.tar.gz
|
||||||
sha512: f1d3ccec3e1f1bed9d632f14b9223709d6e5c2e0d922125d068870dd3016492a2ca8f08924d4a9d0dc5eb2159fa09efee366a748fd0093475baf29e5c70c781a
|
sha512: 3c31671552712a8f0df96df2eeae7e9ad5156c0e98ebd5bf4fa04c14bba58bd5e19ff567ddcdc7aa478f6f4b0a852762a09bd88d3132acb121e667cfe0397034
|
||||||
- type: file
|
- type: file
|
||||||
dest-filename: openjfx.zip
|
dest-filename: openjfx.zip
|
||||||
only-arches:
|
only-arches:
|
||||||
- x86_64
|
- x86_64
|
||||||
url: https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_linux-x64_bin-jmods.zip
|
url: https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_linux-x64_bin-jmods.zip
|
||||||
sha512: 21f550217101c513f9eb1d7947eba30cb79618238e6539ce770e54e84b01574cdaeba40af602391145f163dd8e43e3794395467413152f13ffffeff948b0ca1b
|
sha512: 75605440f13d0337e70ada1220f77d0d9780fb4602e676f1f07674d8b2e296b25080549d07edcca8f66733e15388860e3472d4ff6d51fd72b0452ed8bbe78022
|
||||||
- type: file
|
- type: file
|
||||||
dest-filename: openjfx.zip
|
dest-filename: openjfx.zip
|
||||||
only-arches:
|
only-arches:
|
||||||
- aarch64
|
- aarch64
|
||||||
url: https://download2.gluonhq.com/openjfx/25.0.2/openjfx-25.0.2_linux-aarch64_bin-jmods.zip
|
url: https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_linux-aarch64_bin-jmods.zip
|
||||||
sha512: a9268409b3803e386490bf1319d0f0a14173cebe862c12254cd51b430ee0a297437d9e38d5ebeae0da8899be898b312b103330d09dcfd3e63c1e7d15f2f14311
|
sha512: 30c509b880ced1b29e0fafa41073d2350a16296d9439124b9a0e3bb391bf7f27e34d5abcfb338df11e5e898175699bceac40574bc9ad123ff071a5964f8fb14d
|
||||||
- type: file
|
- type: file
|
||||||
dest-filename: maven.tar.gz
|
dest-filename: maven.tar.gz
|
||||||
url: https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.9.13/apache-maven-3.9.13-bin.tar.gz
|
url: https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.9.13/apache-maven-3.9.13-bin.tar.gz
|
||||||
|
|||||||
Vendored
+7
-7
@@ -14,8 +14,8 @@ license=('GPL3')
|
|||||||
depends=('fuse3' 'alsa-lib' 'hicolor-icon-theme' 'libxtst' 'libnet' 'libxrender')
|
depends=('fuse3' 'alsa-lib' 'hicolor-icon-theme' 'libxtst' 'libnet' 'libxrender')
|
||||||
makedepends=('maven' 'unzip')
|
makedepends=('maven' 'unzip')
|
||||||
optdepends=('keepassxc-cryptomator: Use KeePassXC to store vault passwords' 'ttf-hanazono: Install this font when using Japanese system language')
|
optdepends=('keepassxc-cryptomator: Use KeePassXC to store vault passwords' 'ttf-hanazono: Install this font when using Japanese system language')
|
||||||
_jdkver=25.0.2+10
|
_jdkver=26.0.1+8
|
||||||
_jfxver=25.0.2
|
_jfxver=25.0.3
|
||||||
_src_app_dir=cryptomator-${pkgver//_/-}
|
_src_app_dir=cryptomator-${pkgver//_/-}
|
||||||
source=($SOURCES);
|
source=($SOURCES);
|
||||||
source_x86_64=("jdk-${_jdkver}.tar.gz::https://github.com/adoptium/temurin${_jdkver:0:2}-binaries/releases/download/jdk-${_jdkver//\+/%2B}/OpenJDK${_jdkver:0:2}U-jdk_x64_linux_hotspot_${_jdkver//\+/_}.tar.gz"
|
source_x86_64=("jdk-${_jdkver}.tar.gz::https://github.com/adoptium/temurin${_jdkver:0:2}-binaries/releases/download/jdk-${_jdkver//\+/%2B}/OpenJDK${_jdkver:0:2}U-jdk_x64_linux_hotspot_${_jdkver//\+/_}.tar.gz"
|
||||||
@@ -24,10 +24,10 @@ source_aarch64=("jdk-${_jdkver}.tar.gz::https://github.com/adoptium/temurin${_jd
|
|||||||
"openjfx-${_jfxver}.zip::https://download2.gluonhq.com/openjfx/${_jfxver}/openjfx-${_jfxver}_linux-aarch64_bin-jmods.zip")
|
"openjfx-${_jfxver}.zip::https://download2.gluonhq.com/openjfx/${_jfxver}/openjfx-${_jfxver}_linux-aarch64_bin-jmods.zip")
|
||||||
noextract=("jdk-${_jdkver}.tar.gz" "openjfx-${_jfxver}.zip")
|
noextract=("jdk-${_jdkver}.tar.gz" "openjfx-${_jfxver}.zip")
|
||||||
sha256sums=($SOURCES_SHA)
|
sha256sums=($SOURCES_SHA)
|
||||||
sha256sums_x86_64=('987387933b64b9833846dee373b640440d3e1fd48a04804ec01a6dbf718e8ab8'
|
sha256sums_x86_64=('8e512f13e575a43655fc92319436c94890c137b9035cc6bd6f9cf24239704d3a'
|
||||||
'e0a9c29d8cf3af9b8b48848b43f87b5785bc107c53a951b19668ce05842bba1b')
|
'47035c653863a8e4be3dc6f142b8dbd84b4bb1efc9a8cbc68413e6a5ff5e9f50')
|
||||||
sha256sums_aarch64=('a9d73e711d967dc44896d4f430f73a68fd33590dabc29a7f2fb9f593425b854c'
|
sha256sums_aarch64=('613f9b2861dea937b24d5eca745ef8567733b377d0bb612195acaad0e3f61360'
|
||||||
'c3408f818693cce09e59829a8e862a82c7695fdfcd585c41cfd527f5fc3fe646')
|
'e3fd682354346845d2944a2da2b1ff2b6cb9259d92027f2f9c121b9b93c5e42f')
|
||||||
options=('!strip')
|
options=('!strip')
|
||||||
|
|
||||||
validpgpkeys=('58117AFA1F85B3EEC154677D615D449FE6E6A235')
|
validpgpkeys=('58117AFA1F85B3EEC154677D615D449FE6E6A235')
|
||||||
@@ -47,7 +47,7 @@ build() {
|
|||||||
|
|
||||||
cd "${srcdir}/${_src_app_dir}"
|
cd "${srcdir}/${_src_app_dir}"
|
||||||
|
|
||||||
mvn -B clean package -DskipTests -Plinux
|
mvn -B clean package -DskipTests
|
||||||
|
|
||||||
cp LICENSE.txt target
|
cp LICENSE.txt target
|
||||||
cp target/cryptomator-*.jar target/mods
|
cp target/cryptomator-*.jar target/mods
|
||||||
|
|||||||
Vendored
+9
-10
@@ -29,24 +29,24 @@ PACKAGE_IDENTIFIER="org.cryptomator"
|
|||||||
MAIN_JAR_GLOB="cryptomator-*.jar"
|
MAIN_JAR_GLOB="cryptomator-*.jar"
|
||||||
MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator"
|
MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator"
|
||||||
REVISION_NO=`git rev-list --count HEAD`
|
REVISION_NO=`git rev-list --count HEAD`
|
||||||
VERSION_NO=`mvn -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
|
VERSION_NO=`../../../mvnw -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
|
||||||
FUSE_LIB="FUSE-T"
|
FUSE_LIB="FUSE-T"
|
||||||
|
|
||||||
JAVAFX_VERSION=25.0.2
|
JAVAFX_VERSION=25.0.3
|
||||||
JAVAFX_ARCH="undefined"
|
JAVAFX_ARCH="undefined"
|
||||||
JAVAFX_JMODS_SHA256="undefined"
|
JAVAFX_JMODS_SHA256="undefined"
|
||||||
if [ "$(machine)" = "arm64e" ]; then
|
if [ "$(machine)" = "arm64e" ]; then
|
||||||
JAVAFX_ARCH="aarch64"
|
JAVAFX_ARCH="aarch64"
|
||||||
JAVAFX_JMODS_SHA256="4cd258001c75af7047005c5c891e2400ed11d24fbb09412324c0cbaf8b503c5a"
|
JAVAFX_JMODS_SHA256="a52014d625b8b04e57fd71650f881c1397542b4018e1b04f1b4e66c8800a1f34"
|
||||||
else
|
else
|
||||||
JAVAFX_ARCH="x64"
|
JAVAFX_ARCH="x64"
|
||||||
JAVAFX_JMODS_SHA256="0b4d8463f03901b7425d94628e4116b7078abb8dd540fbec415266fac20bda5c"
|
JAVAFX_JMODS_SHA256="3512fabe43aee467538d329cfbbaab3c53dff2a810f0d54e381f461d5e0fac43"
|
||||||
fi
|
fi
|
||||||
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"
|
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"
|
||||||
|
|
||||||
# check preconditions
|
# check preconditions
|
||||||
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
||||||
command -v mvn >/dev/null 2>&1 || { echo >&2 "mvn not found. Fix by 'brew install maven'."; exit 1; }
|
[ -x ../../../mvnw ] || { echo >&2 "mvnw not found at ../../../mvnw."; exit 1; }
|
||||||
command -v create-dmg >/dev/null 2>&1 || { echo >&2 "create-dmg not found. Fix by 'brew install create-dmg'."; exit 1; }
|
command -v create-dmg >/dev/null 2>&1 || { echo >&2 "create-dmg not found. Fix by 'brew install create-dmg'."; exit 1; }
|
||||||
if [ -n "${CODESIGN_IDENTITY}" ]; then
|
if [ -n "${CODESIGN_IDENTITY}" ]; then
|
||||||
command -v codesign >/dev/null 2>&1 || { echo >&2 "codesign not found. Fix by 'xcode-select --install'."; exit 1; }
|
command -v codesign >/dev/null 2>&1 || { echo >&2 "codesign not found. Fix by 'xcode-select --install'."; exit 1; }
|
||||||
@@ -61,7 +61,7 @@ unzip -jo openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javaf
|
|||||||
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
||||||
JMOD_VERSION=${JMOD_VERSION#*@}
|
JMOD_VERSION=${JMOD_VERSION#*@}
|
||||||
JMOD_VERSION=${JMOD_VERSION%%.*}
|
JMOD_VERSION=${JMOD_VERSION%%.*}
|
||||||
POM_JFX_VERSION=$(mvn -f../../../pom.xml help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
POM_JFX_VERSION=$(../../../mvnw -f../../../pom.xml help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ if [ "${POM_JFX_VERSION}" -ne "${JMOD_VERSION}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
mvn -B -f../../../pom.xml clean package -DskipTests -Pmac
|
../../../mvnw -B -f../../../pom.xml clean package -DskipTests -Pmac
|
||||||
cp ../../../LICENSE.txt ../../../target
|
cp ../../../LICENSE.txt ../../../target
|
||||||
cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
||||||
|
|
||||||
@@ -137,14 +137,13 @@ sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" ${APP_NAME}.app/Contents/Inf
|
|||||||
cp ../embedded.provisionprofile ${APP_NAME}.app/Contents/
|
cp ../embedded.provisionprofile ${APP_NAME}.app/Contents/
|
||||||
|
|
||||||
# generate license
|
# generate license
|
||||||
mvn -B -f../../../pom.xml license:add-third-party \
|
../../../mvnw -B -f../../../pom.xml license:add-third-party \
|
||||||
-Dlicense.thirdPartyFilename=license.rtf \
|
-Dlicense.thirdPartyFilename=license.rtf \
|
||||||
-Dlicense.outputDirectory=dist/mac/dmg/resources \
|
-Dlicense.outputDirectory=dist/mac/dmg/resources \
|
||||||
-Dlicense.fileTemplate=resources/licenseTemplate.ftl \
|
-Dlicense.fileTemplate=resources/licenseTemplate.ftl \
|
||||||
-Dlicense.includedScopes=compile \
|
-Dlicense.includedScopes=compile \
|
||||||
-Dlicense.excludedGroups=^org\.cryptomator \
|
-Dlicense.excludedGroups=^org\.cryptomator \
|
||||||
-Dlicense.failOnMissing=true \
|
-Dlicense.failOnMissing=true
|
||||||
-Dlicense.licenseMergesUrl=file://$(pwd)/../../../license/merges
|
|
||||||
|
|
||||||
# codesign
|
# codesign
|
||||||
if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
|
if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
|
||||||
|
|||||||
Vendored
+89
-72
@@ -16,6 +16,19 @@ Param(
|
|||||||
# Function Definitions Section
|
# Function Definitions Section
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
function Invoke-CommandWithExitCheck {
|
||||||
|
param (
|
||||||
|
[string]$Command,
|
||||||
|
[string[]]$Arguments
|
||||||
|
)
|
||||||
|
|
||||||
|
& $Command @Arguments
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
Write-Error "Command '$Command' failed with exit code $LASTEXITCODE"
|
||||||
|
exit $LASTEXITCODE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function Main {
|
function Main {
|
||||||
|
|
||||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||||
@@ -27,11 +40,6 @@ if ((Get-Command "git" -ErrorAction SilentlyContinue) -eq $null)
|
|||||||
Write-Error "Unable to find git.exe in your PATH (try: choco install git)"
|
Write-Error "Unable to find git.exe in your PATH (try: choco install git)"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
if ((Get-Command "mvn" -ErrorAction SilentlyContinue) -eq $null)
|
|
||||||
{
|
|
||||||
Write-Error "Unable to find mvn.cmd in your PATH (try: choco install maven)"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
if ((Get-Command 'wix' -ErrorAction SilentlyContinue) -eq $null)
|
if ((Get-Command 'wix' -ErrorAction SilentlyContinue) -eq $null)
|
||||||
{
|
{
|
||||||
Write-Error 'Unable to find wix in your PATH (try: dotnet tool install --global wix --version 6.0.2)'
|
Write-Error 'Unable to find wix in your PATH (try: dotnet tool install --global wix --version 6.0.2)'
|
||||||
@@ -52,7 +60,7 @@ if ($wixExtensions -notmatch 'WixToolset.BootstrapperApplications.wixext') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$buildDir = Split-Path -Parent $PSCommandPath
|
$buildDir = Split-Path -Parent $PSCommandPath
|
||||||
$version = $(mvn -f $buildDir/../../pom.xml help:evaluate -Dexpression="project.version" -q -DforceStdout)
|
$version = $(../../mvnw.cmd -f $buildDir/../../pom.xml help:evaluate -Dexpression="project.version" -q -DforceStdout)
|
||||||
$semVerNo = $version -replace '(\d+\.\d+\.\d+).*','$1'
|
$semVerNo = $version -replace '(\d+\.\d+\.\d+).*','$1'
|
||||||
$revisionNo = $(git rev-list --count HEAD)
|
$revisionNo = $(git rev-list --count HEAD)
|
||||||
|
|
||||||
@@ -65,7 +73,8 @@ Write-Host "`$Env:JAVA_HOME=$Env:JAVA_HOME"
|
|||||||
$copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor"
|
$copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor"
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
&mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin
|
Invoke-CommandWithExitCheck -Command `
|
||||||
|
"../../mvnw.cmd" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "clean", "package", "-DskipTests", "-Pwin")
|
||||||
Copy-Item "$buildDir\..\..\target\$MainJarGlob.jar" -Destination "$buildDir\..\..\target\mods"
|
Copy-Item "$buildDir\..\..\target\$MainJarGlob.jar" -Destination "$buildDir\..\..\target\mods"
|
||||||
|
|
||||||
# add runtime
|
# add runtime
|
||||||
@@ -93,9 +102,9 @@ switch ($archName) {
|
|||||||
$jmodPaths = "$Env:JAVA_HOME/jmods"
|
$jmodPaths = "$Env:JAVA_HOME/jmods"
|
||||||
}
|
}
|
||||||
'x64' {
|
'x64' {
|
||||||
$javaFxVersion='25.0.2'
|
$javaFxVersion='25.0.3'
|
||||||
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
|
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
|
||||||
$javaFxJmodsSHA256 = '33d878dfac85590c4d77c518ed413e512d34a8479d90132b230a7ddd173576b3'
|
$javaFxJmodsSHA256 = '0bf9b83260b85607a9ba200124debabd9cdb013cbc0d659e62a20192a7137907'
|
||||||
$javaFxJmods = '.\resources\jfxJmods.zip'
|
$javaFxJmods = '.\resources\jfxJmods.zip'
|
||||||
|
|
||||||
if( !(Test-Path -Path $javaFxJmods) ) {
|
if( !(Test-Path -Path $javaFxJmods) ) {
|
||||||
@@ -129,16 +138,18 @@ if ((& "$Env:JAVA_HOME\bin\jlink" --help | Select-String -Pattern "Linking from
|
|||||||
}
|
}
|
||||||
|
|
||||||
### create runtime
|
### create runtime
|
||||||
& "$Env:JAVA_HOME\bin\jlink" `
|
Invoke-CommandWithExitCheck -Command `
|
||||||
--verbose `
|
"$Env:JAVA_HOME\bin\jlink" -Arguments @(
|
||||||
--output runtime `
|
"--verbose",
|
||||||
--module-path $jmodPaths `
|
"--output", "runtime",
|
||||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.crypto.mscapi,java.compiler,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
|
"--module-path", $jmodPaths,
|
||||||
--strip-native-commands `
|
"--add-modules", "java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.crypto.mscapi,java.compiler,javafx.base,javafx.graphics,javafx.controls,javafx.fxml",
|
||||||
--no-header-files `
|
"--strip-native-commands",
|
||||||
--no-man-pages `
|
"--no-header-files",
|
||||||
--strip-debug `
|
"--no-man-pages",
|
||||||
--compress "zip-0" #do not compress and use msi compression
|
"--strip-debug",
|
||||||
|
"--compress", "zip-0" #do not compress and use msi compression
|
||||||
|
)
|
||||||
|
|
||||||
$appPath = ".\$AppName"
|
$appPath = ".\$AppName"
|
||||||
if ($clean -and (Test-Path -Path $appPath)) {
|
if ($clean -and (Test-Path -Path $appPath)) {
|
||||||
@@ -195,14 +206,14 @@ if ($LASTEXITCODE -ne 0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#Create RTF license for msi
|
#Create RTF license for msi
|
||||||
&mvn -B -f $buildDir/../../pom.xml license:add-third-party `
|
Invoke-CommandWithExitCheck -Command `
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf" `
|
"../../mvnw.cmd" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "license:add-third-party", `
|
||||||
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl" `
|
"-Dlicense.thirdPartyFilename=license.rtf", `
|
||||||
"-Dlicense.outputDirectory=$buildDir\resources\" `
|
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl", `
|
||||||
"-Dlicense.includedScopes=compile" `
|
"-Dlicense.outputDirectory=$buildDir\resources\", `
|
||||||
"-Dlicense.excludedGroups=^org\.cryptomator" `
|
"-Dlicense.includedScopes=compile", `
|
||||||
"-Dlicense.failOnMissing=true" `
|
"-Dlicense.excludedGroups=^org\.cryptomator", `
|
||||||
"-Dlicense.licenseMergesUrl=file:///$buildDir/../../license/merges"
|
"-Dlicense.failOnMissing=true")
|
||||||
|
|
||||||
# patch app dir
|
# patch app dir
|
||||||
Copy-Item "contrib\*" -Destination "$AppName"
|
Copy-Item "contrib\*" -Destination "$AppName"
|
||||||
@@ -210,42 +221,45 @@ attrib -r "$AppName\$AppName.exe"
|
|||||||
attrib -r "$AppName\${AppName} (Debug).exe"
|
attrib -r "$AppName\${AppName} (Debug).exe"
|
||||||
|
|
||||||
# create .msi
|
# create .msi
|
||||||
$Env:JP_WIXWIZARD_RESOURCES = "$buildDir\resources"
|
$Env:JP_WIXWIZARD_RESOURCES = "$buildDir\resources\"
|
||||||
$Env:JP_WIXHELPER_DIR = "."
|
$Env:JP_WIXWIZARD_RESOURCES_PROPERTIES_FORMAT = "${Env:JP_WIXWIZARD_RESOURCES}".Replace('\', '\\');
|
||||||
& "$Env:JAVA_HOME\bin\jpackage" `
|
$Env:JP_WIXHELPER_DIR = ""
|
||||||
--verbose `
|
|
||||||
--type msi `
|
|
||||||
--win-upgrade-uuid $UpgradeUUID `
|
|
||||||
--app-image $AppName `
|
|
||||||
--dest installer `
|
|
||||||
--name $AppName `
|
|
||||||
--vendor $Vendor `
|
|
||||||
--copyright $copyright `
|
|
||||||
--app-version "$semVerNo.$revisionNo" `
|
|
||||||
--win-menu `
|
|
||||||
--win-dir-chooser `
|
|
||||||
--win-shortcut-prompt `
|
|
||||||
--win-menu-group $AppName `
|
|
||||||
--resource-dir resources `
|
|
||||||
--license-file resources/license.rtf `
|
|
||||||
--win-update-url $UpdateUrl `
|
|
||||||
--about-url $AboutUrl `
|
|
||||||
--file-associations resources/FAvaultFile.properties
|
|
||||||
|
|
||||||
if ($LASTEXITCODE -ne 0) {
|
Get-Content .\resources\FAvaultFile.template.properties ` # Similar to envsubst
|
||||||
Write-Error "jpackage MSI failed with exit code $LASTEXITCODE"
|
| ForEach-Object { $ExecutionContext.InvokeCommand.ExpandString($_) } `
|
||||||
return 1;
|
| Out-File -FilePath .\resources\FAvaultFile.properties
|
||||||
}
|
|
||||||
|
Invoke-CommandWithExitCheck -Command `
|
||||||
|
"$Env:JAVA_HOME\bin\jpackage" -Arguments @(
|
||||||
|
"--verbose",
|
||||||
|
"--type", "msi",
|
||||||
|
"--win-upgrade-uuid", $UpgradeUUID,
|
||||||
|
"--app-image", $AppName,
|
||||||
|
"--dest", "installer",
|
||||||
|
"--name", $AppName,
|
||||||
|
"--vendor", $Vendor,
|
||||||
|
"--copyright", $copyright,
|
||||||
|
"--app-version", "$semVerNo.$revisionNo",
|
||||||
|
"--win-menu",
|
||||||
|
"--win-dir-chooser",
|
||||||
|
"--win-shortcut-prompt",
|
||||||
|
"--win-menu-group", $AppName,
|
||||||
|
"--resource-dir", "resources",
|
||||||
|
"--license-file", "resources/license.rtf",
|
||||||
|
"--win-update-url", $UpdateUrl,
|
||||||
|
"--about-url", $AboutUrl,
|
||||||
|
"--file-associations", "resources/FAvaultFile.properties"
|
||||||
|
)
|
||||||
|
|
||||||
#Create RTF license for bundle
|
#Create RTF license for bundle
|
||||||
&mvn -B -f $buildDir/../../pom.xml license:add-third-party `
|
Invoke-CommandWithExitCheck -Command `
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf" `
|
"../../mvnw.cmd" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "license:add-third-party", `
|
||||||
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl" `
|
"-Dlicense.thirdPartyFilename=license.rtf", `
|
||||||
"-Dlicense.outputDirectory=$buildDir\bundle\resources\" `
|
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl", `
|
||||||
"-Dlicense.includedScopes=compile" `
|
"-Dlicense.outputDirectory=$buildDir\bundle\resources\", `
|
||||||
"-Dlicense.excludedGroups=^org\.cryptomator" `
|
"-Dlicense.includedScopes=compile", `
|
||||||
"-Dlicense.failOnMissing=true" `
|
"-Dlicense.excludedGroups=^org\.cryptomator", `
|
||||||
"-Dlicense.licenseMergesUrl=file:///$buildDir/../../license/merges"
|
"-Dlicense.failOnMissing=true")
|
||||||
|
|
||||||
# download Winfsp
|
# download Winfsp
|
||||||
$winfspMsiUrl= 'https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi'
|
$winfspMsiUrl= 'https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi'
|
||||||
@@ -271,18 +285,21 @@ Invoke-WebRequest $winfspUninstaller -OutFile ".\bundle\resources\winfsp-uninsta
|
|||||||
Copy-Item ".\installer\$AppName-*.msi" -Destination ".\bundle\resources\$AppName.msi" -Force
|
Copy-Item ".\installer\$AppName-*.msi" -Destination ".\bundle\resources\$AppName.msi" -Force
|
||||||
|
|
||||||
# create bundle including winfsp
|
# create bundle including winfsp
|
||||||
& wix build `
|
Invoke-CommandWithExitCheck -Command `
|
||||||
-define BundleName="$AppName" `
|
"wix" -Arguments @(
|
||||||
-define BundleVersion="$semVerNo.$revisionNo" `
|
"build",
|
||||||
-define BundleVendor="$Vendor" `
|
"-define", "BundleName=$AppName",
|
||||||
-define BundleCopyright="$copyright" `
|
"-define", "BundleVersion=$semVerNo.$revisionNo",
|
||||||
-define AboutUrl="$AboutUrl" `
|
"-define", "BundleVendor=$Vendor",
|
||||||
-define HelpUrl="$HelpUrl" `
|
"-define", "BundleCopyright=$copyright",
|
||||||
-define UpdateUrl="$UpdateUrl" `
|
"-define", "AboutUrl=$AboutUrl",
|
||||||
-ext "WixToolset.Util.wixext" `
|
"-define", "HelpUrl=$HelpUrl",
|
||||||
-ext "WixToolset.BootstrapperApplications.wixext" `
|
"-define", "UpdateUrl=$UpdateUrl",
|
||||||
.\bundle\bundleWithWinfsp.wxs `
|
"-ext", "WixToolset.Util.wixext",
|
||||||
-out "installer\$AppName-Installer.exe"
|
"-ext", "WixToolset.BootstrapperApplications.wixext",
|
||||||
|
".\bundle\bundleWithWinfsp.wxs",
|
||||||
|
"-out", ".\installer\$AppName-Installer.exe"
|
||||||
|
)
|
||||||
|
|
||||||
Write-Host "Created EXE installer .\installer\$AppName-Installer.exe"
|
Write-Host "Created EXE installer .\installer\$AppName-Installer.exe"
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
mime-type=application/vnd.cryptomator.vault
|
mime-type=application/vnd.cryptomator.vault
|
||||||
extension=cryptomator
|
extension=cryptomator
|
||||||
description=Cryptomator Vault File
|
description=Cryptomator Vault File
|
||||||
icon=resources/Cryptomator-Vault.ico
|
icon=C:\\Users\\Arbeit\\Skymatic\\cryptomator-jdk26-jpackage\\dist\\win\\resources\\Cryptomator-Vault.ico
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
mime-type=application/vnd.cryptomator.vault
|
||||||
|
extension=cryptomator
|
||||||
|
description=Cryptomator Vault File
|
||||||
|
icon=${env:JP_WIXWIZARD_RESOURCES_PROPERTIES_FORMAT}Cryptomator-Vault.ico
|
||||||
Vendored
+3
-3
@@ -68,7 +68,7 @@
|
|||||||
<?endif?>
|
<?endif?>
|
||||||
|
|
||||||
<!-- TODO: how does this work again? -->
|
<!-- TODO: how does this work again? -->
|
||||||
<ns0:Binary Id="JpCaDll" SourceFile="$(env.JP_WIXHELPER_DIR)\wixhelper.dll" />
|
<ns0:Binary Id="JpCaDll" SourceFile="$(env.JP_WIXHELPER_DIR)msica.dll"></ns0:Binary>
|
||||||
<ns0:CustomAction Id="JpFindRelatedProducts" BinaryRef="JpCaDll" DllEntry="FindRelatedProductsEx" />
|
<ns0:CustomAction Id="JpFindRelatedProducts" BinaryRef="JpCaDll" DllEntry="FindRelatedProductsEx" />
|
||||||
|
|
||||||
<?ifndef SkipCryptomatorLegacyCheck ?>
|
<?ifndef SkipCryptomatorLegacyCheck ?>
|
||||||
@@ -228,7 +228,7 @@
|
|||||||
<ns0:Custom Action="JpFindRelatedProducts" After="FindRelatedProducts"/>
|
<ns0:Custom Action="JpFindRelatedProducts" After="FindRelatedProducts"/>
|
||||||
</ns0:InstallUISequence>
|
</ns0:InstallUISequence>
|
||||||
|
|
||||||
<ns0:WixVariable Id="WixUIBannerBmp" Value="$(env.JP_WIXWIZARD_RESOURCES)\banner.bmp" />
|
<ns0:WixVariable Id="WixUIBannerBmp" Value="$(env.JP_WIXWIZARD_RESOURCES)banner.bmp" />
|
||||||
<ns0:WixVariable Id="WixUIDialogBmp" Value="$(env.JP_WIXWIZARD_RESOURCES)\background.bmp" />
|
<ns0:WixVariable Id="WixUIDialogBmp" Value="$(env.JP_WIXWIZARD_RESOURCES)background.bmp" />
|
||||||
</ns0:Package>
|
</ns0:Package>
|
||||||
</ns0:Wix>
|
</ns0:Wix>
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
Apache License v2.0|Apache License, Version 2.0|The Apache License, Version 2.0|The Apache Software License, Version 2.0|Apache 2.0|Apache Software License - Version 2.0|Apache-2.0
|
Apache License v2.0|Apache License, Version 2.0|The Apache License, Version 2.0|The Apache Software License, Version 2.0|Apache 2.0|Apache Software License - Version 2.0|Apache-2.0
|
||||||
MIT License|MIT|The MIT License (MIT)|The MIT License|MIT license
|
MIT License|MIT|The MIT License (MIT)|The MIT License|MIT license
|
||||||
LGPL 2.1|LGPL, version 2.1|GNU Lesser/Library General Public License version 2|GNU Lesser General Public License Version 2.1|GNU Lesser General Public License
|
LGPL 2.1|LGPL, version 2.1|GNU Lesser/Library General Public License version 2|GNU Lesser General Public License Version 2.1|GNU Lesser General Public License|LGPL-2.1-only
|
||||||
GPLv2|GNU General Public License Version 2
|
GPLv2|GNU General Public License Version 2
|
||||||
GPLv2+CE|CDDL + GPLv2 with classpath exception
|
GPLv2+CE|CDDL + GPLv2 with classpath exception
|
||||||
Eclipse Public License - Version 1.0|Eclipse Public License - v 1.0
|
Eclipse Public License - Version 1.0|Eclipse Public License - v 1.0
|
||||||
Eclipse Public License - Version 2.0|Eclipse Public License - v 2.0
|
Eclipse Public License - Version 2.0|Eclipse Public License - v 2.0|EPL-2.0
|
||||||
@@ -0,0 +1,295 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Apache Maven Wrapper startup batch script, version 3.3.4
|
||||||
|
#
|
||||||
|
# Optional ENV vars
|
||||||
|
# -----------------
|
||||||
|
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
|
||||||
|
# MVNW_REPOURL - repo url base for downloading maven distribution
|
||||||
|
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
|
||||||
|
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
set -euf
|
||||||
|
[ "${MVNW_VERBOSE-}" != debug ] || set -x
|
||||||
|
|
||||||
|
# OS specific support.
|
||||||
|
native_path() { printf %s\\n "$1"; }
|
||||||
|
case "$(uname)" in
|
||||||
|
CYGWIN* | MINGW*)
|
||||||
|
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
|
||||||
|
native_path() { cygpath --path --windows "$1"; }
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# set JAVACMD and JAVACCMD
|
||||||
|
set_java_home() {
|
||||||
|
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
|
||||||
|
if [ -n "${JAVA_HOME-}" ]; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
JAVACCMD="$JAVA_HOME/jre/sh/javac"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
JAVACCMD="$JAVA_HOME/bin/javac"
|
||||||
|
|
||||||
|
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
|
||||||
|
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
|
||||||
|
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="$(
|
||||||
|
'set' +e
|
||||||
|
'unset' -f command 2>/dev/null
|
||||||
|
'command' -v java
|
||||||
|
)" || :
|
||||||
|
JAVACCMD="$(
|
||||||
|
'set' +e
|
||||||
|
'unset' -f command 2>/dev/null
|
||||||
|
'command' -v javac
|
||||||
|
)" || :
|
||||||
|
|
||||||
|
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
|
||||||
|
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# hash string like Java String::hashCode
|
||||||
|
hash_string() {
|
||||||
|
str="${1:-}" h=0
|
||||||
|
while [ -n "$str" ]; do
|
||||||
|
char="${str%"${str#?}"}"
|
||||||
|
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
|
||||||
|
str="${str#?}"
|
||||||
|
done
|
||||||
|
printf %x\\n $h
|
||||||
|
}
|
||||||
|
|
||||||
|
verbose() { :; }
|
||||||
|
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
|
||||||
|
|
||||||
|
die() {
|
||||||
|
printf %s\\n "$1" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
trim() {
|
||||||
|
# MWRAPPER-139:
|
||||||
|
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
|
||||||
|
# Needed for removing poorly interpreted newline sequences when running in more
|
||||||
|
# exotic environments such as mingw bash on Windows.
|
||||||
|
printf "%s" "${1}" | tr -d '[:space:]'
|
||||||
|
}
|
||||||
|
|
||||||
|
scriptDir="$(dirname "$0")"
|
||||||
|
scriptName="$(basename "$0")"
|
||||||
|
|
||||||
|
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
|
||||||
|
while IFS="=" read -r key value; do
|
||||||
|
case "${key-}" in
|
||||||
|
distributionUrl) distributionUrl=$(trim "${value-}") ;;
|
||||||
|
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
|
||||||
|
esac
|
||||||
|
done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||||
|
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||||
|
|
||||||
|
case "${distributionUrl##*/}" in
|
||||||
|
maven-mvnd-*bin.*)
|
||||||
|
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
|
||||||
|
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
|
||||||
|
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
|
||||||
|
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
|
||||||
|
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
|
||||||
|
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
|
||||||
|
*)
|
||||||
|
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
|
||||||
|
distributionPlatform=linux-amd64
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
|
||||||
|
;;
|
||||||
|
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
|
||||||
|
*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# apply MVNW_REPOURL and calculate MAVEN_HOME
|
||||||
|
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
|
||||||
|
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
|
||||||
|
distributionUrlName="${distributionUrl##*/}"
|
||||||
|
distributionUrlNameMain="${distributionUrlName%.*}"
|
||||||
|
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
|
||||||
|
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
|
||||||
|
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
|
||||||
|
|
||||||
|
exec_maven() {
|
||||||
|
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
|
||||||
|
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -d "$MAVEN_HOME" ]; then
|
||||||
|
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
|
||||||
|
exec_maven "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "${distributionUrl-}" in
|
||||||
|
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
|
||||||
|
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# prepare tmp dir
|
||||||
|
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
|
||||||
|
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
|
||||||
|
trap clean HUP INT TERM EXIT
|
||||||
|
else
|
||||||
|
die "cannot create temp dir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p -- "${MAVEN_HOME%/*}"
|
||||||
|
|
||||||
|
# Download and Install Apache Maven
|
||||||
|
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
|
||||||
|
verbose "Downloading from: $distributionUrl"
|
||||||
|
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||||
|
|
||||||
|
# select .zip or .tar.gz
|
||||||
|
if ! command -v unzip >/dev/null; then
|
||||||
|
distributionUrl="${distributionUrl%.zip}.tar.gz"
|
||||||
|
distributionUrlName="${distributionUrl##*/}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# verbose opt
|
||||||
|
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
|
||||||
|
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
|
||||||
|
|
||||||
|
# normalize http auth
|
||||||
|
case "${MVNW_PASSWORD:+has-password}" in
|
||||||
|
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
|
||||||
|
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
|
||||||
|
verbose "Found wget ... using wget"
|
||||||
|
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
|
||||||
|
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
|
||||||
|
verbose "Found curl ... using curl"
|
||||||
|
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
|
||||||
|
elif set_java_home; then
|
||||||
|
verbose "Falling back to use Java to download"
|
||||||
|
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
|
||||||
|
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||||
|
cat >"$javaSource" <<-END
|
||||||
|
public class Downloader extends java.net.Authenticator
|
||||||
|
{
|
||||||
|
protected java.net.PasswordAuthentication getPasswordAuthentication()
|
||||||
|
{
|
||||||
|
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
|
||||||
|
}
|
||||||
|
public static void main( String[] args ) throws Exception
|
||||||
|
{
|
||||||
|
setDefault( new Downloader() );
|
||||||
|
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END
|
||||||
|
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
|
||||||
|
verbose " - Compiling Downloader.java ..."
|
||||||
|
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
|
||||||
|
verbose " - Running Downloader.java ..."
|
||||||
|
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If specified, validate the SHA-256 sum of the Maven distribution zip file
|
||||||
|
if [ -n "${distributionSha256Sum-}" ]; then
|
||||||
|
distributionSha256Result=false
|
||||||
|
if [ "$MVN_CMD" = mvnd.sh ]; then
|
||||||
|
echo "Checksum validation is not supported for maven-mvnd." >&2
|
||||||
|
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
|
||||||
|
exit 1
|
||||||
|
elif command -v sha256sum >/dev/null; then
|
||||||
|
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then
|
||||||
|
distributionSha256Result=true
|
||||||
|
fi
|
||||||
|
elif command -v shasum >/dev/null; then
|
||||||
|
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
|
||||||
|
distributionSha256Result=true
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
|
||||||
|
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ $distributionSha256Result = false ]; then
|
||||||
|
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
|
||||||
|
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# unzip and move
|
||||||
|
if command -v unzip >/dev/null; then
|
||||||
|
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
|
||||||
|
else
|
||||||
|
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find the actual extracted directory name (handles snapshots where filename != directory name)
|
||||||
|
actualDistributionDir=""
|
||||||
|
|
||||||
|
# First try the expected directory name (for regular distributions)
|
||||||
|
if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
|
||||||
|
if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
|
||||||
|
actualDistributionDir="$distributionUrlNameMain"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If not found, search for any directory with the Maven executable (for snapshots)
|
||||||
|
if [ -z "$actualDistributionDir" ]; then
|
||||||
|
# enable globbing to iterate over items
|
||||||
|
set +f
|
||||||
|
for dir in "$TMP_DOWNLOAD_DIR"/*; do
|
||||||
|
if [ -d "$dir" ]; then
|
||||||
|
if [ -f "$dir/bin/$MVN_CMD" ]; then
|
||||||
|
actualDistributionDir="$(basename "$dir")"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
set -f
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$actualDistributionDir" ]; then
|
||||||
|
verbose "Contents of $TMP_DOWNLOAD_DIR:"
|
||||||
|
verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
|
||||||
|
die "Could not find Maven distribution directory in extracted archive"
|
||||||
|
fi
|
||||||
|
|
||||||
|
verbose "Found extracted Maven distribution directory: $actualDistributionDir"
|
||||||
|
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
|
||||||
|
mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
|
||||||
|
|
||||||
|
clean || :
|
||||||
|
exec_maven "$@"
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
<# : batch portion
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
@REM or more contributor license agreements. See the NOTICE file
|
||||||
|
@REM distributed with this work for additional information
|
||||||
|
@REM regarding copyright ownership. The ASF licenses this file
|
||||||
|
@REM to you under the Apache License, Version 2.0 (the
|
||||||
|
@REM "License"); you may not use this file except in compliance
|
||||||
|
@REM with the License. You may obtain a copy of the License at
|
||||||
|
@REM
|
||||||
|
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@REM
|
||||||
|
@REM Unless required by applicable law or agreed to in writing,
|
||||||
|
@REM software distributed under the License is distributed on an
|
||||||
|
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
@REM KIND, either express or implied. See the License for the
|
||||||
|
@REM specific language governing permissions and limitations
|
||||||
|
@REM under the License.
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
@REM Apache Maven Wrapper startup batch script, version 3.3.4
|
||||||
|
@REM
|
||||||
|
@REM Optional ENV vars
|
||||||
|
@REM MVNW_REPOURL - repo url base for downloading maven distribution
|
||||||
|
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
|
||||||
|
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
|
||||||
|
@SET __MVNW_CMD__=
|
||||||
|
@SET __MVNW_ERROR__=
|
||||||
|
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
|
||||||
|
@SET PSModulePath=
|
||||||
|
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
|
||||||
|
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
|
||||||
|
)
|
||||||
|
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
|
||||||
|
@SET __MVNW_PSMODULEP_SAVE=
|
||||||
|
@SET __MVNW_ARG0_NAME__=
|
||||||
|
@SET MVNW_USERNAME=
|
||||||
|
@SET MVNW_PASSWORD=
|
||||||
|
@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*)
|
||||||
|
@echo Cannot start maven from wrapper >&2 && exit /b 1
|
||||||
|
@GOTO :EOF
|
||||||
|
: end batch / begin powershell #>
|
||||||
|
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
if ($env:MVNW_VERBOSE -eq "true") {
|
||||||
|
$VerbosePreference = "Continue"
|
||||||
|
}
|
||||||
|
|
||||||
|
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
|
||||||
|
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
|
||||||
|
if (!$distributionUrl) {
|
||||||
|
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||||
|
}
|
||||||
|
|
||||||
|
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
|
||||||
|
"maven-mvnd-*" {
|
||||||
|
$USE_MVND = $true
|
||||||
|
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
|
||||||
|
$MVN_CMD = "mvnd.cmd"
|
||||||
|
break
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
$USE_MVND = $false
|
||||||
|
$MVN_CMD = $script -replace '^mvnw','mvn'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# apply MVNW_REPOURL and calculate MAVEN_HOME
|
||||||
|
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
|
||||||
|
if ($env:MVNW_REPOURL) {
|
||||||
|
$MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" }
|
||||||
|
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')"
|
||||||
|
}
|
||||||
|
$distributionUrlName = $distributionUrl -replace '^.*/',''
|
||||||
|
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
|
||||||
|
|
||||||
|
$MAVEN_M2_PATH = "$HOME/.m2"
|
||||||
|
if ($env:MAVEN_USER_HOME) {
|
||||||
|
$MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
|
||||||
|
New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
$MAVEN_WRAPPER_DISTS = $null
|
||||||
|
if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
|
||||||
|
$MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
|
||||||
|
} else {
|
||||||
|
$MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
|
||||||
|
}
|
||||||
|
|
||||||
|
$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
|
||||||
|
$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
|
||||||
|
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
|
||||||
|
|
||||||
|
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
|
||||||
|
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
|
||||||
|
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
|
||||||
|
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
|
||||||
|
}
|
||||||
|
|
||||||
|
# prepare tmp dir
|
||||||
|
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
|
||||||
|
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
|
||||||
|
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
|
||||||
|
trap {
|
||||||
|
if ($TMP_DOWNLOAD_DIR.Exists) {
|
||||||
|
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||||
|
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
|
||||||
|
|
||||||
|
# Download and Install Apache Maven
|
||||||
|
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
|
||||||
|
Write-Verbose "Downloading from: $distributionUrl"
|
||||||
|
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||||
|
|
||||||
|
$webclient = New-Object System.Net.WebClient
|
||||||
|
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
|
||||||
|
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
|
||||||
|
}
|
||||||
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||||
|
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
|
||||||
|
|
||||||
|
# If specified, validate the SHA-256 sum of the Maven distribution zip file
|
||||||
|
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
|
||||||
|
if ($distributionSha256Sum) {
|
||||||
|
if ($USE_MVND) {
|
||||||
|
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
|
||||||
|
}
|
||||||
|
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
|
||||||
|
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
|
||||||
|
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# unzip and move
|
||||||
|
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
|
||||||
|
|
||||||
|
# Find the actual extracted directory name (handles snapshots where filename != directory name)
|
||||||
|
$actualDistributionDir = ""
|
||||||
|
|
||||||
|
# First try the expected directory name (for regular distributions)
|
||||||
|
$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
|
||||||
|
$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
|
||||||
|
if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
|
||||||
|
$actualDistributionDir = $distributionUrlNameMain
|
||||||
|
}
|
||||||
|
|
||||||
|
# If not found, search for any directory with the Maven executable (for snapshots)
|
||||||
|
if (!$actualDistributionDir) {
|
||||||
|
Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
|
||||||
|
$testPath = Join-Path $_.FullName "bin/$MVN_CMD"
|
||||||
|
if (Test-Path -Path $testPath -PathType Leaf) {
|
||||||
|
$actualDistributionDir = $_.Name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$actualDistributionDir) {
|
||||||
|
Write-Error "Could not find Maven distribution directory in extracted archive"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
|
||||||
|
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null
|
||||||
|
try {
|
||||||
|
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
|
||||||
|
} catch {
|
||||||
|
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
|
||||||
|
Write-Error "fail to move MAVEN_HOME"
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||||
|
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.jdk.version>25</project.jdk.version>
|
<project.jdk.version>26</project.jdk.version>
|
||||||
|
|
||||||
<!-- Group IDs of jars that need to stay on the class path for now -->
|
<!-- Group IDs of jars that need to stay on the class path for now -->
|
||||||
<!-- remove them, as soon they got modularized or support is dropped (i.e., WebDAV) -->
|
<!-- remove them, as soon they got modularized or support is dropped (i.e., WebDAV) -->
|
||||||
@@ -35,47 +35,53 @@
|
|||||||
<!-- cryptomator dependencies -->
|
<!-- cryptomator dependencies -->
|
||||||
<cryptomator.cryptofs.version>2.10.0</cryptomator.cryptofs.version>
|
<cryptomator.cryptofs.version>2.10.0</cryptomator.cryptofs.version>
|
||||||
<cryptomator.cryptolib.version>2.2.2</cryptomator.cryptolib.version>
|
<cryptomator.cryptolib.version>2.2.2</cryptomator.cryptolib.version>
|
||||||
<cryptomator.integrations.version>1.8.0</cryptomator.integrations.version>
|
<cryptomator.integrations.version>1.9.0</cryptomator.integrations.version>
|
||||||
<cryptomator.integrations.win.version>1.6.0</cryptomator.integrations.win.version>
|
<cryptomator.integrations.win.version>1.6.1</cryptomator.integrations.win.version>
|
||||||
<cryptomator.integrations.mac.version>1.5.0</cryptomator.integrations.mac.version>
|
<cryptomator.integrations.mac.version>1.5.0</cryptomator.integrations.mac.version>
|
||||||
<cryptomator.integrations.linux.version>1.7.0</cryptomator.integrations.linux.version>
|
<cryptomator.integrations.linux.version>1.8.0-beta1</cryptomator.integrations.linux.version>
|
||||||
<cryptomator.fuse.version>6.0.1</cryptomator.fuse.version>
|
<cryptomator.fuse.version>6.0.1</cryptomator.fuse.version>
|
||||||
<cryptomator.webdav.version>3.0.1</cryptomator.webdav.version>
|
<cryptomator.webdav.version>3.0.2</cryptomator.webdav.version>
|
||||||
<cryptomator.webdav-servlet.version>1.2.12</cryptomator.webdav-servlet.version>
|
<cryptomator.webdav-servlet.version>1.2.12</cryptomator.webdav-servlet.version>
|
||||||
|
|
||||||
<!-- 3rd party dependencies -->
|
<!-- 3rd party dependencies -->
|
||||||
<caffeine.version>3.2.3</caffeine.version>
|
<caffeine.version>3.2.4</caffeine.version>
|
||||||
<commons-lang3.version>3.20.0</commons-lang3.version>
|
<commons-lang3.version>3.20.0</commons-lang3.version>
|
||||||
<dagger.version>2.59.2</dagger.version>
|
<dagger.version>2.59.2</dagger.version>
|
||||||
<easybind.version>2.2</easybind.version>
|
<easybind.version>2.2</easybind.version>
|
||||||
<jackson.version>2.21.1</jackson.version>
|
<jackson.version>2.21.6</jackson.version>
|
||||||
<javafx.version>25.0.2</javafx.version>
|
<javafx.version>25.0.3</javafx.version>
|
||||||
<jwt.version>4.5.1</jwt.version>
|
<jwt.version>4.5.2</jwt.version>
|
||||||
<nimbus-jose.version>10.5</nimbus-jose.version>
|
<nimbus-jose.version>10.5</nimbus-jose.version>
|
||||||
<logback.version>1.5.32</logback.version>
|
<logback.version>1.5.35</logback.version>
|
||||||
<slf4j.version>2.0.17</slf4j.version>
|
<slf4j.version>2.0.18</slf4j.version>
|
||||||
<tinyoauth2.version>0.8.1</tinyoauth2.version>
|
<tinyoauth2.version>0.8.1</tinyoauth2.version>
|
||||||
<zxcvbn.version>1.9.0</zxcvbn.version>
|
<zxcvbn.version>1.9.0</zxcvbn.version>
|
||||||
|
|
||||||
<!-- test dependencies -->
|
<!-- test dependencies -->
|
||||||
<junit.jupiter.version>6.0.3</junit.jupiter.version>
|
<junit.jupiter.version>6.1.0</junit.jupiter.version>
|
||||||
<mockito.version>5.22.0</mockito.version>
|
<mockito.version>5.23.0</mockito.version>
|
||||||
<hamcrest.version>3.0</hamcrest.version>
|
<hamcrest.version>3.0</hamcrest.version>
|
||||||
|
|
||||||
<!-- build-time dependencies -->
|
<!-- build-time dependencies -->
|
||||||
<jetbrains.annotations.version>26.1.0</jetbrains.annotations.version>
|
<jetbrains.annotations.version>26.1.0</jetbrains.annotations.version>
|
||||||
<dependency-check.version>12.2.0</dependency-check.version>
|
<dependency-check.version>12.2.2</dependency-check.version>
|
||||||
<jacoco.version>0.8.14</jacoco.version>
|
<jacoco.version>0.8.15</jacoco.version>
|
||||||
<license-generator.version>2.7.1</license-generator.version>
|
<license-generator.version>2.7.1</license-generator.version>
|
||||||
<junit-tree-reporter.version>1.5.1</junit-tree-reporter.version>
|
|
||||||
<mvn-compiler.version>3.15.0</mvn-compiler.version>
|
<mvn-compiler.version>3.15.0</mvn-compiler.version>
|
||||||
<mvn-resources.version>3.5.0</mvn-resources.version>
|
<mvn-resources.version>3.5.0</mvn-resources.version>
|
||||||
<mvn-dependency.version>3.10.0</mvn-dependency.version>
|
<mvn-dependency.version>3.11.0</mvn-dependency.version>
|
||||||
<mvn-surefire.version>3.5.3</mvn-surefire.version>
|
<mvn-surefire.version>3.5.6</mvn-surefire.version>
|
||||||
<mvn-jar.version>3.5.0</mvn-jar.version>
|
<mvn-jar.version>3.5.0</mvn-jar.version>
|
||||||
|
<mvn-exec.version>3.5.1</mvn-exec.version>
|
||||||
|
|
||||||
<!-- Property used by surefire to determine jacoco engine -->
|
<!-- Property used by surefire to determine jacoco engine -->
|
||||||
<surefire.jacoco.args></surefire.jacoco.args>
|
<surefire.jacoco.args></surefire.jacoco.args>
|
||||||
|
|
||||||
|
<!-- App runtime config used by the 'run' profile, mirroring .idea/runConfigurations. The 'dev' profile switches these to the Cryptomator-Dev variants. -->
|
||||||
|
<run.appDir>Cryptomator</run.appDir>
|
||||||
|
<run.linuxFuseArgs></run.linuxFuseArgs>
|
||||||
|
<run.macMountPointsDir>@{userhome}/Cryptomator</run.macMountPointsDir>
|
||||||
|
<run.macUpdateArgs>-Dcryptomator.updateMechanism=org.cryptomator.macos.update.DmgUpdateMechanism</run.macUpdateArgs>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
@@ -300,6 +306,10 @@
|
|||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>${mvn-surefire.version}</version>
|
<version>${mvn-surefire.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<!--suppress MavenModelInspection -->
|
||||||
|
<argLine>@{argLine} -javaagent:${org.mockito:mockito-core:jar}</argLine>
|
||||||
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
@@ -321,6 +331,11 @@
|
|||||||
<artifactId>dependency-check-maven</artifactId>
|
<artifactId>dependency-check-maven</artifactId>
|
||||||
<version>${dependency-check.version}</version>
|
<version>${dependency-check.version}</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<version>${mvn-exec.version}</version>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
<plugins>
|
<plugins>
|
||||||
@@ -356,22 +371,12 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>me.fabriciorby</groupId>
|
|
||||||
<artifactId>maven-surefire-junit5-tree-reporter</artifactId>
|
|
||||||
<version>${junit-tree-reporter.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<reportFormat>plain</reportFormat>
|
<reportFormat>plain</reportFormat>
|
||||||
<consoleOutputReporter>
|
<consoleOutputReporter>
|
||||||
<disable>true</disable>
|
<disable>true</disable>
|
||||||
</consoleOutputReporter>
|
</consoleOutputReporter>
|
||||||
<argLine>@{surefire.jacoco.args} -javaagent:${org.mockito:mockito-core:jar} --enable-native-access=javafx.graphics</argLine>
|
<argLine>@{surefire.jacoco.args} -javaagent:${org.mockito:mockito-core:jar} --enable-native-access=javafx.graphics</argLine>
|
||||||
<statelessTestsetInfoReporter
|
|
||||||
implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter">
|
|
||||||
</statelessTestsetInfoReporter>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
@@ -410,11 +415,20 @@
|
|||||||
<includeGroupIds>${nonModularGroupIds}</includeGroupIds>
|
<includeGroupIds>${nonModularGroupIds}</includeGroupIds>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>get-mockito-agent-path</id>
|
||||||
|
<goals>
|
||||||
|
<goal>properties</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
<artifactId>license-maven-plugin</artifactId>
|
<artifactId>license-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<licenseMergesUrl>${project.baseUri}license/merges</licenseMergesUrl>
|
||||||
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>add-third-party</id>
|
<id>add-third-party</id>
|
||||||
@@ -426,7 +440,6 @@
|
|||||||
<thirdPartyFilename>THIRD-PARTY.txt</thirdPartyFilename>
|
<thirdPartyFilename>THIRD-PARTY.txt</thirdPartyFilename>
|
||||||
<includedScopes>compile</includedScopes>
|
<includedScopes>compile</includedScopes>
|
||||||
<excludedGroups>org\.cryptomator</excludedGroups>
|
<excludedGroups>org\.cryptomator</excludedGroups>
|
||||||
<licenseMergesUrl>file:///${project.basedir}/license/merges</licenseMergesUrl>
|
|
||||||
<fileTemplate>${project.basedir}/src/main/resources/license/template.ftl</fileTemplate>
|
<fileTemplate>${project.basedir}/src/main/resources/license/template.ftl</fileTemplate>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
@@ -513,9 +526,6 @@
|
|||||||
<os>
|
<os>
|
||||||
<family>mac</family>
|
<family>mac</family>
|
||||||
</os>
|
</os>
|
||||||
<property>
|
|
||||||
<name>idea.version</name>
|
|
||||||
</property>
|
|
||||||
</activation>
|
</activation>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -531,12 +541,9 @@
|
|||||||
<activation>
|
<activation>
|
||||||
<os>
|
<os>
|
||||||
<family>unix</family>
|
<family>unix</family>
|
||||||
<name>Linux</name>
|
<name>linux</name>
|
||||||
<arch>aarch64</arch>
|
<arch>aarch64</arch>
|
||||||
</os>
|
</os>
|
||||||
<property>
|
|
||||||
<name>idea.version</name>
|
|
||||||
</property>
|
|
||||||
</activation>
|
</activation>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -576,12 +583,9 @@
|
|||||||
<activation>
|
<activation>
|
||||||
<os>
|
<os>
|
||||||
<family>unix</family>
|
<family>unix</family>
|
||||||
<name>Linux</name>
|
<name>linux</name>
|
||||||
<arch>amd64</arch>
|
<arch>amd64</arch>
|
||||||
</os>
|
</os>
|
||||||
<property>
|
|
||||||
<name>idea.version</name>
|
|
||||||
</property>
|
|
||||||
</activation>
|
</activation>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -598,9 +602,6 @@
|
|||||||
<os>
|
<os>
|
||||||
<family>windows</family>
|
<family>windows</family>
|
||||||
</os>
|
</os>
|
||||||
<property>
|
|
||||||
<name>idea.version</name>
|
|
||||||
</property>
|
|
||||||
</activation>
|
</activation>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -610,6 +611,102 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</profile>
|
</profile>
|
||||||
|
|
||||||
|
<!-- Launches the app from the command line: ./mvnw -Prun compile exec:exec (append ,dev for the Cryptomator-Dev variant) -->
|
||||||
|
<profile>
|
||||||
|
<id>run</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<!-- same split into module path and class path as the copy-mods/copy-libs executions used for packaging -->
|
||||||
|
<execution>
|
||||||
|
<id>build-run-modulepath</id>
|
||||||
|
<phase>validate</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>build-classpath</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<includeScope>runtime</includeScope>
|
||||||
|
<excludeGroupIds>${nonModularGroupIds}</excludeGroupIds>
|
||||||
|
<outputProperty>run.modulePath</outputProperty>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>build-run-classpath</id>
|
||||||
|
<phase>validate</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>build-classpath</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<includeScope>runtime</includeScope>
|
||||||
|
<includeGroupIds>${nonModularGroupIds}</includeGroupIds>
|
||||||
|
<outputProperty>run.classPath</outputProperty>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<executable>${java.home}/bin/java</executable>
|
||||||
|
<commandlineArgs>--module-path "${project.build.outputDirectory}${path.separator}${run.modulePath}" --class-path "${run.classPath}" ${run.jvmArgs} --module org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator</commandlineArgs>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<!-- Switches the 'run' profile to the Cryptomator-Dev variants, so a dev run does not touch the settings of an installed Cryptomator -->
|
||||||
|
<profile>
|
||||||
|
<id>dev</id>
|
||||||
|
<properties>
|
||||||
|
<run.appDir>Cryptomator-Dev</run.appDir>
|
||||||
|
<run.linuxFuseArgs>-Dfuse.experimental="true"</run.linuxFuseArgs>
|
||||||
|
<run.macMountPointsDir>@{userhome}/Library/Application Support/Cryptomator-Dev/mnt</run.macMountPointsDir>
|
||||||
|
<run.macUpdateArgs></run.macUpdateArgs>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile>
|
||||||
|
<id>run-win</id>
|
||||||
|
<activation>
|
||||||
|
<os>
|
||||||
|
<family>windows</family>
|
||||||
|
</os>
|
||||||
|
</activation>
|
||||||
|
<properties>
|
||||||
|
<run.jvmArgs>-Dcryptomator.settingsPath="@{appdata}/${run.appDir}/settings.json;@{userhome}/AppData/Roaming/${run.appDir}/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/${run.appDir}/ipc.socket" -Dcryptomator.logDir="@{localappdata}/${run.appDir}" -Dcryptomator.pluginDir="@{appdata}/${run.appDir}/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/${run.appDir}/keychain.json;@{userhome}/AppData/Roaming/${run.appDir}/keychain.json" -Dcryptomator.integrationsWin.windowsHelloKeychainPaths="@{appdata}/${run.appDir}/windowsHelloKeychain.json;@{userhome}/AppData/Roaming/${run.appDir}/windowsHelloKeychain.json" -Dcryptomator.p12Path="@{appdata}/${run.appDir}/key.p12;@{userhome}/AppData/Roaming/${run.appDir}/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/${run.appDir}" -Dcryptomator.showTrayIcon=true -Dcryptomator.hub.enableTrustOnFirstUse=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win,javafx.graphics</run.jvmArgs>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile>
|
||||||
|
<id>run-mac</id>
|
||||||
|
<activation>
|
||||||
|
<os>
|
||||||
|
<family>mac</family>
|
||||||
|
</os>
|
||||||
|
</activation>
|
||||||
|
<properties>
|
||||||
|
<run.jvmArgs>-Dapple.awt.enableTemplateImages=true -Dcryptomator.settingsPath="@{userhome}/Library/Application Support/${run.appDir}/settings.json" -Dcryptomator.p12Path="@{userhome}/Library/Application Support/${run.appDir}/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/Library/Application Support/${run.appDir}/ipc.socket" -Dcryptomator.logDir="@{userhome}/Library/Logs/${run.appDir}" -Dcryptomator.pluginDir="@{userhome}/Library/Application Support/${run.appDir}/Plugins" -Dcryptomator.mountPointsDir="${run.macMountPointsDir}" -Dcryptomator.showTrayIcon=true -Dcryptomator.integrationsMac.keychainServiceName=Cryptomator ${run.macUpdateArgs} -Dcryptomator.hub.enableTrustOnFirstUse=true -Xss2m -Xmx512m -ea --enable-preview --enable-native-access=org.cryptomator.jfuse.mac,javafx.graphics</run.jvmArgs>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile>
|
||||||
|
<id>run-linux</id>
|
||||||
|
<activation>
|
||||||
|
<os>
|
||||||
|
<family>unix</family>
|
||||||
|
<name>linux</name>
|
||||||
|
</os>
|
||||||
|
</activation>
|
||||||
|
<properties>
|
||||||
|
<run.jvmArgs>-Dcryptomator.settingsPath="@{userhome}/.config/${run.appDir}/settings.json" -Dcryptomator.p12Path="@{userhome}/.config/${run.appDir}/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/.config/${run.appDir}/ipc.socket" -Dcryptomator.logDir="@{userhome}/.local/share/${run.appDir}/logs" -Dcryptomator.pluginDir="@{userhome}/.local/share/${run.appDir}/plugins" -Dcryptomator.mountPointsDir="@{userhome}/.local/share/${run.appDir}/mnt" -Dcryptomator.showTrayIcon=true -Dcryptomator.hub.enableTrustOnFirstUse=true ${run.linuxFuseArgs} -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator,javafx.graphics</run.jvmArgs>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -166,7 +165,7 @@ public class Environment {
|
|||||||
|
|
||||||
private Optional<Path> getPath(String propertyName) {
|
private Optional<Path> getPath(String propertyName) {
|
||||||
String value = System.getProperty(propertyName);
|
String value = System.getProperty(propertyName);
|
||||||
return Optional.ofNullable(value).map(Paths::get);
|
return Optional.ofNullable(value).map(Path::of);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class ErrorCode {
|
|||||||
public static ErrorCode of(Throwable throwable) {
|
public static ErrorCode of(Throwable throwable) {
|
||||||
var causalChain = Throwables.getCausalChain(throwable);
|
var causalChain = Throwables.getCausalChain(throwable);
|
||||||
if (causalChain.size() > 1) {
|
if (causalChain.size() > 1) {
|
||||||
var rootCause = causalChain.get(causalChain.size() - 1);
|
var rootCause = causalChain.getLast();
|
||||||
var parentOfRootCause = causalChain.get(causalChain.size() - 2);
|
var parentOfRootCause = causalChain.get(causalChain.size() - 2);
|
||||||
var rootSpecificFrames = countTopmostFrames(rootCause.getStackTrace(), parentOfRootCause.getStackTrace());
|
var rootSpecificFrames = countTopmostFrames(rootCause.getStackTrace(), parentOfRootCause.getStackTrace());
|
||||||
return new ErrorCode(throwable, rootCause, rootSpecificFrames);
|
return new ErrorCode(throwable, rootCause, rootSpecificFrames);
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class SubstitutingProperties extends PropertiesDecorator {
|
|||||||
|
|
||||||
private enum Source {
|
private enum Source {
|
||||||
ENV,
|
ENV,
|
||||||
PROPS;
|
PROPS
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -8,9 +8,9 @@ import org.slf4j.LoggerFactory;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.time.Duration;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -78,7 +78,7 @@ public final class OneDriveWindowsLocationPresetsProvider implements LocationPre
|
|||||||
*/
|
*/
|
||||||
@Blocking
|
@Blocking
|
||||||
private static void waitForSuccess(Process process, int timeoutSeconds, String cmdDescription) throws TimeoutException, InterruptedException, CommandFailedException {
|
private static void waitForSuccess(Process process, int timeoutSeconds, String cmdDescription) throws TimeoutException, InterruptedException, CommandFailedException {
|
||||||
boolean exited = process.waitFor(timeoutSeconds, TimeUnit.SECONDS);
|
boolean exited = process.waitFor(Duration.ofSeconds(timeoutSeconds));
|
||||||
if (!exited) {
|
if (!exited) {
|
||||||
throw new TimeoutException(cmdDescription + " timed out after " + timeoutSeconds + "s");
|
throw new TimeoutException(cmdDescription + " timed out after " + timeoutSeconds + "s");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public final class MountWithinParentUtil {
|
|||||||
|
|
||||||
EMPTY_DIR,
|
EMPTY_DIR,
|
||||||
|
|
||||||
BROKEN_JUNCTION;
|
BROKEN_JUNCTION
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import javafx.beans.property.SimpleObjectProperty;
|
|||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -62,7 +61,7 @@ public class VaultSettings {
|
|||||||
|
|
||||||
VaultSettings(VaultSettingsJson json) {
|
VaultSettings(VaultSettingsJson json) {
|
||||||
this.id = json.id;
|
this.id = json.id;
|
||||||
this.path = new SimpleObjectProperty<>(this, "path", json.path == null ? null : Paths.get(json.path));
|
this.path = new SimpleObjectProperty<>(this, "path", json.path == null ? null : Path.of(json.path));
|
||||||
this.displayName = new SimpleStringProperty(this, "displayName", json.displayName);
|
this.displayName = new SimpleStringProperty(this, "displayName", json.displayName);
|
||||||
this.unlockAfterStartup = new SimpleBooleanProperty(this, "unlockAfterStartup", json.unlockAfterStartup);
|
this.unlockAfterStartup = new SimpleBooleanProperty(this, "unlockAfterStartup", json.unlockAfterStartup);
|
||||||
this.revealAfterMount = new SimpleBooleanProperty(this, "revealAfterMount", json.revealAfterMount);
|
this.revealAfterMount = new SimpleBooleanProperty(this, "revealAfterMount", json.revealAfterMount);
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package org.cryptomator.common.vaults;
|
||||||
|
|
||||||
|
import java.nio.file.NoSuchFileException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
public class NotAVaultDirectoryException extends NoSuchFileException {
|
||||||
|
|
||||||
|
public enum Reason {
|
||||||
|
MISSING_DATA_DIR,
|
||||||
|
DATA_NOT_A_DIRECTORY,
|
||||||
|
MISSING_VAULT_CONFIG,
|
||||||
|
VAULT_CONFIG_ACCESS_DENIED,
|
||||||
|
UNSUPPORTED_STRUCTURE
|
||||||
|
}
|
||||||
|
|
||||||
|
private final transient Path path;
|
||||||
|
private final Reason reason;
|
||||||
|
|
||||||
|
public NotAVaultDirectoryException(Path path, Reason reason) {
|
||||||
|
super(path.toString(), null, "Not a vault directory: " + reason);
|
||||||
|
this.path = path;
|
||||||
|
this.reason = reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path path() {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Reason notAVaultReason() {
|
||||||
|
return reason;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,7 +47,6 @@ import javafx.beans.property.ReadOnlyStringProperty;
|
|||||||
import javafx.beans.property.SimpleBooleanProperty;
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.nio.file.ReadOnlyFileSystemException;
|
import java.nio.file.ReadOnlyFileSystemException;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -58,7 +57,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
|||||||
public class Vault {
|
public class Vault {
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(Vault.class);
|
private static final Logger LOG = LoggerFactory.getLogger(Vault.class);
|
||||||
private static final Path HOME_DIR = Paths.get(SystemUtils.USER_HOME);
|
private static final Path HOME_DIR = Path.of(SystemUtils.USER_HOME);
|
||||||
private static final int UNLIMITED_FILENAME_LENGTH = Integer.MAX_VALUE;
|
private static final int UNLIMITED_FILENAME_LENGTH = Integer.MAX_VALUE;
|
||||||
|
|
||||||
private final VaultSettings vaultSettings;
|
private final VaultSettings vaultSettings;
|
||||||
|
|||||||
@@ -22,20 +22,31 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.file.AccessDeniedException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.NoSuchFileException;
|
import java.nio.file.NoSuchFileException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.StandardOpenOption;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static org.cryptomator.common.Constants.MASTERKEY_FILENAME;
|
import static org.cryptomator.common.Constants.MASTERKEY_FILENAME;
|
||||||
import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME;
|
import static org.cryptomator.common.Constants.VAULTCONFIG_FILENAME;
|
||||||
import static org.cryptomator.common.vaults.VaultState.Value.*;
|
import static org.cryptomator.common.vaults.VaultState.Value.ALL_MISSING;
|
||||||
|
import static org.cryptomator.common.vaults.VaultState.Value.ERROR;
|
||||||
|
import static org.cryptomator.common.vaults.VaultState.Value.LOCKED;
|
||||||
|
import static org.cryptomator.common.vaults.VaultState.Value.MISSING;
|
||||||
|
import static org.cryptomator.common.vaults.VaultState.Value.NEEDS_MIGRATION;
|
||||||
|
import static org.cryptomator.common.vaults.VaultState.Value.PROCESSING;
|
||||||
|
import static org.cryptomator.common.vaults.VaultState.Value.UNLOCKED;
|
||||||
|
import static org.cryptomator.common.vaults.VaultState.Value.VAULT_CONFIG_MISSING;
|
||||||
|
import static org.cryptomator.cryptofs.common.Constants.DATA_DIR_NAME;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class VaultListManager {
|
public class VaultListManager {
|
||||||
@@ -72,18 +83,57 @@ public class VaultListManager {
|
|||||||
return vaultList.stream().anyMatch(v -> vaultPath.equals(v.getPath()));
|
return vaultList.stream().anyMatch(v -> vaultPath.equals(v.getPath()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Safe to call from any thread: the IO work runs on the calling thread, but the
|
||||||
|
* {@code ObservableList} mutation is marshaled to the JavaFX application thread.
|
||||||
|
*/
|
||||||
public Vault add(Path pathToVault) throws IOException {
|
public Vault add(Path pathToVault) throws IOException {
|
||||||
Path normalizedPathToVault = pathToVault.normalize().toAbsolutePath();
|
Path normalizedPathToVault = pathToVault.normalize().toAbsolutePath();
|
||||||
if (CryptoFileSystemProvider.checkDirStructureForVault(normalizedPathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) == DirStructure.UNRELATED) {
|
assertIsVaultDirectory(normalizedPathToVault);
|
||||||
throw new NoSuchFileException(normalizedPathToVault.toString(), null, "Not a vault directory");
|
|
||||||
}
|
|
||||||
|
|
||||||
return get(normalizedPathToVault) //
|
return get(normalizedPathToVault).orElseGet(() -> {
|
||||||
.orElseGet(() -> {
|
Vault newVault = create(newVaultSettings(normalizedPathToVault));
|
||||||
Vault newVault = create(newVaultSettings(normalizedPathToVault));
|
if (Platform.isFxApplicationThread()) {
|
||||||
vaultList.add(newVault);
|
addVault(newVault);
|
||||||
return newVault;
|
} else {
|
||||||
});
|
Platform.runLater(() -> addVault(newVault));
|
||||||
|
}
|
||||||
|
return newVault;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void assertIsVaultDirectory(Path pathToVault) throws IOException {
|
||||||
|
if (CryptoFileSystemProvider.checkDirStructureForVault(pathToVault, VAULTCONFIG_FILENAME, MASTERKEY_FILENAME) == DirStructure.UNRELATED) {
|
||||||
|
checkDataDir(pathToVault);
|
||||||
|
checkConfigFile(pathToVault);
|
||||||
|
//if vault is legacy _and_ not readable, just say unsupported
|
||||||
|
throw new NotAVaultDirectoryException(pathToVault, NotAVaultDirectoryException.Reason.UNSUPPORTED_STRUCTURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void checkDataDir(Path pathToVault) throws NotAVaultDirectoryException {
|
||||||
|
Path dataDir = pathToVault.resolve(DATA_DIR_NAME);
|
||||||
|
if (!Files.exists(dataDir)) {
|
||||||
|
throw new NotAVaultDirectoryException(pathToVault, NotAVaultDirectoryException.Reason.MISSING_DATA_DIR);
|
||||||
|
}
|
||||||
|
if (!Files.isDirectory(dataDir)) {
|
||||||
|
throw new NotAVaultDirectoryException(pathToVault, NotAVaultDirectoryException.Reason.DATA_NOT_A_DIRECTORY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void checkConfigFile(Path pathToVault) throws NotAVaultDirectoryException {
|
||||||
|
Path vaultConfig = pathToVault.resolve(VAULTCONFIG_FILENAME);
|
||||||
|
|
||||||
|
try (var ch = Files.newByteChannel(vaultConfig, StandardOpenOption.READ)) {
|
||||||
|
ch.read(ByteBuffer.allocate(1));
|
||||||
|
} catch (AccessDeniedException e) {
|
||||||
|
throw new NotAVaultDirectoryException(pathToVault, NotAVaultDirectoryException.Reason.VAULT_CONFIG_ACCESS_DENIED);
|
||||||
|
} catch (NoSuchFileException e) {
|
||||||
|
throw new NotAVaultDirectoryException(pathToVault, NotAVaultDirectoryException.Reason.MISSING_VAULT_CONFIG);
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.warn("Failed to read vault config: {}", e.getMessage());
|
||||||
|
throw new NotAVaultDirectoryException(pathToVault, NotAVaultDirectoryException.Reason.UNSUPPORTED_STRUCTURE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private VaultSettings newVaultSettings(Path path) {
|
private VaultSettings newVaultSettings(Path path) {
|
||||||
@@ -153,7 +203,7 @@ public class VaultListManager {
|
|||||||
//for legacy reasons: pre v8 vault do not have a config, but they are in the NEEDS_MIGRATION state
|
//for legacy reasons: pre v8 vault do not have a config, but they are in the NEEDS_MIGRATION state
|
||||||
vaultSettings.lastKnownKeyLoader.set(MasterkeyFileLoadingStrategy.SCHEME);
|
vaultSettings.lastKnownKeyLoader.set(MasterkeyFileLoadingStrategy.SCHEME);
|
||||||
}
|
}
|
||||||
case VAULT_CONFIG_MISSING -> {
|
case VAULT_CONFIG_MISSING -> {
|
||||||
//Nothing to do here, since there is no config to read
|
//Nothing to do here, since there is no config to read
|
||||||
}
|
}
|
||||||
case MISSING, ALL_MISSING, ERROR, PROCESSING -> {
|
case MISSING, ALL_MISSING, ERROR, PROCESSING -> {
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class VaultState extends ObservableValueBase<VaultState.Value> implements
|
|||||||
/**
|
/**
|
||||||
* Unknown state due to preceding unrecoverable exceptions.
|
* Unknown state due to preceding unrecoverable exceptions.
|
||||||
*/
|
*/
|
||||||
ERROR;
|
ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
private final AtomicReference<Value> value;
|
private final AtomicReference<Value> value;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class SupportedLanguages {
|
|||||||
var collator = Collator.getInstance(preferredLocale);
|
var collator = Collator.getInstance(preferredLocale);
|
||||||
collator.setStrength(Collator.PRIMARY);
|
collator.setStrength(Collator.PRIMARY);
|
||||||
var sorted = new ArrayList<String>();
|
var sorted = new ArrayList<String>();
|
||||||
sorted.add(0, null);
|
sorted.addFirst(null);
|
||||||
sorted.add(1, ENGLISH);
|
sorted.add(1, ENGLISH);
|
||||||
LANGUAGE_TAGS.stream() //
|
LANGUAGE_TAGS.stream() //
|
||||||
.sorted((a, b) -> collator.compare(Locale.forLanguageTag(a).getDisplayName(), Locale.forLanguageTag(b).getDisplayName())) //
|
.sorted((a, b) -> collator.compare(Locale.forLanguageTag(a).getDisplayName(), Locale.forLanguageTag(b).getDisplayName())) //
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ package org.cryptomator.ui.addvaultwizard;
|
|||||||
|
|
||||||
import dagger.Lazy;
|
import dagger.Lazy;
|
||||||
import org.apache.commons.lang3.SystemUtils;
|
import org.apache.commons.lang3.SystemUtils;
|
||||||
|
import org.cryptomator.common.vaults.NotAVaultDirectoryException;
|
||||||
import org.cryptomator.common.vaults.Vault;
|
import org.cryptomator.common.vaults.Vault;
|
||||||
import org.cryptomator.common.vaults.VaultListManager;
|
import org.cryptomator.common.vaults.VaultListManager;
|
||||||
import org.cryptomator.integrations.uiappearance.Theme;
|
import org.cryptomator.integrations.uiappearance.Theme;
|
||||||
import org.cryptomator.ui.common.FxController;
|
import org.cryptomator.ui.common.FxController;
|
||||||
import org.cryptomator.ui.common.FxmlFile;
|
import org.cryptomator.ui.common.FxmlFile;
|
||||||
import org.cryptomator.ui.common.FxmlScene;
|
import org.cryptomator.ui.common.FxmlScene;
|
||||||
|
import org.cryptomator.ui.dialogs.Dialogs;
|
||||||
import org.cryptomator.ui.fxapp.FxApplicationStyle;
|
import org.cryptomator.ui.fxapp.FxApplicationStyle;
|
||||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -41,6 +43,7 @@ public class ChooseExistingVaultController implements FxController {
|
|||||||
private final ObjectProperty<Vault> vault;
|
private final ObjectProperty<Vault> vault;
|
||||||
private final VaultListManager vaultListManager;
|
private final VaultListManager vaultListManager;
|
||||||
private final ResourceBundle resourceBundle;
|
private final ResourceBundle resourceBundle;
|
||||||
|
private final Dialogs dialogs;
|
||||||
private final ObservableValue<Image> screenshot;
|
private final ObservableValue<Image> screenshot;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@@ -51,6 +54,7 @@ public class ChooseExistingVaultController implements FxController {
|
|||||||
@AddVaultWizardWindow ObjectProperty<Vault> vault, //
|
@AddVaultWizardWindow ObjectProperty<Vault> vault, //
|
||||||
VaultListManager vaultListManager, //
|
VaultListManager vaultListManager, //
|
||||||
ResourceBundle resourceBundle, //
|
ResourceBundle resourceBundle, //
|
||||||
|
Dialogs dialogs, //
|
||||||
FxApplicationStyle applicationStyle) {
|
FxApplicationStyle applicationStyle) {
|
||||||
this.window = window;
|
this.window = window;
|
||||||
this.successScene = successScene;
|
this.successScene = successScene;
|
||||||
@@ -59,6 +63,7 @@ public class ChooseExistingVaultController implements FxController {
|
|||||||
this.vault = vault;
|
this.vault = vault;
|
||||||
this.vaultListManager = vaultListManager;
|
this.vaultListManager = vaultListManager;
|
||||||
this.resourceBundle = resourceBundle;
|
this.resourceBundle = resourceBundle;
|
||||||
|
this.dialogs = dialogs;
|
||||||
this.screenshot = applicationStyle.appliedAppThemeProperty().map(this::selectScreenshot);
|
this.screenshot = applicationStyle.appliedAppThemeProperty().map(this::selectScreenshot);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,6 +92,9 @@ public class ChooseExistingVaultController implements FxController {
|
|||||||
Vault newVault = vaultListManager.add(vaultPath.get());
|
Vault newVault = vaultListManager.add(vaultPath.get());
|
||||||
vault.set(newVault);
|
vault.set(newVault);
|
||||||
window.setScene(successScene.get());
|
window.setScene(successScene.get());
|
||||||
|
} catch (NotAVaultDirectoryException e) {
|
||||||
|
LOG.warn("Selected folder is not a vault directory: {}", e.getMessage());
|
||||||
|
dialogs.prepareNotAVaultDirectoryDialog(window, e).build().showAndWait();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.error("Failed to open existing vault.", e);
|
LOG.error("Failed to open existing vault.", e);
|
||||||
appWindows.showErrorWindow(e, window, window.getScene());
|
appWindows.showErrorWindow(e, window, window.getScene());
|
||||||
|
|||||||
+1
-2
@@ -41,7 +41,6 @@ import java.io.IOException;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.InvalidPathException;
|
import java.nio.file.InvalidPathException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
@@ -50,7 +49,7 @@ import java.util.concurrent.ExecutorService;
|
|||||||
public class CreateNewVaultLocationController implements FxController {
|
public class CreateNewVaultLocationController implements FxController {
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(CreateNewVaultLocationController.class);
|
private static final Logger LOG = LoggerFactory.getLogger(CreateNewVaultLocationController.class);
|
||||||
private static final Path DEFAULT_CUSTOM_VAULT_PATH = Paths.get(System.getProperty("user.home"));
|
private static final Path DEFAULT_CUSTOM_VAULT_PATH = Path.of(System.getProperty("user.home"));
|
||||||
private static final String TEMP_FILE_PREFIX = ".locationTest.cryptomator";
|
private static final String TEMP_FILE_PREFIX = ".locationTest.cryptomator";
|
||||||
|
|
||||||
private final Stage window;
|
private final Stage window;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class SystemBarUtil {
|
|||||||
/**
|
/**
|
||||||
* OS Bar placed at the bottom screen edge
|
* OS Bar placed at the bottom screen edge
|
||||||
*/
|
*/
|
||||||
BOTTOM;
|
BOTTOM
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.cryptomator.ui.dialogs;
|
package org.cryptomator.ui.dialogs;
|
||||||
|
|
||||||
import org.cryptomator.common.settings.Settings;
|
import org.cryptomator.common.settings.Settings;
|
||||||
|
import org.cryptomator.common.vaults.NotAVaultDirectoryException;
|
||||||
import org.cryptomator.common.vaults.Vault;
|
import org.cryptomator.common.vaults.Vault;
|
||||||
import org.cryptomator.ui.common.DefaultSceneFactory;
|
import org.cryptomator.ui.common.DefaultSceneFactory;
|
||||||
import org.cryptomator.ui.common.StageFactory;
|
import org.cryptomator.ui.common.StageFactory;
|
||||||
@@ -139,6 +140,24 @@ public class Dialogs {
|
|||||||
.setCancelAction(Stage::close);
|
.setCancelAction(Stage::close);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SimpleDialog.Builder prepareNotAVaultDirectoryDialog(Stage window, NotAVaultDirectoryException e) {
|
||||||
|
String descriptionKey = switch (e.notAVaultReason()) {
|
||||||
|
case MISSING_DATA_DIR -> "addvaultwizard.existing.notAVault.description.missingDataDir";
|
||||||
|
case DATA_NOT_A_DIRECTORY -> "addvaultwizard.existing.notAVault.description.dataNotADirectory";
|
||||||
|
case MISSING_VAULT_CONFIG -> "addvaultwizard.existing.notAVault.description.missingVaultConfig";
|
||||||
|
case VAULT_CONFIG_ACCESS_DENIED -> "addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied";
|
||||||
|
case UNSUPPORTED_STRUCTURE -> "addvaultwizard.existing.notAVault.description.unsupportedStructure";
|
||||||
|
};
|
||||||
|
return createDialogBuilder() //
|
||||||
|
.setOwner(window) //
|
||||||
|
.setTitleKey("addvaultwizard.existing.notAVault.title") //
|
||||||
|
.setMessageKey("addvaultwizard.existing.notAVault.message") //
|
||||||
|
.setDescriptionKey(descriptionKey, e.path().getFileName() != null ? e.path().getFileName().toString() : e.path().toString()) //
|
||||||
|
.setIcon(FontAwesome5Icon.EXCLAMATION) //
|
||||||
|
.setOkButtonKey(BUTTON_KEY_CLOSE) //
|
||||||
|
.setOkAction(Stage::close);
|
||||||
|
}
|
||||||
|
|
||||||
public SimpleDialog.Builder prepareNoDDirectorySelectedDialog(Stage window) {
|
public SimpleDialog.Builder prepareNoDDirectorySelectedDialog(Stage window) {
|
||||||
return createDialogBuilder() //
|
return createDialogBuilder() //
|
||||||
.setOwner(window) //
|
.setOwner(window) //
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
package org.cryptomator.ui.fxapp;
|
package org.cryptomator.ui.fxapp;
|
||||||
|
|
||||||
|
import org.cryptomator.common.vaults.NotAVaultDirectoryException;
|
||||||
import org.cryptomator.common.vaults.Vault;
|
import org.cryptomator.common.vaults.Vault;
|
||||||
import org.cryptomator.common.vaults.VaultListManager;
|
import org.cryptomator.common.vaults.VaultListManager;
|
||||||
import org.cryptomator.launcher.AppLaunchEvent;
|
import org.cryptomator.launcher.AppLaunchEvent;
|
||||||
import org.cryptomator.ui.common.VaultService;
|
import org.cryptomator.ui.common.VaultService;
|
||||||
|
import org.cryptomator.ui.dialogs.Dialogs;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
|
import javafx.stage.Stage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -29,14 +32,18 @@ class AppLaunchEventHandler {
|
|||||||
private final FxApplicationWindows appWindows;
|
private final FxApplicationWindows appWindows;
|
||||||
private final VaultListManager vaultListManager;
|
private final VaultListManager vaultListManager;
|
||||||
private final VaultService vaultService;
|
private final VaultService vaultService;
|
||||||
|
private final Stage primaryStage;
|
||||||
|
private final Dialogs dialogs;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public AppLaunchEventHandler(@Named("launchEventQueue") BlockingQueue<AppLaunchEvent> launchEventQueue, ExecutorService executorService, FxApplicationWindows appWindows, VaultListManager vaultListManager, VaultService vaultService) {
|
public AppLaunchEventHandler(@Named("launchEventQueue") BlockingQueue<AppLaunchEvent> launchEventQueue, ExecutorService executorService, FxApplicationWindows appWindows, VaultListManager vaultListManager, VaultService vaultService, @PrimaryStage Stage primaryStage, Dialogs dialogs) {
|
||||||
this.launchEventQueue = launchEventQueue;
|
this.launchEventQueue = launchEventQueue;
|
||||||
this.executorService = executorService;
|
this.executorService = executorService;
|
||||||
this.appWindows = appWindows;
|
this.appWindows = appWindows;
|
||||||
this.vaultListManager = vaultListManager;
|
this.vaultListManager = vaultListManager;
|
||||||
this.vaultService = vaultService;
|
this.vaultService = vaultService;
|
||||||
|
this.primaryStage = primaryStage;
|
||||||
|
this.dialogs = dialogs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startHandlingLaunchEvents() {
|
public void startHandlingLaunchEvents() {
|
||||||
@@ -58,31 +65,33 @@ class AppLaunchEventHandler {
|
|||||||
private void handleLaunchEvent(AppLaunchEvent event) {
|
private void handleLaunchEvent(AppLaunchEvent event) {
|
||||||
switch (event.type()) {
|
switch (event.type()) {
|
||||||
case REVEAL_APP -> appWindows.showMainWindow();
|
case REVEAL_APP -> appWindows.showMainWindow();
|
||||||
case OPEN_FILE -> Platform.runLater(() -> {
|
case OPEN_FILE -> event.pathsToOpen().forEach(this::openPotentialVault);
|
||||||
event.pathsToOpen().forEach(this::openPotentialVault);
|
|
||||||
});
|
|
||||||
default -> LOG.warn("Unsupported event type: {}", event.type());
|
default -> LOG.warn("Unsupported event type: {}", event.type());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO deduplicate MainWindowController...
|
// TODO deduplicate MainWindowController...
|
||||||
private void openPotentialVault(Path path) {
|
private void openPotentialVault(Path path) {
|
||||||
assert Platform.isFxApplicationThread();
|
Path potentialVaultPath = path.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT) ? path.getParent() : path;
|
||||||
try {
|
Optional<Vault> existing = vaultListManager.get(potentialVaultPath.normalize().toAbsolutePath());
|
||||||
Path potentialVaultPath = path.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT) ? path.getParent() : path;
|
if (existing.isPresent()) {
|
||||||
final Optional<Vault> v = vaultListManager.get(potentialVaultPath);
|
Platform.runLater(() -> {
|
||||||
if (v.isPresent()) {
|
if (existing.get().isUnlocked()) {
|
||||||
if (v.get().isUnlocked()) {
|
vaultService.reveal(existing.get());
|
||||||
vaultService.reveal(v.get());
|
} else if (existing.get().isLocked()) {
|
||||||
} else if (v.get().isLocked()) {
|
appWindows.startUnlockWorkflow(existing.get(), null);
|
||||||
appWindows.startUnlockWorkflow(v.get(), null);
|
|
||||||
}
|
}
|
||||||
} else {
|
});
|
||||||
vaultListManager.add(potentialVaultPath);
|
return;
|
||||||
LOG.debug("Added vault {}", potentialVaultPath);
|
}
|
||||||
}
|
try {
|
||||||
|
vaultListManager.add(potentialVaultPath);
|
||||||
|
LOG.debug("Added vault {}", potentialVaultPath);
|
||||||
|
} catch (NotAVaultDirectoryException e) {
|
||||||
|
LOG.warn("Cannot add {}: {}", potentialVaultPath, e.getMessage());
|
||||||
|
Platform.runLater(() -> dialogs.prepareNotAVaultDirectoryDialog(primaryStage, e).build().showAndWait());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.error("Failed to add vault " + path, e);
|
LOG.error("Failed to add vault {}", potentialVaultPath, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.cryptomator.integrations.common.Priority;
|
|||||||
import org.cryptomator.integrations.revealpath.RevealFailedException;
|
import org.cryptomator.integrations.revealpath.RevealFailedException;
|
||||||
import org.cryptomator.integrations.revealpath.RevealPathService;
|
import org.cryptomator.integrations.revealpath.RevealPathService;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -17,14 +18,17 @@ import java.nio.file.Path;
|
|||||||
*/
|
*/
|
||||||
@DisplayName("JavaFX HostServices (GTK)")
|
@DisplayName("JavaFX HostServices (GTK)")
|
||||||
@OperatingSystem(OperatingSystem.Value.LINUX)
|
@OperatingSystem(OperatingSystem.Value.LINUX)
|
||||||
@Priority(10)
|
@Priority(Priority.FALLBACK)
|
||||||
public class JfxRevealPathService implements RevealPathService {
|
public class JfxRevealPathService implements RevealPathService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reveal(Path p) throws RevealFailedException {
|
public void reveal(Path p) throws RevealFailedException {
|
||||||
|
var absPath = p.toAbsolutePath();
|
||||||
var fxApp = FxApplication.INSTANCE.get();
|
var fxApp = FxApplication.INSTANCE.get();
|
||||||
if (fxApp != null) {
|
if (fxApp != null) {
|
||||||
fxApp.getHostServices().showDocument(p.toUri().toString());
|
// showDocument() launches the default app for a regular file, so reveal its parent directory instead
|
||||||
|
var target = Files.isRegularFile(absPath) ? absPath.getParent() : absPath;
|
||||||
|
fxApp.getHostServices().showDocument(target.toUri().toString());
|
||||||
} else {
|
} else {
|
||||||
throw new RevealFailedException("JavaFX Application not initialized");
|
throw new RevealFailedException("JavaFX Application not initialized");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class Check {
|
|||||||
SUCCEEDED,
|
SUCCEEDED,
|
||||||
SKIPPED,
|
SKIPPED,
|
||||||
ERROR,
|
ERROR,
|
||||||
CANCELLED;
|
CANCELLED
|
||||||
}
|
}
|
||||||
|
|
||||||
ObservableList<Result> getResults() {
|
ObservableList<Result> getResults() {
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public class CheckListController implements FxController {
|
|||||||
|
|
||||||
checks.filtered(c -> !c.isChosenForExecution()).forEach(c -> c.setState(Check.CheckState.SKIPPED));
|
checks.filtered(c -> !c.isChosenForExecution()).forEach(c -> c.setState(Check.CheckState.SKIPPED));
|
||||||
checkExecutor.executeBatch(chosenChecks);
|
checkExecutor.executeBatch(chosenChecks);
|
||||||
checksListView.getSelectionModel().select(chosenChecks.get(0));
|
checksListView.getSelectionModel().select(chosenChecks.getFirst());
|
||||||
checksListView.refresh();
|
checksListView.refresh();
|
||||||
window.sizeToScene();
|
window.sizeToScene();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import org.cryptomator.common.settings.Settings;
|
|||||||
import org.cryptomator.ui.common.FxController;
|
import org.cryptomator.ui.common.FxController;
|
||||||
import org.cryptomator.ui.common.FxmlFile;
|
import org.cryptomator.ui.common.FxmlFile;
|
||||||
import org.cryptomator.ui.common.FxmlScene;
|
import org.cryptomator.ui.common.FxmlScene;
|
||||||
|
import org.cryptomator.ui.controls.FontAwesome5Icon;
|
||||||
|
import org.cryptomator.ui.controls.FontAwesome5IconView;
|
||||||
import org.cryptomator.ui.keyloading.KeyLoading;
|
import org.cryptomator.ui.keyloading.KeyLoading;
|
||||||
import org.cryptomator.ui.keyloading.KeyLoadingScoped;
|
import org.cryptomator.ui.keyloading.KeyLoadingScoped;
|
||||||
import org.jetbrains.annotations.VisibleForTesting;
|
import org.jetbrains.annotations.VisibleForTesting;
|
||||||
@@ -13,14 +15,24 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import javafx.animation.PauseTransition;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.Node;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.control.Hyperlink;
|
||||||
import javafx.scene.text.TextFlow;
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.Tooltip;
|
||||||
|
import javafx.scene.input.Clipboard;
|
||||||
|
import javafx.scene.input.ClipboardContent;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
import javafx.scene.layout.Priority;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import javafx.util.Duration;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -35,7 +47,11 @@ public class CheckHostTrustController implements FxController {
|
|||||||
private static final String CHECK_KEY = "hub.checkHostTrust.message.check";
|
private static final String CHECK_KEY = "hub.checkHostTrust.message.check";
|
||||||
private static final String ASK_SINGULAR_KEY = "hub.checkHostTrust.message.ask";
|
private static final String ASK_SINGULAR_KEY = "hub.checkHostTrust.message.ask";
|
||||||
private static final String ASK_PLURAL_KEY = "hub.checkHostTrust.message.ask.plural";
|
private static final String ASK_PLURAL_KEY = "hub.checkHostTrust.message.ask.plural";
|
||||||
|
private static final String DESCRIPTION_SINGULAR_KEY = "hub.checkHostTrust.description.ask";
|
||||||
|
private static final String DESCRIPTION_PLURAL_KEY = "hub.checkHostTrust.description.ask.plural";
|
||||||
|
private static final String COPY_TOOLTIP_KEY = "hub.checkHostTrust.copyBtn.tooltip";
|
||||||
private static final String TRUSTED_CRYPTOMATOR_CLOUD_DOMAIN = ".cryptomator.cloud";
|
private static final String TRUSTED_CRYPTOMATOR_CLOUD_DOMAIN = ".cryptomator.cloud";
|
||||||
|
private static final Duration COPIED_INDICATION_DURATION = Duration.seconds(2);
|
||||||
|
|
||||||
private final Stage window;
|
private final Stage window;
|
||||||
private final HubConfig hubConfig;
|
private final HubConfig hubConfig;
|
||||||
@@ -49,9 +65,10 @@ public class CheckHostTrustController implements FxController {
|
|||||||
private final ResourceBundle resourceBundle;
|
private final ResourceBundle resourceBundle;
|
||||||
private final SortedSet<String> hostnames;
|
private final SortedSet<String> hostnames;
|
||||||
private final StringProperty messageLabel;
|
private final StringProperty messageLabel;
|
||||||
|
private final StringProperty descriptionLabel;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TextFlow hostnamesFlow;
|
private VBox hostnamesBox;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public CheckHostTrustController(@KeyLoading Stage window, //
|
public CheckHostTrustController(@KeyLoading Stage window, //
|
||||||
@@ -74,6 +91,7 @@ public class CheckHostTrustController implements FxController {
|
|||||||
this.resourceBundle = resourceBundle;
|
this.resourceBundle = resourceBundle;
|
||||||
this.hostnames = new TreeSet<>();
|
this.hostnames = new TreeSet<>();
|
||||||
this.messageLabel = new SimpleStringProperty(resourceBundle.getString(CHECK_KEY));
|
this.messageLabel = new SimpleStringProperty(resourceBundle.getString(CHECK_KEY));
|
||||||
|
this.descriptionLabel = new SimpleStringProperty("");
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@@ -117,12 +135,41 @@ public class CheckHostTrustController implements FxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void renderHostnames() {
|
private void renderHostnames() {
|
||||||
hostnamesFlow.getChildren().clear();
|
hostnamesBox.getChildren().clear();
|
||||||
for (var hostname : hostnames) {
|
for (var hostname : hostnames) {
|
||||||
hostnamesFlow.getChildren().add(new Text(hostname + System.lineSeparator()));
|
hostnamesBox.getChildren().add(createHostnameRow(hostname));
|
||||||
}
|
}
|
||||||
var messageKey = hostnames.size() > 1 ? ASK_PLURAL_KEY : ASK_SINGULAR_KEY;
|
var plural = hostnames.size() > 1;
|
||||||
messageLabel.set(resourceBundle.getString(messageKey));
|
messageLabel.set(resourceBundle.getString(plural ? ASK_PLURAL_KEY : ASK_SINGULAR_KEY));
|
||||||
|
descriptionLabel.set(resourceBundle.getString(plural ? DESCRIPTION_PLURAL_KEY : DESCRIPTION_SINGULAR_KEY));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node createHostnameRow(String hostname) {
|
||||||
|
var label = new Label(hostname);
|
||||||
|
label.setWrapText(true);
|
||||||
|
HBox.setHgrow(label, Priority.ALWAYS);
|
||||||
|
|
||||||
|
var icon = new FontAwesome5IconView();
|
||||||
|
icon.setGlyph(FontAwesome5Icon.COPY);
|
||||||
|
var copyLink = new Hyperlink(null, icon);
|
||||||
|
copyLink.setTooltip(new Tooltip(resourceBundle.getString(COPY_TOOLTIP_KEY)));
|
||||||
|
copyLink.setAccessibleText(resourceBundle.getString(COPY_TOOLTIP_KEY));
|
||||||
|
copyLink.setOnAction(_ -> copyToClipboard(hostname, icon));
|
||||||
|
|
||||||
|
var row = new HBox(6, label, copyLink);
|
||||||
|
row.setAlignment(Pos.CENTER_LEFT);
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void copyToClipboard(String hostname, FontAwesome5IconView icon) {
|
||||||
|
var clipboardContent = new ClipboardContent();
|
||||||
|
clipboardContent.putString(hostname);
|
||||||
|
Clipboard.getSystemClipboard().setContent(clipboardContent);
|
||||||
|
|
||||||
|
icon.setGlyph(FontAwesome5Icon.CHECK);
|
||||||
|
var resetIcon = new PauseTransition(COPIED_INDICATION_DURATION);
|
||||||
|
resetIcon.setOnFinished(_ -> icon.setGlyph(FontAwesome5Icon.COPY));
|
||||||
|
resetIcon.play();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isConsistentHubConfig() {
|
private boolean isConsistentHubConfig() {
|
||||||
@@ -176,4 +223,12 @@ public class CheckHostTrustController implements FxController {
|
|||||||
return messageLabel.get();
|
return messageLabel.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StringProperty descriptionLabelProperty() {
|
||||||
|
return descriptionLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescriptionLabel() {
|
||||||
|
return descriptionLabel.get();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import org.apache.commons.lang3.SystemUtils;
|
|||||||
import org.cryptomator.common.recovery.RecoveryActionType;
|
import org.cryptomator.common.recovery.RecoveryActionType;
|
||||||
import org.cryptomator.common.recovery.VaultPreparator;
|
import org.cryptomator.common.recovery.VaultPreparator;
|
||||||
import org.cryptomator.common.settings.Settings;
|
import org.cryptomator.common.settings.Settings;
|
||||||
|
import org.cryptomator.common.vaults.NotAVaultDirectoryException;
|
||||||
import org.cryptomator.common.vaults.Vault;
|
import org.cryptomator.common.vaults.Vault;
|
||||||
import org.cryptomator.common.vaults.VaultComponent;
|
import org.cryptomator.common.vaults.VaultComponent;
|
||||||
import org.cryptomator.common.vaults.VaultListManager;
|
import org.cryptomator.common.vaults.VaultListManager;
|
||||||
@@ -23,6 +24,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.Bindings;
|
||||||
import javafx.beans.binding.BooleanBinding;
|
import javafx.beans.binding.BooleanBinding;
|
||||||
import javafx.beans.property.BooleanProperty;
|
import javafx.beans.property.BooleanProperty;
|
||||||
@@ -55,6 +57,7 @@ import java.util.List;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_EXT;
|
import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_EXT;
|
||||||
@@ -90,6 +93,7 @@ public class VaultListController implements FxController {
|
|||||||
private final VaultComponent.Factory vaultComponentFactory;
|
private final VaultComponent.Factory vaultComponentFactory;
|
||||||
private final RecoveryKeyComponent.Factory recoveryKeyWindow;
|
private final RecoveryKeyComponent.Factory recoveryKeyWindow;
|
||||||
private final List<MountService> mountServices;
|
private final List<MountService> mountServices;
|
||||||
|
private final ExecutorService executor;
|
||||||
|
|
||||||
public ListView<Vault> vaultList;
|
public ListView<Vault> vaultList;
|
||||||
public StackPane root;
|
public StackPane root;
|
||||||
@@ -113,7 +117,8 @@ public class VaultListController implements FxController {
|
|||||||
RecoveryKeyComponent.Factory recoveryKeyWindow, //
|
RecoveryKeyComponent.Factory recoveryKeyWindow, //
|
||||||
VaultComponent.Factory vaultComponentFactory, //
|
VaultComponent.Factory vaultComponentFactory, //
|
||||||
List<MountService> mountServices, //
|
List<MountService> mountServices, //
|
||||||
FxFSEventList fxFSEventList) {
|
FxFSEventList fxFSEventList, //
|
||||||
|
ExecutorService executor) {
|
||||||
this.mainWindow = mainWindow;
|
this.mainWindow = mainWindow;
|
||||||
this.vaults = vaults;
|
this.vaults = vaults;
|
||||||
this.selectedVault = selectedVault;
|
this.selectedVault = selectedVault;
|
||||||
@@ -127,6 +132,7 @@ public class VaultListController implements FxController {
|
|||||||
this.recoveryKeyWindow = recoveryKeyWindow;
|
this.recoveryKeyWindow = recoveryKeyWindow;
|
||||||
this.vaultComponentFactory = vaultComponentFactory;
|
this.vaultComponentFactory = vaultComponentFactory;
|
||||||
this.mountServices = mountServices;
|
this.mountServices = mountServices;
|
||||||
|
this.executor = executor;
|
||||||
|
|
||||||
this.emptyVaultList = Bindings.isEmpty(vaults);
|
this.emptyVaultList = Bindings.isEmpty(vaults);
|
||||||
this.unreadEvents = fxFSEventList.unreadEventsProperty();
|
this.unreadEvents = fxFSEventList.unreadEventsProperty();
|
||||||
@@ -147,7 +153,7 @@ public class VaultListController implements FxController {
|
|||||||
vaults.addListener((ListChangeListener.Change<? extends Vault> c) -> {
|
vaults.addListener((ListChangeListener.Change<? extends Vault> c) -> {
|
||||||
while (c.next()) {
|
while (c.next()) {
|
||||||
if (c.wasAdded()) {
|
if (c.wasAdded()) {
|
||||||
Vault anyAddedVault = c.getAddedSubList().get(0);
|
Vault anyAddedVault = c.getAddedSubList().getFirst();
|
||||||
vaultList.getSelectionModel().select(anyAddedVault);
|
vaultList.getSelectionModel().select(anyAddedVault);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -324,15 +330,18 @@ public class VaultListController implements FxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addVault(Path pathToVault) {
|
private void addVault(Path pathToVault) {
|
||||||
try {
|
Path target = pathToVault.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT) ? pathToVault.getParent() : pathToVault;
|
||||||
if (pathToVault.getFileName().toString().endsWith(CRYPTOMATOR_FILENAME_EXT)) {
|
executor.execute(() -> {
|
||||||
vaultListManager.add(pathToVault.getParent());
|
try {
|
||||||
} else {
|
vaultListManager.add(target);
|
||||||
vaultListManager.add(pathToVault);
|
} catch (NotAVaultDirectoryException e) {
|
||||||
|
LOG.warn("Cannot add {}: {}", target, e.getMessage());
|
||||||
|
Platform.runLater(() -> dialogs.prepareNotAVaultDirectoryDialog(mainWindow, e).build().showAndWait());
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.warn("Failed to add vault {}", target, e);
|
||||||
|
Platform.runLater(() -> appWindows.showErrorWindow(e, mainWindow, null));
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
});
|
||||||
LOG.debug("Not a vault: {}", pathToVault);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ public class RecoveryKeyValidateController implements FxController {
|
|||||||
/**
|
/**
|
||||||
* Recovery key is not a valid key.
|
* Recovery key is not a valid key.
|
||||||
*/
|
*/
|
||||||
INVALID;
|
INVALID
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,9 +140,9 @@ public class VaultStatisticsController implements FxController {
|
|||||||
long allTimeMaxAccessedFiles = Arrays.stream(maxAccessBuf).max().orElse(0L);
|
long allTimeMaxAccessedFiles = Arrays.stream(maxAccessBuf).max().orElse(0L);
|
||||||
|
|
||||||
// remove oldest value:
|
// remove oldest value:
|
||||||
decryptedBytesRead.getData().remove(0);
|
decryptedBytesRead.getData().removeFirst();
|
||||||
encryptedBytesWrite.getData().remove(0);
|
encryptedBytesWrite.getData().removeFirst();
|
||||||
accessedFiles.getData().remove(0);
|
accessedFiles.getData().removeFirst();
|
||||||
|
|
||||||
// add latest value:
|
// add latest value:
|
||||||
decryptedBytesRead.getData().add(new Data<>(currentStep, decBytes));
|
decryptedBytesRead.getData().add(new Data<>(currentStep, decBytes));
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ public class UnlockInvalidMountPointController implements FxController {
|
|||||||
|
|
||||||
//TODO Add option to show filesystem, e.g. for ExceptionType.HIDEAWAY_EXISTS
|
//TODO Add option to show filesystem, e.g. for ExceptionType.HIDEAWAY_EXISTS
|
||||||
SHOW_PREFERENCES,
|
SHOW_PREFERENCES,
|
||||||
SHOW_VAULT_OPTIONS;
|
SHOW_VAULT_OPTIONS
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -20,6 +20,10 @@
|
|||||||
src: url('firacode_regular.ttf');
|
src: url('firacode_regular.ttf');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
src: url('AtkinsonHyperlegibleMono-Regular.ttf');
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* *
|
* *
|
||||||
* Root Styling & Colors *
|
* Root Styling & Colors *
|
||||||
@@ -141,6 +145,17 @@
|
|||||||
-fx-font-size: 1.1em;
|
-fx-font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hostname-list {
|
||||||
|
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
|
||||||
|
-fx-background-insets: 0, 1px;
|
||||||
|
-fx-background-radius: 4px;
|
||||||
|
-fx-padding: 6px 8px 6px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hostname-list .label {
|
||||||
|
-fx-font-family: 'Atkinson Hyperlegible Mono';
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* *
|
* *
|
||||||
* Glyph Icons *
|
* Glyph Icons *
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
src: url('firacode_regular.ttf');
|
src: url('firacode_regular.ttf');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
src: url('AtkinsonHyperlegibleMono-Regular.ttf');
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* *
|
* *
|
||||||
* Root Styling & Colors *
|
* Root Styling & Colors *
|
||||||
@@ -141,6 +145,17 @@
|
|||||||
-fx-font-size: 1.1em;
|
-fx-font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hostname-list {
|
||||||
|
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
|
||||||
|
-fx-background-insets: 0, 1px;
|
||||||
|
-fx-background-radius: 4px;
|
||||||
|
-fx-padding: 6px 8px 6px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hostname-list .label {
|
||||||
|
-fx-font-family: 'Atkinson Hyperlegible Mono';
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* *
|
* *
|
||||||
* Glyph Icons *
|
* Glyph Icons *
|
||||||
|
|||||||
@@ -11,12 +11,11 @@
|
|||||||
<?import javafx.scene.layout.StackPane?>
|
<?import javafx.scene.layout.StackPane?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.shape.Circle?>
|
<?import javafx.scene.shape.Circle?>
|
||||||
<?import javafx.scene.text.TextFlow?>
|
|
||||||
<HBox xmlns:fx="http://javafx.com/fxml"
|
<HBox xmlns:fx="http://javafx.com/fxml"
|
||||||
xmlns="http://javafx.com/javafx"
|
xmlns="http://javafx.com/javafx"
|
||||||
fx:controller="org.cryptomator.ui.keyloading.hub.CheckHostTrustController"
|
fx:controller="org.cryptomator.ui.keyloading.hub.CheckHostTrustController"
|
||||||
minWidth="400"
|
minWidth="450"
|
||||||
maxWidth="400"
|
maxWidth="450"
|
||||||
minHeight="145"
|
minHeight="145"
|
||||||
spacing="12"
|
spacing="12"
|
||||||
alignment="TOP_LEFT"
|
alignment="TOP_LEFT"
|
||||||
@@ -34,13 +33,15 @@
|
|||||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="QUESTION" glyphSize="24"/>
|
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="QUESTION" glyphSize="24"/>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
</Group>
|
</Group>
|
||||||
<VBox HBox.hgrow="ALWAYS">
|
<VBox HBox.hgrow="ALWAYS" spacing="6">
|
||||||
<Label styleClass="label-large" text="${controller.messageLabel}" wrapText="true" textAlignment="LEFT">
|
<Label styleClass="label-large" text="${controller.messageLabel}" wrapText="true" textAlignment="LEFT">
|
||||||
<padding>
|
<padding>
|
||||||
<Insets bottom="6" top="6"/>
|
<Insets bottom="6" top="6"/>
|
||||||
</padding>
|
</padding>
|
||||||
</Label>
|
</Label>
|
||||||
<TextFlow fx:id="hostnamesFlow" styleClass="text-flow" minHeight="60"/>
|
<Label text="${controller.descriptionLabel}" wrapText="true" textAlignment="LEFT" visible="${!controller.descriptionLabel.empty}" managed="${!controller.descriptionLabel.empty}"/>
|
||||||
|
<!-- The box is filled in the controller, see createHostNamesRow() -->
|
||||||
|
<VBox fx:id="hostnamesBox" styleClass="hostname-list" spacing="4" visible="${!controller.descriptionLabel.empty}" managed="${!controller.descriptionLabel.empty}"/>
|
||||||
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
||||||
<ButtonBar buttonMinWidth="120" buttonOrder="+CX">
|
<ButtonBar buttonMinWidth="120" buttonOrder="+CX">
|
||||||
<buttons>
|
<buttons>
|
||||||
|
|||||||
@@ -110,6 +110,13 @@ addvaultwizard.existing.restore=Restore…
|
|||||||
addvaultwizard.existing.chooseBtn=Choose…
|
addvaultwizard.existing.chooseBtn=Choose…
|
||||||
addvaultwizard.existing.filePickerTitle=Select Vault File
|
addvaultwizard.existing.filePickerTitle=Select Vault File
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
|
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
|
||||||
|
addvaultwizard.existing.notAVault.title=Not a Vault
|
||||||
|
addvaultwizard.existing.notAVault.message=The selected folder is not a Cryptomator vault
|
||||||
|
addvaultwizard.existing.notAVault.description.missingDataDir=The required "d" subdirectory is missing inside "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.dataNotADirectory=The "d" entry inside "%s" is not a directory.
|
||||||
|
addvaultwizard.existing.notAVault.description.missingVaultConfig=The required "vault.cryptomator" file is missing inside "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=File "vault.cryptomator" inside "%s" cannot be read due to insufficient access rights.
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure=The directory structure of "%s" is not supported.
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=Added vault "%s".\nYou need to unlock this vault to access or add contents. Alternatively you can unlock it at any later point in time.
|
addvaultwizard.success.nextStepsInstructions=Added vault "%s".\nYou need to unlock this vault to access or add contents. Alternatively you can unlock it at any later point in time.
|
||||||
addvaultwizard.success.unlockNow=Unlock Now
|
addvaultwizard.success.unlockNow=Unlock Now
|
||||||
@@ -166,6 +173,9 @@ hub.noKeychain.openBtn=Open Preferences
|
|||||||
hub.checkHostTrust.message.check=Checking Configuration…
|
hub.checkHostTrust.message.check=Checking Configuration…
|
||||||
hub.checkHostTrust.message.ask=Trust this host?
|
hub.checkHostTrust.message.ask=Trust this host?
|
||||||
hub.checkHostTrust.message.ask.plural=Trust these hosts?
|
hub.checkHostTrust.message.ask.plural=Trust these hosts?
|
||||||
|
hub.checkHostTrust.description.ask=Cryptomator does not recognize this host. To unlock the vault, it needs to be trusted. Only trust it if you recognize the address below.
|
||||||
|
hub.checkHostTrust.description.ask.plural=Cryptomator does not recognize these hosts. To unlock the vault, they need to be trusted. Only trust them if you recognize the addresses below.
|
||||||
|
hub.checkHostTrust.copyBtn.tooltip=Copy address to clipboard
|
||||||
hub.checkHostTrust.trustBtn=Trust
|
hub.checkHostTrust.trustBtn=Trust
|
||||||
hub.checkHostTrust.denyBtn=Deny
|
hub.checkHostTrust.denyBtn=Deny
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
## Success
|
## Success
|
||||||
## Failure
|
## Failure
|
||||||
## Hub
|
## Hub
|
||||||
|
### Check Host Authenticity
|
||||||
### Waiting
|
### Waiting
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
@@ -40,6 +41,7 @@
|
|||||||
### Registration Failed
|
### Registration Failed
|
||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
|
|
||||||
@@ -154,4 +156,4 @@
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -154,6 +154,8 @@ unlock.error.title=فشل فتح "%s"
|
|||||||
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
|
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
|
||||||
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
|
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
|
||||||
hub.noKeychain.openBtn=فتح التفضيلات
|
hub.noKeychain.openBtn=فتح التفضيلات
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=ثق
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=جاري الانتظار للمصادقة…
|
hub.auth.message=جاري الانتظار للمصادقة…
|
||||||
hub.auth.description=يجب أن يتم إعادة توجيهك تلقائياً إلى صفحة تسجيل الدخول.
|
hub.auth.description=يجب أن يتم إعادة توجيهك تلقائياً إلى صفحة تسجيل الدخول.
|
||||||
@@ -183,6 +185,7 @@ hub.registerFailed.description.deviceAlreadyExists=هذا الجهاز مسجل
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=تم رفض الوصول
|
hub.unauthorized.message=تم رفض الوصول
|
||||||
hub.unauthorized.description=غير مسموح لك بفتح هذا المستودع. اتصل بمالك المستودع لطلب الوصول.
|
hub.unauthorized.description=غير مسموح لك بفتح هذا المستودع. اتصل بمالك المستودع لطلب الوصول.
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=مطلوب اتخاذ إجراء
|
hub.requireAccountInit.message=مطلوب اتخاذ إجراء
|
||||||
hub.requireAccountInit.description.0=للمتابعة، يرجى إكمال الخطوات المطلوبة في
|
hub.requireAccountInit.description.0=للمتابعة، يرجى إكمال الخطوات المطلوبة في
|
||||||
@@ -645,4 +648,4 @@ eventView.entry.inUse.showEncrypted=عرض ملَف المشفر
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -151,6 +151,8 @@ unlock.error.title="%s" биге асылманы
|
|||||||
hub.noKeychain.message=Йыһаз асҡысына инеү рөхсәте юҡ
|
hub.noKeychain.message=Йыһаз асҡысына инеү рөхсәте юҡ
|
||||||
hub.noKeychain.description=Хаб һаҡлағыстарын асыу өсөн йыһаз асҡысы кәрәк, ул иһә асҡыс сылбырында һаҡлана. Артабан “%s” мөмкинлеге бирегеҙ һәм көйләүҙәрҙә асҡыс сылбырын һайлағыҙ.
|
hub.noKeychain.description=Хаб һаҡлағыстарын асыу өсөн йыһаз асҡысы кәрәк, ул иһә асҡыс сылбырында һаҡлана. Артабан “%s” мөмкинлеге бирегеҙ һәм көйләүҙәрҙә асҡыс сылбырын һайлағыҙ.
|
||||||
hub.noKeychain.openBtn=Көйләүҙәрҙе ас
|
hub.noKeychain.openBtn=Көйләүҙәрҙе ас
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Ышан
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Аутентиклау көтөлә…
|
hub.auth.message=Аутентиклау көтөлә…
|
||||||
hub.auth.description=Автоматик рәүештә инеү битенә йүнәлтелергә тейешһегеҙ.
|
hub.auth.description=Автоматик рәүештә инеү битенә йүнәлтелергә тейешһегеҙ.
|
||||||
@@ -170,6 +172,7 @@ hub.registerSuccess.unlockBtn=Биген ас
|
|||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Инеү кире ҡағылды
|
hub.unauthorized.message=Инеү кире ҡағылды
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Эш-хәрәкәт кәрәкле
|
hub.requireAccountInit.message=Эш-хәрәкәт кәрәкле
|
||||||
hub.requireAccountInit.description.0=Дауам итер өсөн, кәрәкле аҙымдар тамамланырға тейеш урын:
|
hub.requireAccountInit.description.0=Дауам итер өсөн, кәрәкле аҙымдар тамамланырға тейеш урын:
|
||||||
@@ -555,4 +558,4 @@ dokanySupportEnd.preferencesBtn=Көйләүҙәрҙе ас
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ unlock.error.customPath.description.inUse=Дыскавая літара або
|
|||||||
hub.noKeychain.message=Няма доступу да ключа прылады
|
hub.noKeychain.message=Няма доступу да ключа прылады
|
||||||
hub.noKeychain.description=Каб разамкнуць скарбніцы Hub, патрэбны ключ прылады, які захаваны ў звязку ключоў. Каб працягнуць, уключы "%s" ды абяры звязак ключоў у наладах.
|
hub.noKeychain.description=Каб разамкнуць скарбніцы Hub, патрэбны ключ прылады, які захаваны ў звязку ключоў. Каб працягнуць, уключы "%s" ды абяры звязак ключоў у наладах.
|
||||||
hub.noKeychain.openBtn=Адчыніць налады
|
hub.noKeychain.openBtn=Адчыніць налады
|
||||||
|
### Check Host Authenticity
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Чаканне спраўджання…
|
hub.auth.message=Чаканне спраўджання…
|
||||||
hub.auth.description=Ты мусіш аўтаматычна перанакіравацца на старонку ўваходу.
|
hub.auth.description=Ты мусіш аўтаматычна перанакіравацца на старонку ўваходу.
|
||||||
@@ -162,6 +163,7 @@ hub.registerSuccess.unlockBtn=Адамкнуць
|
|||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Адмова ў доступе
|
hub.unauthorized.message=Адмова ў доступе
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=Несапраўдная ліцэнзія Hub
|
hub.invalidLicense.message=Несапраўдная ліцэнзія Hub
|
||||||
@@ -532,4 +534,4 @@ dokanySupportEnd.preferencesBtn=Адчыніць налады
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ unlock.error.title=Неуспешно отключване на „%s“
|
|||||||
hub.noKeychain.message=Няма достъп до ключа на устройството
|
hub.noKeychain.message=Няма достъп до ключа на устройството
|
||||||
hub.noKeychain.description=За да отключите хранилищата в Hub е необходим ключ за устройството, който се защитава с помощта на ключодържател. За да продължите, разрешете „%s“ и изберете ключодържателя в настройките.
|
hub.noKeychain.description=За да отключите хранилищата в Hub е необходим ключ за устройството, който се защитава с помощта на ключодържател. За да продължите, разрешете „%s“ и изберете ключодържателя в настройките.
|
||||||
hub.noKeychain.openBtn=Към настройките
|
hub.noKeychain.openBtn=Към настройките
|
||||||
|
### Check Host Authenticity
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Изчакване на удостоверяване…
|
hub.auth.message=Изчакване на удостоверяване…
|
||||||
hub.auth.description=Автоматично ще бъдете пренасочени към страницата за вход.
|
hub.auth.description=Автоматично ще бъдете пренасочени към страницата за вход.
|
||||||
@@ -177,6 +178,7 @@ hub.registerSuccess.unlockBtn=Отключване
|
|||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Отказан достъп
|
hub.unauthorized.message=Отказан достъп
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Необходимо е действие
|
hub.requireAccountInit.message=Необходимо е действие
|
||||||
hub.requireAccountInit.description.0=За да продължите завършете необходимите стъпки в
|
hub.requireAccountInit.description.0=За да продължите завършете необходимите стъпки в
|
||||||
@@ -563,4 +565,4 @@ dokanySupportEnd.preferencesBtn=Към настройките
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ unlock.unlockBtn=আনলক করুন
|
|||||||
## Success
|
## Success
|
||||||
## Failure
|
## Failure
|
||||||
## Hub
|
## Hub
|
||||||
|
### Check Host Authenticity
|
||||||
### Waiting
|
### Waiting
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
@@ -101,6 +102,7 @@ hub.registerSuccess.unlockBtn=আনলক করুন
|
|||||||
### Registration Failed
|
### Registration Failed
|
||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
|
|
||||||
@@ -221,4 +223,4 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ unlock.success.rememberChoice=Zapamtite izbor, ne pokazujte ovo ponovo
|
|||||||
unlock.success.revealBtn=Otkrij pogon
|
unlock.success.revealBtn=Otkrij pogon
|
||||||
## Failure
|
## Failure
|
||||||
## Hub
|
## Hub
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Povjerenje
|
||||||
### Waiting
|
### Waiting
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
@@ -113,6 +115,7 @@ hub.registerSuccess.unlockBtn=Otključaj
|
|||||||
### Registration Failed
|
### Registration Failed
|
||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
|
|
||||||
@@ -356,4 +359,4 @@ quit.lockAndQuitBtn=Zaključaj i zatvori
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -155,6 +155,8 @@ unlock.error.title=El desblocatge de "%s" ha fallat
|
|||||||
hub.noKeychain.message=No es pot accedir a la clau del dispositiu
|
hub.noKeychain.message=No es pot accedir a la clau del dispositiu
|
||||||
hub.noKeychain.description=Per poder desblocar caixes fortes del Hub es requereix la clau d'un dispositiu, que s'emmagatzema de forma segura en un clauer. Per continuar, habiliti "%s" i seleccioni un clauer en les Preferències.
|
hub.noKeychain.description=Per poder desblocar caixes fortes del Hub es requereix la clau d'un dispositiu, que s'emmagatzema de forma segura en un clauer. Per continuar, habiliti "%s" i seleccioni un clauer en les Preferències.
|
||||||
hub.noKeychain.openBtn=Obrir les Preferències
|
hub.noKeychain.openBtn=Obrir les Preferències
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Confia-hi
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=S’està esperant l’autenticació…
|
hub.auth.message=S’està esperant l’autenticació…
|
||||||
hub.auth.description=Hauríeu de ser redirigits a la pàgina d'accés.
|
hub.auth.description=Hauríeu de ser redirigits a la pàgina d'accés.
|
||||||
@@ -184,6 +186,7 @@ hub.registerFailed.description.deviceAlreadyExists=El dispositiu ja ha estat reg
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Accés denegat
|
hub.unauthorized.message=Accés denegat
|
||||||
hub.unauthorized.description=No estàs autoritzat a obrir aquesta caixa forta. Contacta amb el seu propietari per obtenir accés.
|
hub.unauthorized.description=No estàs autoritzat a obrir aquesta caixa forta. Contacta amb el seu propietari per obtenir accés.
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Acció necessària
|
hub.requireAccountInit.message=Acció necessària
|
||||||
hub.requireAccountInit.description.0=Per a continuar, si us plau, seguiu els passos necessaris en el vostre
|
hub.requireAccountInit.description.0=Per a continuar, si us plau, seguiu els passos necessaris en el vostre
|
||||||
@@ -611,4 +614,4 @@ shareVault.hub.openHub=Obre Cryptomator Hub
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -150,6 +150,8 @@ unlock.error.title=Odemknutí "%s" selhalo
|
|||||||
hub.noKeychain.message=Nelze získat přístup ke klíči zařízení
|
hub.noKeychain.message=Nelze získat přístup ke klíči zařízení
|
||||||
hub.noKeychain.description=Chcete-li odemknout Hub trezory, je potřeba použít klíč zařízení, který je zabezpečen pomocí klíčenky. Chcete-li pokračovat, povolte „%s“ a vyberte klíčenku v nastavení.
|
hub.noKeychain.description=Chcete-li odemknout Hub trezory, je potřeba použít klíč zařízení, který je zabezpečen pomocí klíčenky. Chcete-li pokračovat, povolte „%s“ a vyberte klíčenku v nastavení.
|
||||||
hub.noKeychain.openBtn=Otevřít předvolby
|
hub.noKeychain.openBtn=Otevřít předvolby
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Důvěřovat
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Čekání na ověření…
|
hub.auth.message=Čekání na ověření…
|
||||||
hub.auth.description=Měli byste být automaticky přesměrováni na přihlašovací stránku.
|
hub.auth.description=Měli byste být automaticky přesměrováni na přihlašovací stránku.
|
||||||
@@ -178,6 +180,7 @@ hub.registerFailed.description.deviceAlreadyExists=Toto zařízení je již regi
|
|||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Přístup odepřen
|
hub.unauthorized.message=Přístup odepřen
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Požadována akce
|
hub.requireAccountInit.message=Požadována akce
|
||||||
hub.requireAccountInit.description.0=Chcete-li pokračovat, vyplňte prosím požadované kroky ve vašem
|
hub.requireAccountInit.description.0=Chcete-li pokračovat, vyplňte prosím požadované kroky ve vašem
|
||||||
@@ -572,4 +575,4 @@ shareVault.hub.openHub=Otevřít Cryptomator Hub
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -109,6 +109,13 @@ addvaultwizard.existing.restore=Gendan…
|
|||||||
addvaultwizard.existing.chooseBtn=Vælg…
|
addvaultwizard.existing.chooseBtn=Vælg…
|
||||||
addvaultwizard.existing.filePickerTitle=Vælg boks-fil
|
addvaultwizard.existing.filePickerTitle=Vælg boks-fil
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator boks
|
addvaultwizard.existing.filePickerMimeDesc=Cryptomator boks
|
||||||
|
addvaultwizard.existing.notAVault.title=Ikke en boks
|
||||||
|
addvaultwizard.existing.notAVault.message=Den valgte mappe skal være en gyldig Cryptomator boks
|
||||||
|
addvaultwizard.existing.notAVault.description.missingDataDir=Den krævede "d" undermappe mangler inde i "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.dataNotADirectory=Indgangen "d" inde i "%s" er ikke en mappe.
|
||||||
|
addvaultwizard.existing.notAVault.description.missingVaultConfig=Den påkrævede "vault.cryptomator"-fil mangler inde i "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=Filen "vault.cryptomator" inde i "%s" kan ikke læses på grund af utilstrækkelige adgangsrettigheder.
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure=Mappestrukturen for "%s" understøttes ikke.
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=Tilføjede boks "%s".\nDu skal låse op for denne boks for at tilgå indholdet. Alternativt kan du låse den op på et senere tidspunkt.
|
addvaultwizard.success.nextStepsInstructions=Tilføjede boks "%s".\nDu skal låse op for denne boks for at tilgå indholdet. Alternativt kan du låse den op på et senere tidspunkt.
|
||||||
addvaultwizard.success.unlockNow=Lås op nu
|
addvaultwizard.success.unlockNow=Lås op nu
|
||||||
@@ -161,6 +168,12 @@ unlock.error.title=Oplåsning af "%s" mislykkedes
|
|||||||
hub.noKeychain.message=Kan ikke tilgå enhedsnøgle
|
hub.noKeychain.message=Kan ikke tilgå enhedsnøgle
|
||||||
hub.noKeychain.description=En enhedsnøgle er påkrævet for at låse Hub bokse op. Enhedsnøglen er sikret i en nøglering. For at fortsætte, aktivér “%s” og vælg en nøglering i indstillingerne.
|
hub.noKeychain.description=En enhedsnøgle er påkrævet for at låse Hub bokse op. Enhedsnøglen er sikret i en nøglering. For at fortsætte, aktivér “%s” og vælg en nøglering i indstillingerne.
|
||||||
hub.noKeychain.openBtn=Åbn Indstillinger
|
hub.noKeychain.openBtn=Åbn Indstillinger
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.message.check=Kontrollerer konfiguration…
|
||||||
|
hub.checkHostTrust.message.ask=Stol på denne vært?
|
||||||
|
hub.checkHostTrust.message.ask.plural=Stol på disse værter?
|
||||||
|
hub.checkHostTrust.trustBtn=Hav tillid
|
||||||
|
hub.checkHostTrust.denyBtn=Afvis
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Afventer godkendelse…
|
hub.auth.message=Afventer godkendelse…
|
||||||
hub.auth.description=Du burde automatisk blive omdirigeret til login-siden.
|
hub.auth.description=Du burde automatisk blive omdirigeret til login-siden.
|
||||||
@@ -192,6 +205,9 @@ hub.archived.description=Denne boks er blevet arkiveret og er ikke længere tilg
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Adgang nægtet
|
hub.unauthorized.message=Adgang nægtet
|
||||||
hub.unauthorized.description=Du har ikke tilladelse til at åbne denne boks. Kontant ejeren af boksen for at anmode om adgang.
|
hub.unauthorized.description=Du har ikke tilladelse til at åbne denne boks. Kontant ejeren af boksen for at anmode om adgang.
|
||||||
|
### Untrusted Host
|
||||||
|
hub.untrustedHost.message=Vært Ikke pålidelig
|
||||||
|
hub.untrustedHost.description=Forbindelsen til Hub blev blokeret for din sikkerhed. Hvis du mener, at Hub-værten er sikker, så kontakt din Hub-administrator eller prøv igen.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Handling påkrævet
|
hub.requireAccountInit.message=Handling påkrævet
|
||||||
hub.requireAccountInit.description.0=For at fortsætte, skal du fuldføre de nødvendige trin i din
|
hub.requireAccountInit.description.0=For at fortsætte, skal du fuldføre de nødvendige trin i din
|
||||||
@@ -305,6 +321,7 @@ preferences.general.debugDirectory=Vis logfiler
|
|||||||
preferences.general.autoStart=Start Cryptomator automatisk ved opstart
|
preferences.general.autoStart=Start Cryptomator automatisk ved opstart
|
||||||
preferences.general.keychainBackend=Gem adgangskoder med
|
preferences.general.keychainBackend=Gem adgangskoder med
|
||||||
preferences.general.quickAccessService=Tilføj oplåste bokse til området hurtig adgang
|
preferences.general.quickAccessService=Tilføj oplåste bokse til området hurtig adgang
|
||||||
|
preferences.general.resetTrustedHosts=Nulstil betroede værter
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Brugerflade
|
preferences.interface=Brugerflade
|
||||||
preferences.interface.theme=Udseende
|
preferences.interface.theme=Udseende
|
||||||
@@ -716,4 +733,4 @@ eventView.entry.inUse.ignoreLock=Ignorér anvendelsesstatus
|
|||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
notification.inUse.message=Filen er i brug på en anden enhed
|
notification.inUse.message=Filen er i brug på en anden enhed
|
||||||
notification.inUse.description=Filen er åbnet af %s på %s. Bed dem om at lukke filen og lade synkroniseringen afslutte. Du kan ignorere status for at åbne den nu, men det kan forårsage konflikter eller overskrive nyere ændringer.
|
notification.inUse.description=Filen er åbnet af %s på %s. Bed dem om at lukke filen og lade synkroniseringen afslutte. Du kan ignorere status for at åbne den nu, men det kan forårsage konflikter eller overskrive nyere ændringer.
|
||||||
notification.inUse.action=Ignorér anvendelsesstatus
|
notification.inUse.action=Ignorér anvendelsesstatus
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ addvaultwizard.existing.restore=Wiederherstellen…
|
|||||||
addvaultwizard.existing.chooseBtn=Durchsuchen …
|
addvaultwizard.existing.chooseBtn=Durchsuchen …
|
||||||
addvaultwizard.existing.filePickerTitle=Tresordatei auswählen
|
addvaultwizard.existing.filePickerTitle=Tresordatei auswählen
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator-Tresor
|
addvaultwizard.existing.filePickerMimeDesc=Cryptomator-Tresor
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure=Die Verzeichnisstruktur von "%s" wird nicht unterstützt.
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=Tresor „%s“ wurde hinzugefügt.\nUm auf Inhalte zuzugreifen oder welche hinzuzufügen, musst du den Tresor entsperren. Du kannst ihn aber auch zu jedem späteren Zeitpunkt entsperren.
|
addvaultwizard.success.nextStepsInstructions=Tresor „%s“ wurde hinzugefügt.\nUm auf Inhalte zuzugreifen oder welche hinzuzufügen, musst du den Tresor entsperren. Du kannst ihn aber auch zu jedem späteren Zeitpunkt entsperren.
|
||||||
addvaultwizard.success.unlockNow=Jetzt entsperren
|
addvaultwizard.success.unlockNow=Jetzt entsperren
|
||||||
@@ -156,6 +157,8 @@ unlock.error.title=„%s“ konnte nicht entsperrt werden
|
|||||||
hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich
|
hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich
|
||||||
hub.noKeychain.description=Zum Entsperren von Hub-Tresoren wird ein Geräteschlüssel benötigt, der in einem Schlüsselbund gesichert ist. Um fortzufahren, aktiviere „%s“ und wähle in den Einstellungen einen Schlüsselbund.
|
hub.noKeychain.description=Zum Entsperren von Hub-Tresoren wird ein Geräteschlüssel benötigt, der in einem Schlüsselbund gesichert ist. Um fortzufahren, aktiviere „%s“ und wähle in den Einstellungen einen Schlüsselbund.
|
||||||
hub.noKeychain.openBtn=Einstellungen öffnen
|
hub.noKeychain.openBtn=Einstellungen öffnen
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Vertrauen
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Warten auf Authentifizierung …
|
hub.auth.message=Warten auf Authentifizierung …
|
||||||
hub.auth.description=Du solltest automatisch zur Anmeldeseite weitergeleitet werden.
|
hub.auth.description=Du solltest automatisch zur Anmeldeseite weitergeleitet werden.
|
||||||
@@ -187,6 +190,7 @@ hub.archived.description=Dieser Tresor wurde archiviert, daher ist ein Zugriff d
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Zugriff verweigert
|
hub.unauthorized.message=Zugriff verweigert
|
||||||
hub.unauthorized.description=Du bist nicht berechtigt, diesen Tresor zu öffnen. Wende dich an den Tresoreigentümer, um Zugriff zu erhalten.
|
hub.unauthorized.description=Du bist nicht berechtigt, diesen Tresor zu öffnen. Wende dich an den Tresoreigentümer, um Zugriff zu erhalten.
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Aktion erforderlich
|
hub.requireAccountInit.message=Aktion erforderlich
|
||||||
hub.requireAccountInit.description.0=Um fortzufahren, führe bitte die erforderlichen Schritte in deinem
|
hub.requireAccountInit.description.0=Um fortzufahren, führe bitte die erforderlichen Schritte in deinem
|
||||||
@@ -298,6 +302,7 @@ preferences.general.debugDirectory=Protokolldateien anzeigen
|
|||||||
preferences.general.autoStart=Cryptomator beim Systemstart starten
|
preferences.general.autoStart=Cryptomator beim Systemstart starten
|
||||||
preferences.general.keychainBackend=Passwörter speichern mit
|
preferences.general.keychainBackend=Passwörter speichern mit
|
||||||
preferences.general.quickAccessService=Entsperrte Tresore zum Schnellzugriff hinzufügen
|
preferences.general.quickAccessService=Entsperrte Tresore zum Schnellzugriff hinzufügen
|
||||||
|
preferences.general.resetTrustedHosts=Vertrauenswürdige Hosts zurücksetzen
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Benutzeroberfläche
|
preferences.interface=Benutzeroberfläche
|
||||||
preferences.interface.theme=Erscheinungsbild
|
preferences.interface.theme=Erscheinungsbild
|
||||||
@@ -701,4 +706,4 @@ eventView.entry.inUse.copyUserAndDevice=Benutzer- und Gerätenamen der Sperre ko
|
|||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
notification.inUse.action=Verwendungsstatus ignorieren
|
notification.inUse.action=Verwendungsstatus ignorieren
|
||||||
|
|||||||
@@ -154,6 +154,8 @@ unlock.error.title=Ξεκλείδωμα "%s" απέτυχε
|
|||||||
hub.noKeychain.message=Δεν είναι δυνατή η πρόσβαση στο κλειδί της συσκευής
|
hub.noKeychain.message=Δεν είναι δυνατή η πρόσβαση στο κλειδί της συσκευής
|
||||||
hub.noKeychain.description=Για να ξεκλειδώσετε τις κρύπτες Hub, απαιτείται ένα κλειδί συσκευής, το οποίο ασφαλίζεται με χρήση μπρελόκ. Για να συνεχίσετε, ενεργοποιήστε το "%s" και επιλέξτε ένα keychain στις προτιμήσεις.
|
hub.noKeychain.description=Για να ξεκλειδώσετε τις κρύπτες Hub, απαιτείται ένα κλειδί συσκευής, το οποίο ασφαλίζεται με χρήση μπρελόκ. Για να συνεχίσετε, ενεργοποιήστε το "%s" και επιλέξτε ένα keychain στις προτιμήσεις.
|
||||||
hub.noKeychain.openBtn=Άνοιγμα Προτιμήσεων
|
hub.noKeychain.openBtn=Άνοιγμα Προτιμήσεων
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Εμπιστευτείτε
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Αναμονή για επαλήθευση…
|
hub.auth.message=Αναμονή για επαλήθευση…
|
||||||
hub.auth.description=Θα πρέπει να ανακατευθυνθείτε αυτόματα στη σελίδα σύνδεσης.
|
hub.auth.description=Θα πρέπει να ανακατευθυνθείτε αυτόματα στη σελίδα σύνδεσης.
|
||||||
@@ -183,6 +185,7 @@ hub.registerFailed.description.deviceAlreadyExists=Αυτή η συσκευή ε
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Δεν επιτρέπεται η πρόσβαση
|
hub.unauthorized.message=Δεν επιτρέπεται η πρόσβαση
|
||||||
hub.unauthorized.description=Δεν είστε εξουσιοδοτημένοι να ανοίξετε αυτή την κρύπτη. Επικοινωνήστε με τον ιδιοκτήτη τς κρύπτης για να ζητήσετε πρόσβαση.
|
hub.unauthorized.description=Δεν είστε εξουσιοδοτημένοι να ανοίξετε αυτή την κρύπτη. Επικοινωνήστε με τον ιδιοκτήτη τς κρύπτης για να ζητήσετε πρόσβαση.
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Απαιτείται ενέργεια
|
hub.requireAccountInit.message=Απαιτείται ενέργεια
|
||||||
hub.requireAccountInit.description.0=Για να συνεχίσετε, παρακαλούμε ολοκληρώστε τα βήματα που απαιτούνται στο δικό σας
|
hub.requireAccountInit.description.0=Για να συνεχίσετε, παρακαλούμε ολοκληρώστε τα βήματα που απαιτούνται στο δικό σας
|
||||||
@@ -645,4 +648,4 @@ eventView.entry.inUse.showEncrypted=Εμφάνιση κρυπτογραφημέ
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ generic.button.print=Imprimir
|
|||||||
generic.button.remove=Eliminar
|
generic.button.remove=Eliminar
|
||||||
|
|
||||||
## Vault state
|
## Vault state
|
||||||
|
vault.state.locked=Bloqueada
|
||||||
|
vault.state.unlocked=Desbloqueada
|
||||||
|
vault.state.missing=Faltante
|
||||||
|
vault.state.migrationNeeded=Migración obligatoria
|
||||||
|
vault.state.processing=Procesando
|
||||||
vault.state.error=Error
|
vault.state.error=Error
|
||||||
|
|
||||||
# Error
|
# Error
|
||||||
@@ -104,6 +109,13 @@ addvaultwizard.existing.restore=…
|
|||||||
addvaultwizard.existing.chooseBtn=Elegir…
|
addvaultwizard.existing.chooseBtn=Elegir…
|
||||||
addvaultwizard.existing.filePickerTitle=Seleccionar archivo de bóveda
|
addvaultwizard.existing.filePickerTitle=Seleccionar archivo de bóveda
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Bóveda de Cryptomator
|
addvaultwizard.existing.filePickerMimeDesc=Bóveda de Cryptomator
|
||||||
|
addvaultwizard.existing.notAVault.title=No es una bóveda
|
||||||
|
addvaultwizard.existing.notAVault.message=La carpeta seleccionada no es una bóveda de Cryptomator
|
||||||
|
addvaultwizard.existing.notAVault.description.missingDataDir=Falta el subdirectorio "d" necesario dentro de "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.dataNotADirectory=La entrada "d" dentro de "%s" no es un directorio.
|
||||||
|
addvaultwizard.existing.notAVault.description.missingVaultConfig=Falta el archivo "vault.cryptomator" necesario dentro de "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=El archivo "vault.cryptomator" dentro de "%s" no se puede leer debido a la falta de permisos de acceso.
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure=La estructura de directorios de "%s" no está soportada.
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=Bóveda "%s" añadida.\nSe necesita desbloquear esta bóveda para acceder o añadir contenido. Alternativamente se \n puede desbloquear en otro momento.
|
addvaultwizard.success.nextStepsInstructions=Bóveda "%s" añadida.\nSe necesita desbloquear esta bóveda para acceder o añadir contenido. Alternativamente se \n puede desbloquear en otro momento.
|
||||||
addvaultwizard.success.unlockNow=Desbloquear ahora
|
addvaultwizard.success.unlockNow=Desbloquear ahora
|
||||||
@@ -156,6 +168,12 @@ unlock.error.title=Error al desbloquear "%s"
|
|||||||
hub.noKeychain.message=No se puede acceder a la clave del dispositivo
|
hub.noKeychain.message=No se puede acceder a la clave del dispositivo
|
||||||
hub.noKeychain.description=Para desbloquear las bóvedas de Hub, se requiere una clave de dispositivo que se asegura con un llavero. Para continuar, habilite "%s" y seleccione un llavero en las preferencias.
|
hub.noKeychain.description=Para desbloquear las bóvedas de Hub, se requiere una clave de dispositivo que se asegura con un llavero. Para continuar, habilite "%s" y seleccione un llavero en las preferencias.
|
||||||
hub.noKeychain.openBtn=Abrir preferencias
|
hub.noKeychain.openBtn=Abrir preferencias
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.message.check=Comprobando configuración…
|
||||||
|
hub.checkHostTrust.message.ask=¿Confiar en este host?
|
||||||
|
hub.checkHostTrust.message.ask.plural=¿Confiar en estos hosts?
|
||||||
|
hub.checkHostTrust.trustBtn=Confiar
|
||||||
|
hub.checkHostTrust.denyBtn=Denegar
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Esperando la autenticación…
|
hub.auth.message=Esperando la autenticación…
|
||||||
hub.auth.description=Debería ser redirigido automáticamente a la página de inicio de sesión.
|
hub.auth.description=Debería ser redirigido automáticamente a la página de inicio de sesión.
|
||||||
@@ -182,9 +200,14 @@ hub.registerFailed.message=El registro del dispositivo ha fallado
|
|||||||
hub.registerFailed.description.generic=Ha ocurrido un error al intentar registrarse. Para más detalles, consulte el registro de la aplicación.
|
hub.registerFailed.description.generic=Ha ocurrido un error al intentar registrarse. Para más detalles, consulte el registro de la aplicación.
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Este dispositivo ya se ha registrado para otro usuario. Intente cambiar la cuenta de usuario o utilice un dispositivo diferente.
|
hub.registerFailed.description.deviceAlreadyExists=Este dispositivo ya se ha registrado para otro usuario. Intente cambiar la cuenta de usuario o utilice un dispositivo diferente.
|
||||||
### Archived
|
### Archived
|
||||||
|
hub.archived.message=Bóveda archivada
|
||||||
|
hub.archived.description=Esta bóveda ha sido archivada y ya no es accesible. Póngase en contacto con el propietario de la bóveda.
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Acceso denegado
|
hub.unauthorized.message=Acceso denegado
|
||||||
hub.unauthorized.description=No tiene autorización para abrir esta bóveda. Contacta al propietario de la bóveda para solicitar acceso.
|
hub.unauthorized.description=No tiene autorización para abrir esta bóveda. Contacta al propietario de la bóveda para solicitar acceso.
|
||||||
|
### Untrusted Host
|
||||||
|
hub.untrustedHost.message=Host no confiable
|
||||||
|
hub.untrustedHost.description=La conexión al Hub fue bloqueada por su seguridad. Si cree que el Hub es seguro, póngase en contacto con la administración de Hub o vuelva a intentarlo.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Acción requerida
|
hub.requireAccountInit.message=Acción requerida
|
||||||
hub.requireAccountInit.description.0=Para continuar, por favor complete los pasos necesarios en su
|
hub.requireAccountInit.description.0=Para continuar, por favor complete los pasos necesarios en su
|
||||||
@@ -298,6 +321,7 @@ preferences.general.debugDirectory=Revelar archivos de registro
|
|||||||
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
|
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
|
||||||
preferences.general.keychainBackend=Guardar contraseñas con
|
preferences.general.keychainBackend=Guardar contraseñas con
|
||||||
preferences.general.quickAccessService=Añadir bóvedas desbloqueadas al área de acceso rápido
|
preferences.general.quickAccessService=Añadir bóvedas desbloqueadas al área de acceso rápido
|
||||||
|
preferences.general.resetTrustedHosts=Restablecer hosts de confianza
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interfaz
|
preferences.interface=Interfaz
|
||||||
preferences.interface.theme=Apariencia
|
preferences.interface.theme=Apariencia
|
||||||
@@ -403,6 +427,7 @@ stats.access.total=Accesos totales: %d
|
|||||||
# Main Window
|
# Main Window
|
||||||
## Vault List
|
## Vault List
|
||||||
main.vaultlist=Bóvedas
|
main.vaultlist=Bóvedas
|
||||||
|
main.vaultlist.listEntry=Bóveda %s (%s)
|
||||||
main.vaultlist.emptyList.onboardingInstruction=Haga clic aquí para añadir una bóveda
|
main.vaultlist.emptyList.onboardingInstruction=Haga clic aquí para añadir una bóveda
|
||||||
main.vaultlist.contextMenu.remove=Eliminar…
|
main.vaultlist.contextMenu.remove=Eliminar…
|
||||||
main.vaultlist.contextMenu.lock=Bloquear
|
main.vaultlist.contextMenu.lock=Bloquear
|
||||||
@@ -420,9 +445,11 @@ main.vaultlist.showPreferencesButton.tooltip=Mostrar preferencias
|
|||||||
##Notification
|
##Notification
|
||||||
main.notification.updateAvailable=Existen actualizaciones disponibles.
|
main.notification.updateAvailable=Existen actualizaciones disponibles.
|
||||||
main.notification.support=Soporte de Cryptomator.
|
main.notification.support=Soporte de Cryptomator.
|
||||||
|
main.notification.closeButton.tooltip=Cerrar barra de información
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
main.vaultDetail.welcomeOnboarding=Gracias por elegir Cryptomator para proteger sus archivos. En caso de necesitar ayuda, revise nuestras guías:
|
main.vaultDetail.welcomeOnboarding=Gracias por elegir Cryptomator para proteger sus archivos. En caso de necesitar ayuda, revise nuestras guías:
|
||||||
|
main.vaultDetail.storageLocation=Ubicación de almacenamiento en bóveda
|
||||||
### Locked
|
### Locked
|
||||||
main.vaultDetail.lockedStatus=BLOQUEADA
|
main.vaultDetail.lockedStatus=BLOQUEADA
|
||||||
main.vaultDetail.unlockBtn=Desbloquear…
|
main.vaultDetail.unlockBtn=Desbloquear…
|
||||||
@@ -511,6 +538,7 @@ vaultOptions.masterkey.forgetSavedPasswordBtn=Olvidar contraseña guardada
|
|||||||
vaultOptions.masterkey.recoveryKeyExplanation=Una clave de recuperación es el único medio para restaurar el acceso a una bóveda si pierde su contraseña.
|
vaultOptions.masterkey.recoveryKeyExplanation=Una clave de recuperación es el único medio para restaurar el acceso a una bóveda si pierde su contraseña.
|
||||||
vaultOptions.masterkey.showRecoveryKeyBtn=Mostrar clave de recuperación
|
vaultOptions.masterkey.showRecoveryKeyBtn=Mostrar clave de recuperación
|
||||||
vaultOptions.masterkey.recoverPasswordBtn=Restablecer contraseña
|
vaultOptions.masterkey.recoverPasswordBtn=Restablecer contraseña
|
||||||
|
vaultOptions.masterkey.missingMasterkeyFile=Estas opciones sólo están disponibles si el archivo masterkey está presente en el directorio de la bóveda.
|
||||||
## Hub
|
## Hub
|
||||||
vaultOptions.hub=Recuperación
|
vaultOptions.hub=Recuperación
|
||||||
vaultOptions.hub.convertInfo=Puede utilizar la clave de recuperación para convertir esta bóveda de Hub en una bóveda con contraseña en una emergencia.
|
vaultOptions.hub.convertInfo=Puede utilizar la clave de recuperación para convertir esta bóveda de Hub en una bóveda con contraseña en una emergencia.
|
||||||
@@ -697,6 +725,7 @@ eventView.entry.brokenFileNode.copyDecrypted=Copiar ruta descifrada
|
|||||||
eventView.entry.inUse.message=Fichero en uso
|
eventView.entry.inUse.message=Fichero en uso
|
||||||
eventView.entry.inUse.showDecrypted=Mostrar archivo descifrado
|
eventView.entry.inUse.showDecrypted=Mostrar archivo descifrado
|
||||||
eventView.entry.inUse.showEncrypted=Mostrar archivo cifrado
|
eventView.entry.inUse.showEncrypted=Mostrar archivo cifrado
|
||||||
|
eventView.entry.inUse.copyUserAndDevice=Copiar nombre de usuario y dispositivo de bloqueo
|
||||||
eventView.entry.inUse.ignoreLock=Ignorar el estado de uso
|
eventView.entry.inUse.ignoreLock=Ignorar el estado de uso
|
||||||
|
|
||||||
|
|
||||||
@@ -704,4 +733,4 @@ eventView.entry.inUse.ignoreLock=Ignorar el estado de uso
|
|||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
notification.inUse.message=El archivo está en uso en otro dispositivo
|
notification.inUse.message=El archivo está en uso en otro dispositivo
|
||||||
notification.inUse.description=El archivo está abierto por %s en %s. Solicítale que cierre el archivo y deje que finalice la sincronización. Puede ignorar el estado para abrirlo ahora, pero esto puede causar conflictos o sobrescribir cambios más recientes.
|
notification.inUse.description=El archivo está abierto por %s en %s. Solicítale que cierre el archivo y deje que finalice la sincronización. Puede ignorar el estado para abrirlo ahora, pero esto puede causar conflictos o sobrescribir cambios más recientes.
|
||||||
notification.inUse.action=Ignorar el Estado de Uso
|
notification.inUse.action=Ignorar el Estado de Uso
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ unlock.success.revealBtn=نمایش درایو
|
|||||||
## Failure
|
## Failure
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.openBtn=باز کردن تنظیمات
|
hub.noKeychain.openBtn=باز کردن تنظیمات
|
||||||
|
### Check Host Authenticity
|
||||||
### Waiting
|
### Waiting
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
@@ -124,6 +125,7 @@ hub.registerSuccess.unlockBtn=بازکردن قفل
|
|||||||
### Registration Failed
|
### Registration Failed
|
||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
|
|
||||||
@@ -256,4 +258,4 @@ dokanySupportEnd.preferencesBtn=باز کردن تنظیمات
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ unlock.error.title="%s" avaaminen epäonnistui
|
|||||||
hub.noKeychain.message=Laitteen avainta ei löytynyt
|
hub.noKeychain.message=Laitteen avainta ei löytynyt
|
||||||
hub.noKeychain.description=Hub-holvien purkamiseksi tarvitaan laiteavain joka on suojattu avainrenkaalla. Jatkaaksesi, kytke “%s” päälle ja valitse avainrengas asetuksista.
|
hub.noKeychain.description=Hub-holvien purkamiseksi tarvitaan laiteavain joka on suojattu avainrenkaalla. Jatkaaksesi, kytke “%s” päälle ja valitse avainrengas asetuksista.
|
||||||
hub.noKeychain.openBtn=Avaa asetukset
|
hub.noKeychain.openBtn=Avaa asetukset
|
||||||
|
### Check Host Authenticity
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Odotetaan todennusta…
|
hub.auth.message=Odotetaan todennusta…
|
||||||
hub.auth.description=Pitäisi ohjata sinut automaattisesti uudelleen kirjautumissivulle.
|
hub.auth.description=Pitäisi ohjata sinut automaattisesti uudelleen kirjautumissivulle.
|
||||||
@@ -185,6 +186,7 @@ hub.registerFailed.description.deviceAlreadyExists=Tämä laite on jo rekisterö
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Pääsy estetty
|
hub.unauthorized.message=Pääsy estetty
|
||||||
hub.unauthorized.description=Sinulla ei ole oikeutta avata tätä holvia. Ota yhteyttä holvin omistajaan pyytääksesi pääsyä.
|
hub.unauthorized.description=Sinulla ei ole oikeutta avata tätä holvia. Ota yhteyttä holvin omistajaan pyytääksesi pääsyä.
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Toimia vaaditaan
|
hub.requireAccountInit.message=Toimia vaaditaan
|
||||||
hub.requireAccountInit.description.0=Jatkaaksesi, ole hyvä ja suorita tarvittavat toimenpiteet
|
hub.requireAccountInit.description.0=Jatkaaksesi, ole hyvä ja suorita tarvittavat toimenpiteet
|
||||||
@@ -698,4 +700,4 @@ eventView.entry.inUse.showEncrypted=Näytä salattu tiedosto
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -154,6 +154,8 @@ unlock.error.title=Hindi mabuksan ang "%s"
|
|||||||
hub.noKeychain.message=Hindi ma-access ang key ng device
|
hub.noKeychain.message=Hindi ma-access ang key ng device
|
||||||
hub.noKeychain.description=Para ma-unlock ang mga Hub vault, kailangan ng device key, na sini-secure gamit ang keychain. Upang magpatuloy, paganahin ang “%s” at pumili ng keychain sa mga kagustuhan.
|
hub.noKeychain.description=Para ma-unlock ang mga Hub vault, kailangan ng device key, na sini-secure gamit ang keychain. Upang magpatuloy, paganahin ang “%s” at pumili ng keychain sa mga kagustuhan.
|
||||||
hub.noKeychain.openBtn=Buksan ang Mga Kagustuhan
|
hub.noKeychain.openBtn=Buksan ang Mga Kagustuhan
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Magtiwala
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Naghihintay para sa pagpapatunay…
|
hub.auth.message=Naghihintay para sa pagpapatunay…
|
||||||
hub.auth.description=Dapat kang awtomatikong mai-redirect sa pahina ng pag-login.
|
hub.auth.description=Dapat kang awtomatikong mai-redirect sa pahina ng pag-login.
|
||||||
@@ -182,6 +184,7 @@ hub.registerFailed.description.deviceAlreadyExists=Ang device na ito ay registra
|
|||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Walang pahintulot
|
hub.unauthorized.message=Walang pahintulot
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Kinakailangan ang pagkilos
|
hub.requireAccountInit.message=Kinakailangan ang pagkilos
|
||||||
hub.requireAccountInit.description.0=Upang magpatuloy, mangyaring kumpletuhin ang mga hakbang na kinakailangan sa iyong
|
hub.requireAccountInit.description.0=Upang magpatuloy, mangyaring kumpletuhin ang mga hakbang na kinakailangan sa iyong
|
||||||
@@ -598,4 +601,4 @@ shareVault.hub.openHub=Buksan ang Cryptomator Hub
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -109,6 +109,13 @@ addvaultwizard.existing.restore=Restaurer…
|
|||||||
addvaultwizard.existing.chooseBtn=Choisir…
|
addvaultwizard.existing.chooseBtn=Choisir…
|
||||||
addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier correspondant au volume chiffré
|
addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier correspondant au volume chiffré
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Coffre-fort Cryptomator
|
addvaultwizard.existing.filePickerMimeDesc=Coffre-fort Cryptomator
|
||||||
|
addvaultwizard.existing.notAVault.title=Pas un coffre
|
||||||
|
addvaultwizard.existing.notAVault.message=Le dossier sélectionné n’est pas un coffre Cryptomator
|
||||||
|
addvaultwizard.existing.notAVault.description.missingDataDir=Le sous-répertoire « d » requis est manquant dans «%s».
|
||||||
|
addvaultwizard.existing.notAVault.description.dataNotADirectory=L'entrée « d » dans « %s » n'est pas un répertoire.
|
||||||
|
addvaultwizard.existing.notAVault.description.missingVaultConfig=Le fichier « vault.cryptomator » requis est manquant dans « %s ».
|
||||||
|
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=Le fichier « vault.cryptomator » dans « %s » ne peut pas être lu en raison de droits d’accès insuffisants.
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure=La structure de répertoire de « %s » n'est pas prise en charge.
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=Coffre “%s” ajouté.\nIl faudra déverrouiller ce coffre afin d’y accéder ou d’y ajouter du contenu. Cette action peut être réalisée ultérieurement.
|
addvaultwizard.success.nextStepsInstructions=Coffre “%s” ajouté.\nIl faudra déverrouiller ce coffre afin d’y accéder ou d’y ajouter du contenu. Cette action peut être réalisée ultérieurement.
|
||||||
addvaultwizard.success.unlockNow=Déverrouiller
|
addvaultwizard.success.unlockNow=Déverrouiller
|
||||||
@@ -161,6 +168,12 @@ unlock.error.title=Échec du déverrouillage de "%s"
|
|||||||
hub.noKeychain.message=Impossible d'accéder à la clé du périphérique
|
hub.noKeychain.message=Impossible d'accéder à la clé du périphérique
|
||||||
hub.noKeychain.description=Le déverrouillage des coffres Hub nécessite une clé de périphérique sécurisée à l'aide d'un trousseau. Pour continuer, activez « %s » et sélectionnez un trousseau dans les préférences.
|
hub.noKeychain.description=Le déverrouillage des coffres Hub nécessite une clé de périphérique sécurisée à l'aide d'un trousseau. Pour continuer, activez « %s » et sélectionnez un trousseau dans les préférences.
|
||||||
hub.noKeychain.openBtn=Ouvrir les préférences
|
hub.noKeychain.openBtn=Ouvrir les préférences
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.message.check=Vérification de configuration…
|
||||||
|
hub.checkHostTrust.message.ask=Faire confiance à cet hôte ?
|
||||||
|
hub.checkHostTrust.message.ask.plural=Faire confiance à ces hôtes ?
|
||||||
|
hub.checkHostTrust.trustBtn=Approuver
|
||||||
|
hub.checkHostTrust.denyBtn=Refuser
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Authentification en cours…
|
hub.auth.message=Authentification en cours…
|
||||||
hub.auth.description=Vous devriez automatiquement être redirigé vers la page de connexion.
|
hub.auth.description=Vous devriez automatiquement être redirigé vers la page de connexion.
|
||||||
@@ -192,6 +205,9 @@ hub.archived.description=Ce coffre a été archivé et n'est plus accessible. Ve
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Accès refusé
|
hub.unauthorized.message=Accès refusé
|
||||||
hub.unauthorized.description=Vous n'êtes pas autorisé à ouvrir ce coffre. Contactez le propriétaire du coffre pour en demander l'accès.
|
hub.unauthorized.description=Vous n'êtes pas autorisé à ouvrir ce coffre. Contactez le propriétaire du coffre pour en demander l'accès.
|
||||||
|
### Untrusted Host
|
||||||
|
hub.untrustedHost.message=Hôte non fiable
|
||||||
|
hub.untrustedHost.description=La connexion à Hub a été bloquée pour votre sécurité. Si vous pensez que l'hôte Hub est en sécurité, contactez son administrateur ou réessayez.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Action requise
|
hub.requireAccountInit.message=Action requise
|
||||||
hub.requireAccountInit.description.0=Pour continuer, veuillez compléter les étapes requises
|
hub.requireAccountInit.description.0=Pour continuer, veuillez compléter les étapes requises
|
||||||
@@ -300,11 +316,12 @@ preferences.title=Préférences
|
|||||||
preferences.general=Général
|
preferences.general=Général
|
||||||
preferences.general.startHidden=Démarrer Cryptomator en mode caché
|
preferences.general.startHidden=Démarrer Cryptomator en mode caché
|
||||||
preferences.general.autoCloseVaults=Verrouiller les coffres sans confirmation lors de la fermeture de l'application
|
preferences.general.autoCloseVaults=Verrouiller les coffres sans confirmation lors de la fermeture de l'application
|
||||||
preferences.general.debugLogging=Activer les logs debug
|
preferences.general.debugLogging=Activer les logs de débogage
|
||||||
preferences.general.debugDirectory=Afficher le journal
|
preferences.general.debugDirectory=Afficher les logs
|
||||||
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
|
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
|
||||||
preferences.general.keychainBackend=Stocker les mots de passe avec
|
preferences.general.keychainBackend=Stocker les mots de passe avec
|
||||||
preferences.general.quickAccessService=Ajouter les coffres déverrouillés à la zone d'accès rapide
|
preferences.general.quickAccessService=Ajouter les coffres déverrouillés à la zone d'accès rapide
|
||||||
|
preferences.general.resetTrustedHosts=Réinitialiser les hôtes de confiance
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interface
|
preferences.interface=Interface
|
||||||
preferences.interface.theme=Apparence
|
preferences.interface.theme=Apparence
|
||||||
@@ -369,7 +386,7 @@ removeCert.description=Les fonctionnalités principales de Cryptomator ne sont p
|
|||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
## About
|
## About
|
||||||
preferences.about=A propos
|
preferences.about=À propos
|
||||||
preferences.about.thirdPartyLicenses=Licences tierces
|
preferences.about.thirdPartyLicenses=Licences tierces
|
||||||
|
|
||||||
# Vault Statistics
|
# Vault Statistics
|
||||||
@@ -428,7 +445,7 @@ main.vaultlist.showPreferencesButton.tooltip=Afficher les préférences
|
|||||||
##Notification
|
##Notification
|
||||||
main.notification.updateAvailable=Mise à jour disponible.
|
main.notification.updateAvailable=Mise à jour disponible.
|
||||||
main.notification.support=Soutenir Cryptomator.
|
main.notification.support=Soutenir Cryptomator.
|
||||||
main.notification.closeButton.tooltip="Fermer la barre d'information"
|
main.notification.closeButton.tooltip=Fermer la barre d'information
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomator pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage :
|
main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomator pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage :
|
||||||
@@ -716,4 +733,4 @@ eventView.entry.inUse.ignoreLock=Ignorer le statut d’utilisation
|
|||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
notification.inUse.message=Le fichier est utilisé sur un autre appareil
|
notification.inUse.message=Le fichier est utilisé sur un autre appareil
|
||||||
notification.inUse.description=Le fichier est ouvert par %s sur %s. Demandez-lui à fermer le fichier et laissez la synchronisation se terminer. Vous pouvez ignorer le statut pour l’ouvrir maintenant, mais cela pourrait entraîner des conflits ou écraser des modifications récentes.
|
notification.inUse.description=Le fichier est ouvert par %s sur %s. Demandez-lui à fermer le fichier et laissez la synchronisation se terminer. Vous pouvez ignorer le statut pour l’ouvrir maintenant, mais cela pourrait entraîner des conflits ou écraser des modifications récentes.
|
||||||
notification.inUse.action=Ignorer le statut d’utilisation
|
notification.inUse.action=Ignorer le statut d’utilisation
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ error.message=Produciuse un erro
|
|||||||
## Success
|
## Success
|
||||||
## Failure
|
## Failure
|
||||||
## Hub
|
## Hub
|
||||||
|
### Check Host Authenticity
|
||||||
### Waiting
|
### Waiting
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
@@ -54,6 +55,7 @@ error.message=Produciuse un erro
|
|||||||
### Registration Failed
|
### Registration Failed
|
||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
|
|
||||||
@@ -169,4 +171,4 @@ lock.forced.retryBtn=Tentar de novo
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -150,6 +150,8 @@ unlock.error.customPath.description.notEmptyDir=הנתיב המותאם "%s" א
|
|||||||
hub.noKeychain.message=לא ניתן לגשת למפתח המכשיר
|
hub.noKeychain.message=לא ניתן לגשת למפתח המכשיר
|
||||||
hub.noKeychain.description=כדאי לשחרר כספות האב נדרש מפתח מכשיר שיאובטח בצרור מפתחות. כדאי להמשיך, אפשר ״%s״ ובחר את צרור המפתחות בהעדפות.
|
hub.noKeychain.description=כדאי לשחרר כספות האב נדרש מפתח מכשיר שיאובטח בצרור מפתחות. כדאי להמשיך, אפשר ״%s״ ובחר את צרור המפתחות בהעדפות.
|
||||||
hub.noKeychain.openBtn=פתח העדפות
|
hub.noKeychain.openBtn=פתח העדפות
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=סמוך
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=ממתין לאימות…
|
hub.auth.message=ממתין לאימות…
|
||||||
hub.auth.description=אתה אמור להיות מופנה אוטומטית למסך ההזדהות.
|
hub.auth.description=אתה אמור להיות מופנה אוטומטית למסך ההזדהות.
|
||||||
@@ -166,6 +168,7 @@ hub.registerSuccess.unlockBtn=בטל נעילה
|
|||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=הגישה נדחתה
|
hub.unauthorized.message=הגישה נדחתה
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=רישיון האב לא תקף
|
hub.invalidLicense.message=רישיון האב לא תקף
|
||||||
@@ -531,4 +534,4 @@ dokanySupportEnd.preferencesBtn=פתח העדפות
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -142,6 +142,8 @@ unlock.error.title="%s" तिजोरी खोलना विफल रह
|
|||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=उपकरण के कुंजी तक पहुंचने में असमर्थ
|
hub.noKeychain.message=उपकरण के कुंजी तक पहुंचने में असमर्थ
|
||||||
hub.noKeychain.openBtn=प्राथमिकताएँ खोलें
|
hub.noKeychain.openBtn=प्राथमिकताएँ खोलें
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=भरोसा करे
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=प्रमाणन के लिए इंतज़ार कर रहे...
|
hub.auth.message=प्रमाणन के लिए इंतज़ार कर रहे...
|
||||||
hub.auth.description=आपको स्वचालित रूप से लॉगिन पृष्ठ पर पुनः निर्देशित किया जाना चाहिए।
|
hub.auth.description=आपको स्वचालित रूप से लॉगिन पृष्ठ पर पुनः निर्देशित किया जाना चाहिए।
|
||||||
@@ -158,6 +160,7 @@ hub.registerSuccess.unlockBtn=अनलॉक करें
|
|||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=प्रवेश अस्वीकृत
|
hub.unauthorized.message=प्रवेश अस्वीकृत
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=कार्रवाई आवश्यक है
|
hub.requireAccountInit.message=कार्रवाई आवश्यक है
|
||||||
hub.requireAccountInit.description.0=आगे बढ़ने के लिए, कृपया अपने आवश्यक चरणों को पूरा करें
|
hub.requireAccountInit.description.0=आगे बढ़ने के लिए, कृपया अपने आवश्यक चरणों को पूरा करें
|
||||||
@@ -354,4 +357,4 @@ dokanySupportEnd.preferencesBtn=प्राथमिकताएँ खोल
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -116,6 +116,8 @@ unlock.success.rememberChoice=Zapamti izbor, ne prikazuj ovo više
|
|||||||
unlock.success.revealBtn=Otkrij pogon
|
unlock.success.revealBtn=Otkrij pogon
|
||||||
## Failure
|
## Failure
|
||||||
## Hub
|
## Hub
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Vjeruj
|
||||||
### Waiting
|
### Waiting
|
||||||
### Receive Key
|
### Receive Key
|
||||||
### Register Device
|
### Register Device
|
||||||
@@ -125,6 +127,7 @@ hub.registerSuccess.unlockBtn=Otključaj
|
|||||||
### Registration Failed
|
### Registration Failed
|
||||||
### Archived
|
### Archived
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
|
|
||||||
@@ -421,4 +424,4 @@ quit.lockAndQuitBtn=Zaključaj i napusti
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -18,11 +18,16 @@ generic.button.print=Nyomtatás
|
|||||||
generic.button.remove=Eltávolítás
|
generic.button.remove=Eltávolítás
|
||||||
|
|
||||||
## Vault state
|
## Vault state
|
||||||
|
vault.state.locked=Zárolva
|
||||||
|
vault.state.unlocked=Feloldva
|
||||||
|
vault.state.missing=Hiányzó
|
||||||
|
vault.state.migrationNeeded=Migráció szükséges
|
||||||
|
vault.state.processing=Feldolgozás
|
||||||
vault.state.error=Hiba
|
vault.state.error=Hiba
|
||||||
|
|
||||||
# Error
|
# Error
|
||||||
error.message=Hiba: %s
|
error.message=Hiba: %s
|
||||||
error.description=Upsz! A Cryptomator nem számított rá, hogy ez megtörténik. Keressen meglévő megoldást erre a hibára. Vagy ha még nem jelentették, bátran tegye ezt meg.
|
error.description=A Cryptomator nem számított rá, hogy ez megtörténik. Keressen meglévő megoldást erre a hibára. Vagy ha még nem jelentették, bátran tegye ezt meg.
|
||||||
error.hyperlink.lookup=Hiba okának keresése
|
error.hyperlink.lookup=Hiba okának keresése
|
||||||
error.hyperlink.report=Hiba jelentése
|
error.hyperlink.report=Hiba jelentése
|
||||||
error.technicalDetails=Részletek:
|
error.technicalDetails=Részletek:
|
||||||
@@ -33,7 +38,7 @@ error.dismiss=Elvet
|
|||||||
error.lookUpSolution=Megoldás keresése
|
error.lookUpSolution=Megoldás keresése
|
||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
defaults.vault.vaultName=Széf
|
defaults.vault.vaultName=Titkosított tároló
|
||||||
|
|
||||||
# Tray Menu
|
# Tray Menu
|
||||||
traymenu.showMainWindow=Megmutatás
|
traymenu.showMainWindow=Megmutatás
|
||||||
@@ -45,30 +50,30 @@ traymenu.vault.lock=Zárolás
|
|||||||
traymenu.vault.reveal=Megmutatás
|
traymenu.vault.reveal=Megmutatás
|
||||||
|
|
||||||
# Add Vault Wizard
|
# Add Vault Wizard
|
||||||
addvaultwizard.title=Széf hozzáadása
|
addvaultwizard.title=Titkosított tároló hozzáadása
|
||||||
## New
|
## New
|
||||||
addvaultwizard.new.title=Széf hozzáadása
|
addvaultwizard.new.title=Titkosított tároló hozzáadása
|
||||||
### Name
|
### Name
|
||||||
addvaultwizard.new.nameInstruction=Válasszon egy nevet az új széf számára
|
addvaultwizard.new.nameInstruction=Válasszon egy nevet a tároló számára
|
||||||
addvaultwizard.new.namePrompt=A széf neve
|
addvaultwizard.new.namePrompt=Titkosított tároló neve
|
||||||
### Location
|
### Location
|
||||||
addvaultwizard.new.locationInstruction=Hova mentse a Cryptomator a széf titkosított fájljait?
|
addvaultwizard.new.locationInstruction=Hova mentse a tároló titkosított fájljait?
|
||||||
addvaultwizard.new.locationLoading=Helyi fájlrendszer ellenőrzése alapértelmezett felhő tárolási könyvtárakra…
|
addvaultwizard.new.locationLoading=Helyi fájlrendszer ellenőrzése alapértelmezett felhő tárolási könyvtárakra…
|
||||||
addvaultwizard.new.locationLabel=Tárolási hely
|
addvaultwizard.new.locationLabel=Tárolási hely
|
||||||
addvaultwizard.new.locationPrompt=…
|
addvaultwizard.new.locationPrompt=…
|
||||||
addvaultwizard.new.directoryPickerLabel=Egyedi hely
|
addvaultwizard.new.directoryPickerLabel=Egyedi hely
|
||||||
addvaultwizard.new.directoryPickerButton=Választás…
|
addvaultwizard.new.directoryPickerButton=Választás…
|
||||||
addvaultwizard.new.directoryPickerTitle=Könyvtár kiválasztása
|
addvaultwizard.new.directoryPickerTitle=Könyvtár kiválasztása
|
||||||
addvaultwizard.new.fileAlreadyExists=Már létezik fájl/könyvtár ezzel a trezornévvel
|
addvaultwizard.new.fileAlreadyExists=Már létezik fájl/könyvtár ezzel a tárolónévvel
|
||||||
addvaultwizard.new.locationDoesNotExist=A megadott elérési úton lévő könyvtár nem létezik, vagy nem érhető el
|
addvaultwizard.new.locationDoesNotExist=A megadott elérési úton lévő könyvtár nem létezik, vagy nem érhető el
|
||||||
addvaultwizard.new.locationIsNotWritable=Nincs írási hozzáférés a megadott elérési úthoz
|
addvaultwizard.new.locationIsNotWritable=Nincs írási hozzáférés a megadott elérési úthoz
|
||||||
addvaultwizard.new.locationIsOk=Megfelelő hely a trezornak
|
addvaultwizard.new.locationIsOk=Megfelelő hely a titkosított tárolónak
|
||||||
addvaultwizard.new.invalidName=Érvénytelen vault név
|
addvaultwizard.new.invalidName=Érvénytelen tárolónév
|
||||||
addvaultwizard.new.validName=Érvényes vault név
|
addvaultwizard.new.validName=Érvényes tárolónév
|
||||||
addvaultwizard.new.validCharacters.message=A vault neve a következő karaktereket tartalmazhatja:
|
addvaultwizard.new.validCharacters.message=A titkosított tároló neve a következő karaktereket tartalmazhatja:
|
||||||
addvaultwizard.new.validCharacters.chars=Szókarakterek (pl. a, ж vagy 수)
|
addvaultwizard.new.validCharacters.chars=Szókarakterek (pl. a, ж vagy 수)
|
||||||
addvaultwizard.new.validCharacters.numbers=Számok
|
addvaultwizard.new.validCharacters.numbers=Számok
|
||||||
addvaultwizard.new.validCharacters.dashes=Kötőjel (%s) vagy alulvonás (%s)
|
addvaultwizard.new.validCharacters.dashes=Kötőjel (%s) vagy alsóvonás (%s)
|
||||||
### Expert Settings
|
### Expert Settings
|
||||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Haladó beállítások engedélyezése
|
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Haladó beállítások engedélyezése
|
||||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Írjon be egy értéket 36 és 220 között (alapértelmezett: 220)
|
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Írjon be egy értéket 36 és 220 között (alapértelmezett: 220)
|
||||||
@@ -76,41 +81,49 @@ addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=További informác
|
|||||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=A kódolt fájlnevek maximális hosszúsága
|
addvaultwizard.new.expertSettings.shorteningThreshold.title=A kódolt fájlnevek maximális hosszúsága
|
||||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Érvényes
|
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Érvényes
|
||||||
### Password
|
### Password
|
||||||
addvaultwizard.new.createVaultBtn=Új széf létrehozása
|
addvaultwizard.new.createVaultBtn=Új titkosított tároló létrehozása
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice=Nem fog tudni hozzáférni az adataihoz a jelszó nélkül. Akar egy visszaállítási kulcsot arra az esetre, ha elveszíti a jelszavát?
|
addvaultwizard.new.generateRecoveryKeyChoice=Nem fog tudni hozzáférni az adataihoz a jelszó nélkül. Akar egy visszaállítási kulcsot arra az esetre, ha elveszíti a jelszavát?
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice.yes=Igen kérem, jobb félni, mint megijedni.
|
addvaultwizard.new.generateRecoveryKeyChoice.yes=Igen kérem, jobb félni, mint megijedni
|
||||||
addvaultwizard.new.generateRecoveryKeyChoice.no=Nem köszönöm, nem fogom elveszíteni a jelszavam.
|
addvaultwizard.new.generateRecoveryKeyChoice.no=Nem köszönöm, nem fogom elveszíteni a jelszavam
|
||||||
### Information
|
### Information
|
||||||
addvault.new.readme.storageLocation.fileName=FONTOS.rtf
|
addvault.new.readme.storageLocation.fileName=FONTOS.rtf
|
||||||
addvault.new.readme.storageLocation.1=⚠️ SZÉF FÁJLOK ⚠️
|
addvault.new.readme.storageLocation.1=⚠️ TITKOSÍTOTT FÁJLOK ⚠️
|
||||||
addvault.new.readme.storageLocation.2=Ez a széfjének a tárolási helye.
|
addvault.new.readme.storageLocation.2=Ez a titkosított tárolójának helye.
|
||||||
addvault.new.readme.storageLocation.3=NE
|
addvault.new.readme.storageLocation.3=NE
|
||||||
addvault.new.readme.storageLocation.4=• ne módosítson semmilyen fájlt ebbe a könyvtárba
|
addvault.new.readme.storageLocation.4=• ne módosítson semmilyen fájlt ebben a könyvtárba
|
||||||
addvault.new.readme.storageLocation.5=• ne tegyen titkosítani való fájlokat ebbe a könyvtárba
|
addvault.new.readme.storageLocation.5=• ne tegyen titkosítani való fájlokat ebbe a könyvtárba.
|
||||||
addvault.new.readme.storageLocation.6=Ha fájlokat akr titkosítani és a széf tartalmát akarja szerkeszteni akkor tegye a következőt:
|
addvault.new.readme.storageLocation.6=Ha fájlokat akar titkosítani és a tároló tartalmát akarja szerkeszteni akkor tegye a következőt:
|
||||||
addvault.new.readme.storageLocation.7=1. Adja hozzá a széfet a Cryptomator-hoz.
|
addvault.new.readme.storageLocation.7=1. Adja hozzá a tárolót a Cryptomator felületén.
|
||||||
addvault.new.readme.storageLocation.8=2. Nyissa meg a széfet a Cryptomator-ban.
|
addvault.new.readme.storageLocation.8=2. Nyissa meg a tárolót a Cryptomator felületén.
|
||||||
addvault.new.readme.storageLocation.9=3. Nyissa meg a hozzáférési helyet a "Megjelenítés" gombra való kattintással.
|
addvault.new.readme.storageLocation.9=3. Nyissa meg a hozzáférési helyet a "Megjelenítés" gombra való kattintással.
|
||||||
addvault.new.readme.storageLocation.10=Ha segítségre van szüksége, akkor látogasson el a dokumentáció oldalára: %s
|
addvault.new.readme.storageLocation.10=Ha segítségre van szüksége, akkor látogasson el a dokumentáció oldalára: %s
|
||||||
addvault.new.readme.accessLocation.fileName=ÜDVÖZÖLJÜK.rtf
|
addvault.new.readme.accessLocation.fileName=ÜDVÖZÖLJÜK.rtf
|
||||||
addvault.new.readme.accessLocation.1=🔐️ TITKOSÍTOTT KÖTET 🔐️
|
addvault.new.readme.accessLocation.1=🔐️ TITKOSÍTOTT KÖTET 🔐️
|
||||||
addvault.new.readme.accessLocation.2=Ez a széf hozzáférési helye.
|
addvault.new.readme.accessLocation.2=Ez a tároló hozzáférési helye.
|
||||||
addvault.new.readme.accessLocation.3=Bármilyen, a kötethez hozzáadott fájl titkosításra kerül a Cryptomator által. Úgy dolgozhat vele, mint minden más meghajtóval/mappával. Ez az egyetlen dekódolt tartalmi nézet. A fájlai folyamatosan titkosítva maradnak a merevlemezén.
|
addvault.new.readme.accessLocation.3=Bármilyen, a kötethez hozzáadott fájl titkosításra kerül a Cryptomator által. Úgy dolgozhat vele, mint minden más meghajtóval/mappával. Ez az egyetlen dekódolt tartalmi nézet. A fájljai folyamatosan titkosítva maradnak a merevlemezén.
|
||||||
addvault.new.readme.accessLocation.4=Bátran eltávolíthatja ezt a fájlt.
|
addvault.new.readme.accessLocation.4=Bátran eltávolíthatja ezt a fájlt.
|
||||||
## Existing
|
## Existing
|
||||||
addvaultwizard.existing.title=Meglévő széf hozzáadása
|
addvaultwizard.existing.title=Meglévő tároló hozzáadása
|
||||||
addvaultwizard.existing.instruction=Válassza ki a "vault.cryptomatotor" fájlt a meglévő tárolóhoz. Ha csak egy "masterkey.cryptomatotor" nevű fájl létezik, válassza azt.
|
addvaultwizard.existing.instruction=Válassza ki a "vault.cryptomator" fájlt a meglévő tárolóban. Ha csak egy "masterkey.cryptomator" nevű fájl létezik, válassza azt.
|
||||||
|
addvaultwizard.existing.restore=Visszaállítás…
|
||||||
addvaultwizard.existing.chooseBtn=Kiválaszt…
|
addvaultwizard.existing.chooseBtn=Kiválaszt…
|
||||||
addvaultwizard.existing.filePickerTitle=Trezor fájl kiválasztása
|
addvaultwizard.existing.filePickerTitle=Titkosított tároló fájl kiválasztása
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator széf
|
addvaultwizard.existing.filePickerMimeDesc=Cryptomator tároló
|
||||||
|
addvaultwizard.existing.notAVault.title=Nem titkosított tároló
|
||||||
|
addvaultwizard.existing.notAVault.message=A kiválasztott könyvtár nem Cryptomator titkosított tároló
|
||||||
|
addvaultwizard.existing.notAVault.description.missingDataDir=A következő mappában hiányzik a szükséges "d" almappa: "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.dataNotADirectory=A következő mappában található "d" bejegyzés nem könyvtár: "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.missingVaultConfig=A szükséges "vault.cryptomator" fájl hiányzik a következő mappából: "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=A "%s" mappában található "vault.cryptomator" fájl nem olvasható el, mert nincs megfelelő hozzáférési jogosultság.
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure=A következő mappa könyvtárstruktúrája nem támogatott: "%s".
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=Széf létrehozva "%s".\nA tartalom eléréséhez, vagy hozzáadásához fel kell oldania a széfet. Alternatív megoldásként később bármikor feloldhatja.
|
addvaultwizard.success.nextStepsInstructions=Titkosított tároló létrehozva "%s".\nA tartalom eléréséhez, vagy hozzáadásához fel kell oldania a tárolót. Alternatív megoldásként később is bármikor feloldhatja.
|
||||||
addvaultwizard.success.unlockNow=Azonnali feloldás
|
addvaultwizard.success.unlockNow=Azonnali feloldás
|
||||||
|
|
||||||
# Remove Vault
|
# Remove Vault
|
||||||
removeVault.title=Széf eltávolitása
|
removeVault.title="%s" tároló eltávolítása
|
||||||
removeVault.message=Vault eltávolitása?
|
removeVault.message=Titkosított tároló eltávolítása?
|
||||||
removeVault.description=Ez kizárolag a Cryptomator-ból távolitja el ezt a széfet. Később hozzáadhatja újra. A titkosított fájlokat nem törli a merevlemezről.
|
removeVault.description=Ez kizárólag a Cryptomator listájából távolítja el a tárolót. Később hozzáadhatja újra. A titkosított fájlokat nem törli a merevlemezről.
|
||||||
|
|
||||||
# Change Password
|
# Change Password
|
||||||
changepassword.title=Jelszó megváltoztatása
|
changepassword.title=Jelszó megváltoztatása
|
||||||
@@ -120,7 +133,7 @@ changepassword.finalConfirmation=Megértettem, hogy nem fogok hozzáférni az ad
|
|||||||
# Forget Password
|
# Forget Password
|
||||||
forgetPassword.title=Jelszó elfelejtése
|
forgetPassword.title=Jelszó elfelejtése
|
||||||
forgetPassword.message=Elfelejtette az elmentett jelszót?
|
forgetPassword.message=Elfelejtette az elmentett jelszót?
|
||||||
forgetPassword.description=Eltávolítja a széf mentett jelszavát a rendszere kulcstartójából.
|
forgetPassword.description=Eltávolítja a tároló mentett jelszavát a rendszere kulcstartójából.
|
||||||
forgetPassword.confirmBtn=Jelszó elfelejtése
|
forgetPassword.confirmBtn=Jelszó elfelejtése
|
||||||
|
|
||||||
# Unlock
|
# Unlock
|
||||||
@@ -130,30 +143,37 @@ unlock.savePassword=Jelszó megjegyzése
|
|||||||
unlock.unlockBtn=Feloldás
|
unlock.unlockBtn=Feloldás
|
||||||
## Select
|
## Select
|
||||||
unlock.chooseMasterkey.message=Mesterkulcs fájl nem található
|
unlock.chooseMasterkey.message=Mesterkulcs fájl nem található
|
||||||
unlock.chooseMasterkey.description=Nem található a tároló kulcsfájlja a várt helyen. Kérjük válassza ki a kulcsfájlt manuálisan.
|
unlock.chooseMasterkey.description=Nem található kulcsfájl ehhez a titkosított tárolóhoz: "%s". Kérjük válassza ki a kulcsfájlt manuálisan.
|
||||||
|
unlock.chooseMasterkey.restoreInstead=Inkább mesterkulcs fájl helyreállítása
|
||||||
unlock.chooseMasterkey.filePickerTitle=Mesterkulcs fájl kiválasztása
|
unlock.chooseMasterkey.filePickerTitle=Mesterkulcs fájl kiválasztása
|
||||||
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Mesterkulcs
|
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Mesterkulcs
|
||||||
## Success
|
## Success
|
||||||
unlock.success.message=Sikeres feloldás
|
unlock.success.message=Sikeres feloldás
|
||||||
unlock.success.description="%s" sikreresen feloldásra került! Mostmár hozzáférhet a virtuális trezorhoz.
|
unlock.success.description=Mostantól elérhető a csatolási pontján keresztül a következő tároló tartalma: "%s".
|
||||||
unlock.success.rememberChoice=Jegyezze meg a választást és ne mutassa többet
|
unlock.success.rememberChoice=Jegyezze meg a választást és ne mutassa többet
|
||||||
unlock.success.revealBtn=Széf megjelenítése
|
unlock.success.revealBtn=Széf megjelenítése
|
||||||
## Failure
|
## Failure
|
||||||
unlock.error.customPath.message=Nem lehet csatolni a széfet az egyéni útvonalhoz
|
unlock.error.customPath.message=Nem lehet csatolni a tárolót az egyéni útvonalhoz
|
||||||
unlock.error.customPath.description.notSupported=Ha szeretné továbbra is az egyéni útvonalat használni, kérem, menjen a beállításokba és válasszon egy kötet típust, amely támogatja azt. Máskülönben, menjen a széf opciókhoz és válasszon egy támogatott csatoláspontot.
|
unlock.error.customPath.description.notSupported=Ha szeretné továbbra is az egyéni útvonalat használni, kérem, menjen a beállításokba és válasszon egy kötet típust, amely támogatja azt. Máskülönben, menjen a tároló beállításaihoz és válasszon egy támogatott csatoláspontot.
|
||||||
unlock.error.customPath.description.notExists=Az egyéni csatolás útvonal nem létezik. Hozza létre a helyi fájlrendszerében vagy változtassa meg a széf opciókban.
|
unlock.error.customPath.description.notExists=Az egyéni csatolás útvonal nem létezik. Hozza létre a helyi fájlrendszerében vagy változtassa meg a tároló beállításaiban.
|
||||||
unlock.error.customPath.description.inUse=A meghajtó betűjele vagy a csatolási útvonal: "%s" már foglalt.
|
unlock.error.customPath.description.inUse=A meghajtó betűjele vagy a csatolási útvonal: "%s" már foglalt.
|
||||||
unlock.error.customPath.description.hideawayNotDir=A feloldáshoz használt, "%3$s" nevű ideiglenes, rejtett fájlt nem lehet eltávolítani. Kérjük, ellenőrizze a fájlt, majd törölje manuálisan.
|
unlock.error.customPath.description.hideawayNotDir=A feloldáshoz használt, "%3$s" nevű ideiglenes, rejtett fájlt nem lehet eltávolítani. Kérjük, ellenőrizze a fájlt, majd törölje manuálisan.
|
||||||
unlock.error.customPath.description.couldNotBeCleaned=A széfet nem lehetett a "%s" elérési útvonalra csatlakoztatni. Kérjük, próbálja meg újra, vagy válasszon másik elérési útvonalat.
|
unlock.error.customPath.description.couldNotBeCleaned=A tárolót nem lehetett a "%s" elérési útvonalra csatlakoztatni. Kérjük, próbálja meg újra, vagy válasszon másik elérési útvonalat.
|
||||||
unlock.error.customPath.description.notEmptyDir=A megadott "%s" elérési útvonal nem egy üres mappa. Kérjük, válasszon egy üres mappát, és próbálja meg újra.
|
unlock.error.customPath.description.notEmptyDir=A megadott "%s" elérési útvonal nem egy üres mappa. Kérjük, válasszon egy üres mappát, és próbálja meg újra.
|
||||||
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %2$s
|
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a tárolóhoz, de használatakor ez a hibaüzenet érkezett: %2$s
|
||||||
unlock.error.restartRequired.message=Nem lehet feloldani a széfet
|
unlock.error.restartRequired.message=Nem lehet feloldani a titkosított tárolót
|
||||||
unlock.error.restartRequired.description=Módosítsa a kötet típusát a széf beállításaiban, vagy indítsa újra a Cryptomator-t.
|
unlock.error.restartRequired.description=Módosítsa a kötet típusát a tároló beállításaiban, vagy indítsa újra a Cryptomator-t.
|
||||||
unlock.error.title=A(z) „%s” feloldása sikertelen
|
unlock.error.title=A(z) „%s” feloldása sikertelen
|
||||||
## Hub
|
## Hub
|
||||||
hub.noKeychain.message=Nem lehet az eszközkulcshoz hozzáférni
|
hub.noKeychain.message=Nem lehet az eszközkulcshoz hozzáférni
|
||||||
hub.noKeychain.description=Hogy feloldja a Hub széfeket, egy eszközkulcs szükséges, mely egy kulcslánccal van biztosítva. A folytatáshoz engedélyezze a következőt: “%s” és válasszon egy kulcsláncot a beállításokban.
|
hub.noKeychain.description=Hogy feloldja a Hub-tárolókat, egy eszközkulcs szükséges, mely egy kulcslánccal van biztosítva. A folytatáshoz engedélyezze a következőt: “%s” és válasszon egy kulcsláncot a beállításokban.
|
||||||
hub.noKeychain.openBtn=Beállítások megnyitása
|
hub.noKeychain.openBtn=Beállítások megnyitása
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.message.check=Konfiguráció ellenőrzése…
|
||||||
|
hub.checkHostTrust.message.ask=Megbízik ebben a gépben?
|
||||||
|
hub.checkHostTrust.message.ask.plural=Megbízik ezekben a gépben?
|
||||||
|
hub.checkHostTrust.trustBtn=Megbízható
|
||||||
|
hub.checkHostTrust.denyBtn=Elutasít
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Várakozás a hitelesítésre…
|
hub.auth.message=Várakozás a hitelesítésre…
|
||||||
hub.auth.description=Automatikusan átirányítjuk a bejelentkezési oldalra.
|
hub.auth.description=Automatikusan átirányítjuk a bejelentkezési oldalra.
|
||||||
@@ -172,17 +192,22 @@ hub.register.legacy.occupiedMsg=Név már használatban van
|
|||||||
hub.register.legacy.description=Ez az első Hub hozzáférés erről az eszközről. Kérem, regisztrálja.
|
hub.register.legacy.description=Ez az első Hub hozzáférés erről az eszközről. Kérem, regisztrálja.
|
||||||
### Registration Success
|
### Registration Success
|
||||||
hub.registerSuccess.message=Az eszköz regisztrálva
|
hub.registerSuccess.message=Az eszköz regisztrálva
|
||||||
hub.registerSuccess.description=Az eszköze sikeresen regisztrálva. Most már folytathatja a széf feloldását.
|
hub.registerSuccess.description=Az eszköze sikeresen regisztrálva. Most már folytathatja a titkosított tároló feloldását.
|
||||||
hub.registerSuccess.unlockBtn=Feloldás
|
hub.registerSuccess.unlockBtn=Feloldás
|
||||||
hub.registerSuccess.legacy.description=A széfhez való hozzáféréshez az eszközének a széf tulajdonosától további engedélyt kell kapnia.
|
hub.registerSuccess.legacy.description=A titkosított tárolóhoz való hozzáféréshez az eszközének a tároló tulajdonosától további engedélyt kell kapnia.
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
hub.registerFailed.message=Az eszköz regisztrációja sikertelen
|
hub.registerFailed.message=Az eszköz regisztrációja sikertelen
|
||||||
hub.registerFailed.description.generic=Hiba történt a regisztrációs folyamat során. További részletekért nézze meg az alkalmazás naplóját.
|
hub.registerFailed.description.generic=Hiba történt a regisztrációs folyamat során. További részletekért nézze meg az alkalmazás naplóját.
|
||||||
hub.registerFailed.description.deviceAlreadyExists=Ez az eszköz már egy másik felhasználóhoz van regisztrálva. Próbáljon meg felhasználói fiókot váltani, vagy használjon egy másik eszközt.
|
hub.registerFailed.description.deviceAlreadyExists=Ez az eszköz már egy másik felhasználóhoz van regisztrálva. Próbáljon meg felhasználói fiókot váltani, vagy használjon egy másik eszközt.
|
||||||
### Archived
|
### Archived
|
||||||
|
hub.archived.message=Titkosított tároló archiválva
|
||||||
|
hub.archived.description=Ez a tároló archivált és már nem érhető el. Kérjük, vegye fel a kapcsolatot a tárhely tulajdonosával.
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Hozzáférés megtagadva
|
hub.unauthorized.message=Hozzáférés megtagadva
|
||||||
hub.unauthorized.description=Nincs hozzáférésed a széf megnyitásához. Vedd fel a kapcsolatot a széf tulajdonosával és kérj hozzáférést.
|
hub.unauthorized.description=Nincs hozzáférésed a titkosított tároló megnyitásához. Vedd fel a kapcsolatot a tároló tulajdonosával és kérj hozzáférést.
|
||||||
|
### Untrusted Host
|
||||||
|
hub.untrustedHost.message=A kiszolgáló nem megbízható
|
||||||
|
hub.untrustedHost.description=A Hubhoz való csatlakozás biztonsági okokból blokkolva lett. Ha úgy gondolja, hogy a Hub-szerver biztonságos, lépjen kapcsolatba a Hub rendszergazdájával, vagy próbálja meg újra.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Beavatkozás szükséges
|
hub.requireAccountInit.message=Beavatkozás szükséges
|
||||||
hub.requireAccountInit.description.0=A folytatáshoz kérlek töltsd ki a szükséges lépéseket a te
|
hub.requireAccountInit.description.0=A folytatáshoz kérlek töltsd ki a szükséges lépéseket a te
|
||||||
@@ -199,49 +224,49 @@ lock.forced.description=A „%s” zárolását függőben lévő műveletek vag
|
|||||||
lock.forced.retryBtn=Újra
|
lock.forced.retryBtn=Újra
|
||||||
lock.forced.forceBtn=Lezárás kényszerítése
|
lock.forced.forceBtn=Lezárás kényszerítése
|
||||||
## Failure
|
## Failure
|
||||||
lock.fail.message=Zárolás sikertelen.
|
lock.fail.message=Zárolás sikertelen
|
||||||
lock.fail.description=A "%s" tárolót nem lehetett zárolni. Győződjön meg arról, hogy a nem mentett munkát máshová menti, és a fontos olvasási/írási műveletek befejeződtek. A trezor bezárásához szakítsa meg a Cryptomator folyamatot.
|
lock.fail.description=A "%s" tárolót nem lehetett zárolni. Győződjön meg arról, hogy a nem mentett munkát máshová menti, és a fontos olvasási/írási műveletek befejeződtek. A tároló bezárásához szakítsa meg a Cryptomator folyamatot.
|
||||||
|
|
||||||
# Migration
|
# Migration
|
||||||
migration.title=Széf frissítése
|
migration.title=Titkosított tároló frissítése
|
||||||
## Start
|
## Start
|
||||||
migration.start.header=Széf frissítése
|
migration.start.header=Titkosított tároló frissítése
|
||||||
migration.start.text=Hogy megnyissa a "%s" nevű széfét a Cryptomator ezen új verziójában, a széfet frissíteni kell egy újabb formátumra. Mielőtt ezt megteszi, az alábbiakat érdemes figyelembe vennie:
|
migration.start.text=Hogy megnyissa a "%s" nevű titkosított tárolót a Cryptomator ezen új verziójában, a tárolót frissíteni kell egy újabb formátumra. Mielőtt ezt megteszi, az alábbiakat érdemes figyelembe vennie:
|
||||||
migration.start.remarkUndone=Ezt a módosítást nem lehet visszafordítani.
|
migration.start.remarkUndone=Ezt a módosítást nem lehet visszafordítani.
|
||||||
migration.start.remarkVersions=A Cryptomator régebbi verziói nem fogják tudni megnyitni a frissített széfet.
|
migration.start.remarkVersions=A Cryptomator régebbi verziói nem fogják tudni megnyitni a frissített tárolót.
|
||||||
migration.start.remarkCanRun=Meg kell győződnie arról, hogy minden eszköz, amelyről eléri ezt a széfet képes futtatni a Cryptomator ezen verzióját.
|
migration.start.remarkCanRun=Meg kell győződnie arról, hogy minden eszköz, amelyről eléri ezt a titkosított tárolót, képes futtatni a Cryptomator ezen verzióját.
|
||||||
migration.start.remarkSynced=Meg kell győződnie arról, hogy a széfe teljesen szinkronizálva van ezen és az összes többi eszközön a frissítés előtt.
|
migration.start.remarkSynced=Meg kell győződnie arról, hogy a tároló teljesen szinkronizálva van ezen és az összes többi eszközön a frissítés előtt.
|
||||||
migration.start.confirm=Elolvastam és megértettem a fenti információkat
|
migration.start.confirm=Elolvastam és megértettem a fenti információkat
|
||||||
## Run
|
## Run
|
||||||
migration.run.enterPassword=Írja be a jelszót a következőhöz Enter the password for "%s"
|
migration.run.enterPassword=Írja be a jelszót a következőhöz Enter the password for "%s"
|
||||||
migration.run.startMigrationBtn=Széf frissítése
|
migration.run.startMigrationBtn=Tároló frissítése
|
||||||
migration.run.progressHint=Ez eltarthat egy darabig…
|
migration.run.progressHint=Ez eltarthat egy darabig…
|
||||||
## Success
|
## Success
|
||||||
migration.success.nextStepsInstructions=A "%s" sikeresen migrálva. \nMost már feloldhatja a széfet.
|
migration.success.nextStepsInstructions=A "%s" sikeresen migrálva. \nMost már feloldhatja a titkosított tárolót.
|
||||||
migration.success.unlockNow=Azonnali feloldás
|
migration.success.unlockNow=Azonnali feloldás
|
||||||
## Missing file system capabilities
|
## Missing file system capabilities
|
||||||
migration.error.missingFileSystemCapabilities.title=Nem támogatott fájlrendszer
|
migration.error.missingFileSystemCapabilities.title=Nem támogatott fájlrendszer
|
||||||
migration.error.missingFileSystemCapabilities.description=A migráció nem kezdődött el, mert a széf nem megfelelő fájlrendszeren található.
|
migration.error.missingFileSystemCapabilities.description=A migráció nem kezdődött el, mert a tároló nem megfelelő fájlrendszeren található.
|
||||||
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=A fájlrendszer nem támogatja a hosszú fájlneveket.
|
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=A fájlrendszer nem támogatja a hosszú fájlneveket.
|
||||||
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=A fájlrendszer nem támogatja a hosszú útvonalakat.
|
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=A fájlrendszer nem támogatja a hosszú útvonalakat.
|
||||||
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=A fájlrendszer nem teszi lehetővé az olvasást.
|
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=A fájlrendszer nem teszi lehetővé az olvasást.
|
||||||
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=A fájlrendszer nem teszi lehetővé az írást.
|
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=A fájlrendszer nem teszi lehetővé az írást.
|
||||||
## Impossible
|
## Impossible
|
||||||
migration.impossible.heading=A széf frissítése sikertelen
|
migration.impossible.heading=A titkosított tároló frissítése sikertelen
|
||||||
migration.impossible.reason=A széfet nem lehet automatikusan frissíteni, mert a tárolási helye vagy a hozzáférési pontja nem kompatibilis.
|
migration.impossible.reason=A tárolót nem lehet automatikusan frissíteni, mert a tárolási helye vagy a hozzáférési pontja nem kompatibilis.
|
||||||
migration.impossible.moreInfo=A széf továbbra is megnyitható marad egy régebbi verzióval. A széf kézi frissítésével kapcsolatos utasításokért keresse fel a következő címet:
|
migration.impossible.moreInfo=A tároló továbbra is megnyitható marad egy régebbi verzióval. A titkosított tároló kézi frissítésével kapcsolatos utasításokért keresse fel a következő címet
|
||||||
|
|
||||||
# Health Check
|
# Health Check
|
||||||
## Start
|
## Start
|
||||||
health.title="%s" állapotellenőrzése
|
health.title="%s" állapotellenőrzése
|
||||||
health.intro.header=Állapotfelmérés
|
health.intro.header=Állapotfelmérés
|
||||||
health.intro.text=Az állapotfelmérés olyan ellenőrzéscsomag, amely felderíti és esetlegesen kijavítja a trezor belső szerkezetében fellépő problémákat. Kérjük, ne feledje:
|
health.intro.text=Az állapotfelmérés olyan ellenőrzéscsomag, amely felderíti és esetlegesen kijavítja a titkosított tároló belső szerkezetében fellépő problémákat. Kérjük, ne feledje:
|
||||||
health.intro.remarkSync=Győződjön meg arról, hogy minden eszköz teljesen szinkronizálva van, ez megoldja a legtöbb problémát.
|
health.intro.remarkSync=Győződjön meg arról, hogy minden eszköz teljesen szinkronizálva van, ez megoldja a legtöbb problémát.
|
||||||
health.intro.remarkFix=Nem minden probléma javítható.
|
health.intro.remarkFix=Nem minden probléma javítható.
|
||||||
health.intro.remarkBackup=Ha az adatok sérültek, csak a biztonsági mentés segíthet.
|
health.intro.remarkBackup=Ha az adatok sérültek, csak a biztonsági mentés segíthet.
|
||||||
health.intro.affirmation=Elolvastam és megértettem a fenti információkat
|
health.intro.affirmation=Elolvastam és megértettem a fenti információkat
|
||||||
## Start Failure
|
## Start Failure
|
||||||
health.fail.header=Hiba a Trezor konfiguráció betöltésekor
|
health.fail.header=Hiba a tároló konfigurációjának betöltésekor
|
||||||
health.fail.ioError=Hiba történt a konfigurációs fájl elérése és olvasása közben.
|
health.fail.ioError=Hiba történt a konfigurációs fájl elérése és olvasása közben.
|
||||||
health.fail.parseError=Hiba történt a tároló konfigurációjának elemzése közben.
|
health.fail.parseError=Hiba történt a tároló konfigurációjának elemzése közben.
|
||||||
health.fail.moreInfo=További infó
|
health.fail.moreInfo=További infó
|
||||||
@@ -260,6 +285,8 @@ health.check.detail.checkFinishedAndFound=Az ellenőrzés véget ért. Kérem el
|
|||||||
health.check.detail.checkFailed=Az ellenőrzés egy hiba miatt megszakadt.
|
health.check.detail.checkFailed=Az ellenőrzés egy hiba miatt megszakadt.
|
||||||
health.check.detail.checkCancelled=Az ellenőrzés meg lett szakítva.
|
health.check.detail.checkCancelled=Az ellenőrzés meg lett szakítva.
|
||||||
health.check.detail.listFilters.label=Szűrő
|
health.check.detail.listFilters.label=Szűrő
|
||||||
|
health.check.detail.filterSeverity=Szűrés súlyosság szerint
|
||||||
|
health.check.detail.filterFixState=Szűrés állapot szerint
|
||||||
health.check.detail.fixAllSpecificBtn=Az összes ilyen javítása
|
health.check.detail.fixAllSpecificBtn=Az összes ilyen javítása
|
||||||
health.check.exportBtn=Jelentés exportálása
|
health.check.exportBtn=Jelentés exportálása
|
||||||
## Result view
|
## Result view
|
||||||
@@ -268,10 +295,10 @@ health.result.severityFilter.good=Rendben
|
|||||||
health.result.severityFilter.info=Infó
|
health.result.severityFilter.info=Infó
|
||||||
health.result.severityFilter.warn=Figyelmeztetés
|
health.result.severityFilter.warn=Figyelmeztetés
|
||||||
health.result.severityFilter.crit=Kritikus
|
health.result.severityFilter.crit=Kritikus
|
||||||
health.result.severityTip.good=Súlyosság: Jó\nNormális séf struktúra.
|
health.result.severityTip.good=Súlyosság: Jó\nNormális tároló struktúra.
|
||||||
health.result.severityTip.info=Súlyosság: Info\nA széf struktúrája ép, javítás ajánlott.
|
health.result.severityTip.info=Súlyosság: Infó\nA tároló struktúrája ép, javítás ajánlott.
|
||||||
health.result.severityTip.warn=Súlyosság: Figyelmeztetés\nA széf struktúrája sérült, javítás erősen ajánlott.
|
health.result.severityTip.warn=Súlyosság: Figyelmeztetés\nA tároló struktúrája sérült, javítás erősen ajánlott.
|
||||||
health.result.severityTip.crit=Súlyosság: Kritikus\nA széf struktúrája sérült, adatvesztés áll fönt.
|
health.result.severityTip.crit=Súlyosság: Kritikus\nA tároló struktúrája sérült, adatvesztés veszélye áll fenn.
|
||||||
health.result.fixStateFilter.all=Javítás státusz - Mind
|
health.result.fixStateFilter.all=Javítás státusz - Mind
|
||||||
health.result.fixStateFilter.fixable=Javítható
|
health.result.fixStateFilter.fixable=Javítható
|
||||||
health.result.fixStateFilter.notFixable=Nem javítható
|
health.result.fixStateFilter.notFixable=Nem javítható
|
||||||
@@ -288,12 +315,13 @@ preferences.title=Beállítások
|
|||||||
## General
|
## General
|
||||||
preferences.general=Általános
|
preferences.general=Általános
|
||||||
preferences.general.startHidden=Az ablak elrejtése a Cryptomator indítása után
|
preferences.general.startHidden=Az ablak elrejtése a Cryptomator indítása után
|
||||||
preferences.general.autoCloseVaults=Széfek lezárása megerősítés nélkül az alkalmazás bezárásakor
|
preferences.general.autoCloseVaults=Titkosított tárolók lezárása megerősítés nélkül az alkalmazás bezárásakor
|
||||||
preferences.general.debugLogging=Hibakeresési naplózás engedélyezése
|
preferences.general.debugLogging=Hibakeresési naplózás engedélyezése
|
||||||
preferences.general.debugDirectory=Naplófájlok megjelenítése
|
preferences.general.debugDirectory=Naplófájlok megjelenítése
|
||||||
preferences.general.autoStart=Cryptomator indítása a rendszerrel együtt
|
preferences.general.autoStart=Cryptomator indítása a rendszerrel együtt
|
||||||
preferences.general.keychainBackend=Itt tárolja a jelszavakat
|
preferences.general.keychainBackend=Itt tárolja a jelszavakat
|
||||||
preferences.general.quickAccessService=Adja a feloldott széfeket a gyors elérési területhez
|
preferences.general.quickAccessService=A feloldott tárolókat a Gyors elérési területhez adja
|
||||||
|
preferences.general.resetTrustedHosts=A megbízható kiszolgálók visszaállítása
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Kezelőfelület
|
preferences.interface=Kezelőfelület
|
||||||
preferences.interface.theme=Megjelenés
|
preferences.interface.theme=Megjelenés
|
||||||
@@ -307,7 +335,7 @@ preferences.interface.interfaceOrientation=Felhasználói felület tájolása
|
|||||||
preferences.interface.interfaceOrientation.ltr=Balról jobbra
|
preferences.interface.interfaceOrientation.ltr=Balról jobbra
|
||||||
preferences.interface.interfaceOrientation.rtl=Jobbról balra
|
preferences.interface.interfaceOrientation.rtl=Jobbról balra
|
||||||
preferences.interface.showTrayIcon=Tálca ikon megjelenítése (újraindítás szükséges)
|
preferences.interface.showTrayIcon=Tálca ikon megjelenítése (újraindítás szükséges)
|
||||||
preferences.interface.compactMode=Kompakt széflista engedélyezése
|
preferences.interface.compactMode=Kompakt tárolólista engedélyezése
|
||||||
## Volume
|
## Volume
|
||||||
preferences.volume=Virtuális meghajtó
|
preferences.volume=Virtuális meghajtó
|
||||||
preferences.volume.type=Alapértelmezett kötet típus
|
preferences.volume.type=Alapértelmezett kötet típus
|
||||||
@@ -332,8 +360,13 @@ preferences.updates.lastUpdateCheck.never=soha
|
|||||||
preferences.updates.lastUpdateCheck.recently=mostanában
|
preferences.updates.lastUpdateCheck.recently=mostanában
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=%s nappal ezelőtt
|
preferences.updates.lastUpdateCheck.daysAgo=%s nappal ezelőtt
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=%s órával ezelőtt
|
preferences.updates.lastUpdateCheck.hoursAgo=%s órával ezelőtt
|
||||||
|
preferences.updates.prohibitedDueToUnlockedVaults.1=Kérem
|
||||||
|
preferences.updates.prohibitedDueToUnlockedVaults.2=zárolja tárolóit
|
||||||
|
preferences.updates.prohibitedDueToUnlockedVaults.3=a frissítés telepítéséhez.
|
||||||
preferences.updates.checkFailed=A frissítések keresése sikertelen. Kérem, ellenőrizze az internetkapcsolatát, vagy próbálja meg később újra.
|
preferences.updates.checkFailed=A frissítések keresése sikertelen. Kérem, ellenőrizze az internetkapcsolatát, vagy próbálja meg később újra.
|
||||||
|
preferences.updates.updateFailed=A frissítés nem sikerült. Kérjük, telepítse a frissítést manuálisan.
|
||||||
preferences.updates.upToDate=A Cryptomator naprakész.
|
preferences.updates.upToDate=A Cryptomator naprakész.
|
||||||
|
preferences.updates.visitDownloadPage=Látogasson el a letöltési oldalra
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=Támogasson bennünket
|
preferences.contribute=Támogasson bennünket
|
||||||
@@ -344,15 +377,17 @@ preferences.contribute.promptText=Ide illessze be támogatói igazolása kódjá
|
|||||||
preferences.contribute.thankYou=Köszönjük, hogy támogatja a Cryptomator nyílt forráskódú fejlesztését!
|
preferences.contribute.thankYou=Köszönjük, hogy támogatja a Cryptomator nyílt forráskódú fejlesztését!
|
||||||
preferences.contribute.donate=Támogatás
|
preferences.contribute.donate=Támogatás
|
||||||
preferences.contribute.sponsor=Szponzor
|
preferences.contribute.sponsor=Szponzor
|
||||||
|
preferences.contribute.removeCert.tooltip=Tanúsítvány eltávolítása
|
||||||
|
|
||||||
### Remove License Key Dialog
|
### Remove License Key Dialog
|
||||||
removeCert.title=Tanúsítvány eltávolítása
|
removeCert.title=Tanúsítvány eltávolítása
|
||||||
removeCert.message=Eltávolítja a támogatói tanúsítványt?
|
removeCert.message=Eltávolítja a támogatói tanúsítványt?
|
||||||
removeCert.description=A Cryptomator alapvető funkcióit ez nem érinti. Sem a széfekhez való hozzáférés nem korlátozott, sem a biztonsági szint nem csökken.
|
removeCert.description=A Cryptomator alapvető funkcióit ez nem érinti. Sem a titkosított tárolókhoz való hozzáférés nem korlátozott, sem a biztonsági szint nem csökken.
|
||||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||||
|
|
||||||
## About
|
## About
|
||||||
preferences.about=Rólunk
|
preferences.about=Rólunk
|
||||||
|
preferences.about.thirdPartyLicenses=Harmadik felek által kiadott licencek
|
||||||
|
|
||||||
# Vault Statistics
|
# Vault Statistics
|
||||||
stats.title=Statisztika ehhez %s
|
stats.title=Statisztika ehhez %s
|
||||||
@@ -392,32 +427,40 @@ stats.access.total=Összes hozzáférés: %d
|
|||||||
# Main Window
|
# Main Window
|
||||||
## Vault List
|
## Vault List
|
||||||
main.vaultlist=Széfek
|
main.vaultlist=Széfek
|
||||||
main.vaultlist.emptyList.onboardingInstruction=Kattintson ide egy széf hozzáadásához
|
main.vaultlist.listEntry=Titkosított tároló %s (%s)
|
||||||
|
main.vaultlist.emptyList.onboardingInstruction=Kattintson ide egy titkosított tároló hozzáadásához
|
||||||
main.vaultlist.contextMenu.remove=Eltávolítás…
|
main.vaultlist.contextMenu.remove=Eltávolítás…
|
||||||
main.vaultlist.contextMenu.lock=Zárolás
|
main.vaultlist.contextMenu.lock=Zárolás
|
||||||
main.vaultlist.contextMenu.unlock=Feloldás…
|
main.vaultlist.contextMenu.unlock=Feloldás…
|
||||||
main.vaultlist.contextMenu.unlockNow=Azonnali feloldás
|
main.vaultlist.contextMenu.unlockNow=Azonnali feloldás
|
||||||
main.vaultlist.contextMenu.vaultoptions=Széf beállítások
|
main.vaultlist.contextMenu.vaultoptions=Titkosított tároló beállításai
|
||||||
main.vaultlist.contextMenu.reveal=Széf megjelenítése
|
main.vaultlist.contextMenu.reveal=Tároló megjelenítése
|
||||||
main.vaultlist.contextMenu.share=Megosztás…
|
main.vaultlist.contextMenu.share=Megosztás…
|
||||||
|
main.vaultlist.addVaultBtn.menuItemNew=Új titkosított tároló létrehozása…
|
||||||
|
main.vaultlist.addVaultBtn.menuItemExisting=Titkosított tároló megnyitása…
|
||||||
|
main.vaultlist.addVaultBtn.menuItemRecover=Titkosított tároló visszaállítása…
|
||||||
main.vaultlist.addVaultButton.tooltip=Széf hozzáadása
|
main.vaultlist.addVaultButton.tooltip=Széf hozzáadása
|
||||||
|
main.vaultlist.showEventsButton.tooltip=Eseménynapló megnyitása
|
||||||
|
main.vaultlist.showPreferencesButton.tooltip=Beállítások megnyitása
|
||||||
##Notification
|
##Notification
|
||||||
main.notification.updateAvailable=Frissítés elérhető.
|
main.notification.updateAvailable=Frissítés elérhető.
|
||||||
main.notification.support=Cryptomator támogatása.
|
main.notification.support=Cryptomator támogatása.
|
||||||
|
main.notification.closeButton.tooltip=Az információs sáv bezárása
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
main.vaultDetail.welcomeOnboarding=Köszönjük, hogy a Cryptomator programot választotta a fájlai védelmére. Ha segítségre van szüksége, akkor olvassa el a kezdő útmutatónk lépéseit:
|
main.vaultDetail.welcomeOnboarding=Köszönjük, hogy a Cryptomator programot választotta a fájljai védelmére. Ha segítségre van szüksége, akkor olvassa el a kezdő útmutatónk lépéseit:
|
||||||
|
main.vaultDetail.storageLocation=Titkosított tároló helye
|
||||||
### Locked
|
### Locked
|
||||||
main.vaultDetail.lockedStatus=ZÁROLVA
|
main.vaultDetail.lockedStatus=ZÁROLVA
|
||||||
main.vaultDetail.unlockBtn=Feloldás…
|
main.vaultDetail.unlockBtn=Feloldás…
|
||||||
main.vaultDetail.unlockNowBtn=Azonnali feloldás
|
main.vaultDetail.unlockNowBtn=Azonnali feloldás
|
||||||
main.vaultDetail.optionsBtn=Széf beállítások
|
main.vaultDetail.optionsBtn=Titkosított tároló beállításai
|
||||||
main.vaultDetail.passwordSavedInKeychain=Jelszó mentve
|
main.vaultDetail.passwordSavedInKeychain=Jelszó mentve
|
||||||
main.vaultDetail.share=Megosztás…
|
main.vaultDetail.share=Megosztás…
|
||||||
### Unlocked
|
### Unlocked
|
||||||
main.vaultDetail.unlockedStatus=FELOLDVA
|
main.vaultDetail.unlockedStatus=FELOLDVA
|
||||||
main.vaultDetail.accessLocation=A széf tartalma itt érhető el:
|
main.vaultDetail.accessLocation=A tároló tartalma itt érhető el:
|
||||||
main.vaultDetail.revealBtn=Széf megjelenítése
|
main.vaultDetail.revealBtn=Tároló megjelenítése
|
||||||
main.vaultDetail.copyUri=URI másolása
|
main.vaultDetail.copyUri=URI másolása
|
||||||
main.vaultDetail.lockBtn=Zárolás
|
main.vaultDetail.lockBtn=Zárolás
|
||||||
main.vaultDetail.bytesPerSecondRead=Olvasás:
|
main.vaultDetail.bytesPerSecondRead=Olvasás:
|
||||||
@@ -425,21 +468,26 @@ main.vaultDetail.bytesPerSecondWritten=Írás:
|
|||||||
main.vaultDetail.throughput.idle=tétlen
|
main.vaultDetail.throughput.idle=tétlen
|
||||||
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
||||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||||
main.vaultDetail.stats=Széf statisztika
|
main.vaultDetail.stats=Tároló statisztika
|
||||||
main.vaultDetail.locateEncryptedFileBtn=Titkosított fájl megkeresése
|
main.vaultDetail.locateEncryptedFileBtn=Titkosított fájl megkeresése
|
||||||
main.vaultDetail.locateEncryptedFileBtn.tooltip=Válasszon a széfből egy fájlt a titkosított megfelelőjének megkereséséhez
|
main.vaultDetail.locateEncryptedFileBtn.tooltip=Válasszon a tárolóból egy fájlt a titkosított megfelelőjének megkereséséhez
|
||||||
main.vaultDetail.encryptedPathsCopied=Az útvonal a vágólapra került!
|
main.vaultDetail.encryptedPathsCopied=Az útvonal a vágólapra került!
|
||||||
|
main.vaultDetail.locateEncrypted.filePickerTitle=Fájl kiválasztása a tárolóból
|
||||||
|
main.vaultDetail.decryptName.buttonLabel=Fájlnevek visszafejtése
|
||||||
|
main.vaultDetail.decryptName.tooltip=Válasszon ki egy fájlt a titkosított tárolóból, hogy visszafejtse a nevét
|
||||||
### Missing
|
### Missing
|
||||||
main.vaultDetail.missing.info=A Cryptomator nem talált széfet ezen az útvonalon.
|
main.vaultDetail.missing.info=A Cryptomator nem talált titkosított tárolót ezen az útvonalon.
|
||||||
main.vaultDetail.missing.recheck=Ellenőrizze újra
|
main.vaultDetail.missing.recheck=Ellenőrizze újra
|
||||||
main.vaultDetail.missing.remove=A széf eltávolítása a listából…
|
main.vaultDetail.missing.remove=A tároló eltávolítása a listából…
|
||||||
main.vaultDetail.missing.changeLocation=A széf helyének megváltoztatása…
|
main.vaultDetail.missing.changeLocation=A titkosított tároló helyének megváltoztatása…
|
||||||
### Missing Vault Config
|
### Missing Vault Config
|
||||||
|
main.vaultDetail.missingVaultConfig.info=A tároló konfigurációja hiányzik.
|
||||||
|
main.vaultDetail.missingVaultConfig.restore=Tároló konfiguráció helyreállítása
|
||||||
### Needs Migration
|
### Needs Migration
|
||||||
main.vaultDetail.migrateButton=Széf frissítése
|
main.vaultDetail.migrateButton=Tároló frissítése
|
||||||
main.vaultDetail.migratePrompt=A széfet új formátumra kell frissíteni, mielőtt hozzáférhet
|
main.vaultDetail.migratePrompt=A titkosított tárolót új formátumra kell frissíteni, mielőtt hozzáférhet
|
||||||
### Error
|
### Error
|
||||||
main.vaultDetail.error.info=Hiba történt a széf merevlemezről való betöltése során.
|
main.vaultDetail.error.info=Hiba történt a titkosított tároló merevlemezről való betöltése során.
|
||||||
main.vaultDetail.error.reload=Újratöltés
|
main.vaultDetail.error.reload=Újratöltés
|
||||||
main.vaultDetail.error.windowTitle=Hiba az adatok betöltése közben
|
main.vaultDetail.error.windowTitle=Hiba az adatok betöltése közben
|
||||||
|
|
||||||
@@ -448,7 +496,7 @@ wrongFileAlert.title=Hogyan lehet fájlokat titkosítani
|
|||||||
wrongFileAlert.message=Próbálta ezeket a fájlokat titkosítani?
|
wrongFileAlert.message=Próbálta ezeket a fájlokat titkosítani?
|
||||||
wrongFileAlert.description=Erre a célra a Cryptomator egy kötetet biztosít a rendszer fájlkezelőjében.
|
wrongFileAlert.description=Erre a célra a Cryptomator egy kötetet biztosít a rendszer fájlkezelőjében.
|
||||||
wrongFileAlert.instruction.0=Hogy titkosítsa a fájlokat kövesse a következő lépéseket:
|
wrongFileAlert.instruction.0=Hogy titkosítsa a fájlokat kövesse a következő lépéseket:
|
||||||
wrongFileAlert.instruction.1=1. Oldja fel a széfet.
|
wrongFileAlert.instruction.1=1. Oldja fel a titkosított tárolót.
|
||||||
wrongFileAlert.instruction.2=2. Kattintson a "Megjelenítés" gombra, hogy megnyissa a kötetet a fájlkezelőjében.
|
wrongFileAlert.instruction.2=2. Kattintson a "Megjelenítés" gombra, hogy megnyissa a kötetet a fájlkezelőjében.
|
||||||
wrongFileAlert.instruction.3=3. Adjon hozzá fájlokat a kötethez.
|
wrongFileAlert.instruction.3=3. Adjon hozzá fájlokat a kötethez.
|
||||||
wrongFileAlert.link=További segítségért látogasson el ide
|
wrongFileAlert.link=További segítségért látogasson el ide
|
||||||
@@ -456,10 +504,11 @@ wrongFileAlert.link=További segítségért látogasson el ide
|
|||||||
# Vault Options
|
# Vault Options
|
||||||
## General
|
## General
|
||||||
vaultOptions.general=Általános
|
vaultOptions.general=Általános
|
||||||
vaultOptions.general.vaultName=A széf neve
|
vaultOptions.general.vaultName=A tároló neve
|
||||||
vaultOptions.general.autoLock.lockAfterTimePart1=Lezárás, ha tétlen
|
vaultOptions.general.autoLock.lockAfterTimePart1=Lezárás, ha tétlen
|
||||||
vaultOptions.general.autoLock.lockAfterTimePart2=perc
|
vaultOptions.general.autoLock.lockAfterTimePart2=perc
|
||||||
vaultOptions.general.unlockAfterStartup=A széf feloldása a Cryptomator indításakor
|
vaultOptions.general.autoLock.accessibleText=Zárolási időkorlát percben
|
||||||
|
vaultOptions.general.unlockAfterStartup=A titkosított tároló feloldása a Cryptomator indításakor
|
||||||
vaultOptions.general.actionAfterUnlock=Sikeres feloldás után
|
vaultOptions.general.actionAfterUnlock=Sikeres feloldás után
|
||||||
vaultOptions.general.actionAfterUnlock.ignore=Ne tegyen semmit
|
vaultOptions.general.actionAfterUnlock.ignore=Ne tegyen semmit
|
||||||
vaultOptions.general.actionAfterUnlock.reveal=Jelenítse meg a kötetet
|
vaultOptions.general.actionAfterUnlock.reveal=Jelenítse meg a kötetet
|
||||||
@@ -486,19 +535,21 @@ vaultOptions.mount.volume.type=Kötet típus
|
|||||||
vaultOptions.masterkey=Jelszó
|
vaultOptions.masterkey=Jelszó
|
||||||
vaultOptions.masterkey.changePasswordBtn=Jelszó megváltoztatása
|
vaultOptions.masterkey.changePasswordBtn=Jelszó megváltoztatása
|
||||||
vaultOptions.masterkey.forgetSavedPasswordBtn=Mentett jelszó törlése
|
vaultOptions.masterkey.forgetSavedPasswordBtn=Mentett jelszó törlése
|
||||||
vaultOptions.masterkey.recoveryKeyExplanation=A helyreállítási kulcs az egyetlen módja annak, hogy visszaállítsa a széfhez való hozzáférést, ha elveíti a jelszavát.
|
vaultOptions.masterkey.recoveryKeyExplanation=A helyreállítási kulcs az egyetlen módja annak, hogy visszaállítsa a tárolóhoz való hozzáférést, ha elveszíti a jelszavát.
|
||||||
vaultOptions.masterkey.showRecoveryKeyBtn=Visszaállítási kulcs megjelenítése
|
vaultOptions.masterkey.showRecoveryKeyBtn=Visszaállítási kulcs megjelenítése
|
||||||
vaultOptions.masterkey.recoverPasswordBtn=Jelszó visszaállítása
|
vaultOptions.masterkey.recoverPasswordBtn=Jelszó visszaállítása
|
||||||
|
vaultOptions.masterkey.missingMasterkeyFile=Ezek az beállítások csak akkor érhetők el, ha a masterkey fájl megtalálható a tároló könyvtárában.
|
||||||
## Hub
|
## Hub
|
||||||
vaultOptions.hub=Helyreállítás
|
vaultOptions.hub=Helyreállítás
|
||||||
vaultOptions.hub.convertInfo=Ezen visszaállítási kulcs segítségével átváltoztathatja ezt a Hub széfet egy jelszó-alapú széffé vészhelyzet esetén.
|
vaultOptions.hub.convertInfo=Ezen visszaállítási kulcs segítségével átváltoztathatja ezt a Hub-tárolót egy jelszó-alapú titkosított tárolóvá vészhelyzet esetén.
|
||||||
vaultOptions.hub.convertBtn=Jelszó-alapú széffé alakítás
|
vaultOptions.hub.convertBtn=Jelszó-alapú tárolóvá alakítás
|
||||||
|
|
||||||
# Recovery Key
|
# Recovery Key
|
||||||
## Display Recovery Key
|
## Display Recovery Key
|
||||||
recoveryKey.display.title=Visszaállítási kulcs mutatása
|
recoveryKey.display.title=Visszaállítási kulcs mutatása
|
||||||
recoveryKey.create.message=Jelszó szükséges
|
recoveryKey.create.message=Jelszó szükséges
|
||||||
recoveryKey.create.description=Írja be a jelszavát a "%s" visszaállítási kulcsának megjelenítéséhez:
|
recoveryKey.create.description=Írja be a jelszavát a "%s" visszaállítási kulcsának megjelenítéséhez:
|
||||||
|
recoveryKey.recover.description=Adja meg a jelszót a "%s" tárolóhoz, hogy helyreállítsa a tároló konfigurációját.
|
||||||
recoveryKey.display.description=A következő helyreállítási kulcs használható a "%s" hozzáférésének visszaállítására:
|
recoveryKey.display.description=A következő helyreállítási kulcs használható a "%s" hozzáférésének visszaállítására:
|
||||||
recoveryKey.display.StorageHints=Tartsa nagyon biztonságos helyen. pl.:\n •Tárolja egy jelszókezelővel\n •Mentse el egy USB meghajtóra\n •Nyomtassa egy papírra
|
recoveryKey.display.StorageHints=Tartsa nagyon biztonságos helyen. pl.:\n •Tárolja egy jelszókezelővel\n •Mentse el egy USB meghajtóra\n •Nyomtassa egy papírra
|
||||||
## Reset Password
|
## Reset Password
|
||||||
@@ -506,41 +557,71 @@ recoveryKey.display.StorageHints=Tartsa nagyon biztonságos helyen. pl.:\n •T
|
|||||||
recoveryKey.recover.title=Jelszó visszaállítása
|
recoveryKey.recover.title=Jelszó visszaállítása
|
||||||
recoveryKey.recover.prompt=Írja be a visszaállítási kulcsot a következőhöz "%s":
|
recoveryKey.recover.prompt=Írja be a visszaállítási kulcsot a következőhöz "%s":
|
||||||
recoveryKey.recover.correctKey=Ez a visszaállítási kulcs érvényes
|
recoveryKey.recover.correctKey=Ez a visszaállítási kulcs érvényes
|
||||||
recoveryKey.recover.wrongKey=Ez a visszaállítási kulcs egy másik széfhez tartozik
|
recoveryKey.recover.wrongKey=Ez a visszaállítási kulcs egy másik titkosított tárolóhóz tartozik
|
||||||
recoveryKey.recover.invalidKey=Ez a visszaállítási kulcs nem érvényes
|
recoveryKey.recover.invalidKey=Ez a visszaállítási kulcs nem érvényes
|
||||||
recoveryKey.printout.heading=Cryptomator visszaállítási kulcs\n"%s"\n
|
recoveryKey.printout.heading=Cryptomator visszaállítási kulcs\n"%s"\n
|
||||||
### Reset Password
|
### Reset Password
|
||||||
recoveryKey.recover.resetBtn=Visszaállítás
|
recoveryKey.recover.resetBtn=Visszaállítás
|
||||||
|
recoveryKey.recover.recoverBtn=Helyreállítás
|
||||||
### Recovery Key Password Reset Success
|
### Recovery Key Password Reset Success
|
||||||
recoveryKey.recover.resetSuccess.message=A jelszó alaphelyzetbe állítása sikeresen megtörtént
|
recoveryKey.recover.resetSuccess.message=A jelszó alaphelyzetbe állítása sikeresen megtörtént
|
||||||
recoveryKey.recover.resetSuccess.description=Feloldhatja a széfet az új jelszóval.
|
recoveryKey.recover.resetSuccess.description=Feloldhatja a titkosított tárolót az új jelszóval.
|
||||||
### Recovery Key Vault Config Reset Success
|
### Recovery Key Vault Config Reset Success
|
||||||
|
recoveryKey.recover.resetVaultConfigSuccess.message=Tároló konfiguráció helyreállítva
|
||||||
|
recoveryKey.recover.resetMasterkeyFileSuccess.message=A mesterkulcsfájl helyreállítva
|
||||||
|
recoveryKey.recover.resetMasterkeyFileSuccess.description=Mostantól a jelszavával oldhatja fel a titkosított tárolót.
|
||||||
|
|
||||||
# Recover Vault Config File and/or Masterkey
|
# Recover Vault Config File and/or Masterkey
|
||||||
##Add Existing Vault without recovery - Dialog
|
##Add Existing Vault without recovery - Dialog
|
||||||
|
recover.existing.title=Titkosított tároló hozzáadva
|
||||||
|
recover.existing.message=A tároló sikeresen hozzáadva
|
||||||
|
recover.existing.description=A "%s" titkosított tároló hozzáadásra került a tárolók listájára. Helyreállítási műveletre nem volt szükség.
|
||||||
|
|
||||||
##Vault Already Exists - Dialog
|
##Vault Already Exists - Dialog
|
||||||
|
recover.alreadyExists.title=A titkosított tároló már létezik
|
||||||
|
recover.alreadyExists.message=Ez a tároló már hozzá lett adva
|
||||||
|
recover.alreadyExists.description="%s" nevű titkosított tároló már hozzá volt adva a tárolók listájához, ezért nem került újból hozzáadásra.
|
||||||
|
|
||||||
##Invalid Selection - Dialog
|
##Invalid Selection - Dialog
|
||||||
|
recover.invalidSelection.title=Érvénytelen kiválasztás
|
||||||
|
recover.invalidSelection.message=A kiválasztott elem nem titkosított tároló
|
||||||
|
recover.invalidSelection.description=A kiválasztott mappának érvényes Cryptomator tárolónak kell lennie.
|
||||||
|
|
||||||
## Contact Hub Vault Owner - Dialog
|
## Contact Hub Vault Owner - Dialog
|
||||||
contactHubVaultOwner.title=Hub széf
|
contactHubVaultOwner.title=Hub széf
|
||||||
|
contactHubVaultOwner.message=Ezt a titkosító tárolót a Cryptomator Hub segítségével hozták létre
|
||||||
|
contactHubVaultOwner.description=Kérjük, vegye fel a kapcsolatot a tároló tulajdonosával a hiányzó fájl helyreállítása érdekében. A tároló-sablont a Cryptomator Hubról töltheti le.
|
||||||
|
|
||||||
##Dialog Title
|
##Dialog Title
|
||||||
|
recover.recoverVaultConfig.title=Titkosított tároló konfiguráció helyreállítása
|
||||||
|
recover.recoverMasterkey.title=Mesterkulcsfájl helyreállítása
|
||||||
|
|
||||||
## OnBoarding
|
## OnBoarding
|
||||||
|
recover.onBoarding.chooseMethod=Válasszon helyreállítási módszer:
|
||||||
|
recover.onBoarding.useRecoveryKey=Helyreállítási kulcs használata
|
||||||
|
recover.onBoarding.usePassword=Jelszó használata
|
||||||
|
recover.onBoarding.intro=Ellenőrizze a következőket:
|
||||||
|
recover.onBoarding.pleaseConfirm=Továbblépés előtt ellenőrizze a következőket:
|
||||||
|
recover.onBoarding.otherwisePleaseConfirm=Egyébként erősítse meg:
|
||||||
|
recover.onBoarding.allMissing.intro=Ha ezt a titkosított tárolót a Cryptomator Hub kezeli, akkor a könyvtár tulajdonosának kell helyreállítania az Ön számára.
|
||||||
|
recover.onBoarding.intro.ensure=Minden fájl teljes mértékben szinkronizálva van.
|
||||||
|
recover.onBoarding.affirmation=Elolvastam és megértettem ezeket a követelményeket
|
||||||
|
|
||||||
###Vault Config Missing
|
###Vault Config Missing
|
||||||
|
recover.onBoarding.intro.recoveryKey=Birtokában van a tároló helyreállítási kulcsa és tudja milyen haladó beállításokat használtak.
|
||||||
|
recover.onBoarding.intro.password=Birtokában van a tároló jelszava és tudja milyen haladó beállításokat használtak.
|
||||||
###Masterkey Missing
|
###Masterkey Missing
|
||||||
|
recover.onBoarding.intro.masterkey.recoveryKey=Birtokában van a tároló helyreállítási kulcsa.
|
||||||
|
|
||||||
## Expert Settings
|
## Expert Settings
|
||||||
|
recover.expertSettings.shorteningThreshold.title=Ennek az értéknek meg kell egyeznie a helyreállítás előtt használt értékkel, hogy biztosítva legyen a korábban titkosított adatokkal való kompatibilitás.
|
||||||
|
|
||||||
# Convert Vault
|
# Convert Vault
|
||||||
convertVault.title=Széf átalakítása
|
convertVault.title=Titkosított tároló átalakítása
|
||||||
convertVault.convert.convertBtn.before=Átalakítás
|
convertVault.convert.convertBtn.before=Átalakítás
|
||||||
convertVault.convert.convertBtn.processing=Átalakítás…
|
convertVault.convert.convertBtn.processing=Átalakítás…
|
||||||
convertVault.success.message=Sikeres átalakítás
|
convertVault.success.message=Sikeres átalakítás
|
||||||
convertVault.hubToPassword.success.description=Feloldhatja a széfet a kiválasztott jelszóval Hub hozzáférés nélkül.
|
convertVault.hubToPassword.success.description=Feloldhatja a titkosított tárolót a kiválasztott jelszóval Hub hozzáférés nélkül.
|
||||||
|
|
||||||
# New Password
|
# New Password
|
||||||
newPassword.promptText=Adjon meg egy új jelszót
|
newPassword.promptText=Adjon meg egy új jelszót
|
||||||
@@ -556,13 +637,13 @@ passwordStrength.messageLabel.4=Nagyon erős
|
|||||||
|
|
||||||
# Quit
|
# Quit
|
||||||
quit.title=Alkalmazás bezárása
|
quit.title=Alkalmazás bezárása
|
||||||
quit.message=Vannak feloldott széfek
|
quit.message=Vannak feloldott titkosított tárolók
|
||||||
quit.description=Kérem, erősítse meg a kilépési szándékát. A Cryptomator lezárja az összes feloldott széfet az adatvesztés elkerülése érdekében.
|
quit.description=Kérem, erősítse meg a kilépési szándékát. A Cryptomator lezárja az összes feloldott titkosított tárolót az adatvesztés elkerülése érdekében.
|
||||||
quit.lockAndQuitBtn=Zárolás és kilépés
|
quit.lockAndQuitBtn=Zárolás és kilépés
|
||||||
|
|
||||||
# Forced Quit
|
# Forced Quit
|
||||||
quit.forced.message=Egyes széfeket nem lehetett lezárni
|
quit.forced.message=Egyes tárolókat nem lehetett lezárni
|
||||||
quit.forced.description=A széfek zárolását függőbben lévő műveletek vagy megnyitott fájlok blokkolták. Kényszerítheti a maradék széfek zárolását, de az I/O megszakítása nem mentett adatok elvesztéséhez vezethet.
|
quit.forced.description=A titkosított tárolók zárolását függőbben lévő műveletek vagy megnyitott fájlok blokkolták. Kényszerítheti a maradék tárolók zárolását, de az I/O megszakítása nem mentett adatok elvesztéséhez vezethet.
|
||||||
quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés
|
quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés
|
||||||
|
|
||||||
# Update Reminder
|
# Update Reminder
|
||||||
@@ -580,37 +661,76 @@ dokanySupportEnd.description=A Cryptomator nem támogatja tovább a Dokany köte
|
|||||||
dokanySupportEnd.preferencesBtn=Beállítások megnyitása
|
dokanySupportEnd.preferencesBtn=Beállítások megnyitása
|
||||||
|
|
||||||
#Retry If Readonly
|
#Retry If Readonly
|
||||||
retryIfReadonly.title=Korlátozott Széf Hozzáférés
|
retryIfReadonly.title=Korlátozott tároló hozzáférés
|
||||||
retryIfReadonly.message=Nincs írási jogod a széf könyvtárához
|
retryIfReadonly.message=Nincs írási jogod a tároló könyvtárához
|
||||||
retryIfReadonly.description=A Cryptomator nem tud a széf könyvtárába írni. Átrakhatod a széfet írásvédettre és megpróbálhatod újra. Ezt az opciót kikapcsolhatod a széf beállításaiban.
|
retryIfReadonly.description=A Cryptomator nem tud a tároló könyvtárába írni. Átrakhatod a tárolót írásvédettre és megpróbálhatod újra. Ezt az opciót kikapcsolhatod a titkosított tároló beállításaiban.
|
||||||
retryIfReadonly.retry=Változtatás és Újrapróbálás
|
retryIfReadonly.retry=Változtatás és Újrapróbálás
|
||||||
|
|
||||||
# Share Vault
|
# Share Vault
|
||||||
shareVault.title=Széf megosztása
|
shareVault.title=Titkosított tároló megosztása
|
||||||
shareVault.message=Szeretné megosztani a széfét másokkal?
|
shareVault.message=Szeretné megosztani a titkosított tárolóját másokkal?
|
||||||
shareVault.description=Mindig legyen óvatos, amikor másokkal osztja meg a széfét. Röviden, kövesse az alábbi lépéseket:
|
shareVault.description=Mindig legyen óvatos, amikor másokkal osztja meg a tárolóit. Röviden, kövesse az alábbi lépéseket:
|
||||||
shareVault.instruction.1=Ossza meg a titkosított széf mappájának hozzáférését felhőalapú tárolón keresztül.
|
shareVault.instruction.1=1. Ossza meg a titkosított tároló mappájának hozzáférését felhőalapú tárolón keresztül.
|
||||||
shareVault.instruction.2=2. Ossza meg a széf jelszavát biztonságos módon.
|
shareVault.instruction.2=2. Ossza meg a titkosított tároló jelszavát biztonságos módon.
|
||||||
shareVault.remarkBestPractices=További információkért tekintse meg a legjobb gyakorlatokra vonatkozó javaslatokat a dokumentációnkban.
|
shareVault.remarkBestPractices=További információkért tekintse meg a legjobb gyakorlatokra vonatkozó javaslatokat a dokumentációnkban.
|
||||||
shareVault.docsTooltip=Nyissa meg a dokumentációt, hogy többet megtudjon a széfek megosztásáról.
|
shareVault.docsTooltip=Nyissa meg a dokumentációt, hogy többet megtudjon a titkosított tárolók megosztásáról.
|
||||||
shareVault.hubAd.description=A biztonságos mód csapatokban való munkavégzéshez
|
shareVault.hubAd.description=A biztonságos mód csapatokban való munkavégzéshez
|
||||||
shareVault.hubAd.keyManagement=• Nullaismeretű (Zero-knowledge) kulcskezelés
|
shareVault.hubAd.keyManagement=• Zero-knowledge kulcskezelés
|
||||||
shareVault.hubAd.authentication=• Erős hitelesítés
|
shareVault.hubAd.authentication=• Erős hitelesítés
|
||||||
shareVault.hubAd.encryption=• Végponttól végpontig terjedő titkosítás
|
shareVault.hubAd.encryption=• Végponttól végpontig terjedő titkosítás
|
||||||
shareVault.visitHub=Látogassa meg a Cryptomator Hubot
|
shareVault.visitHub=Látogassa meg a Cryptomator Hubot
|
||||||
|
|
||||||
shareVault.hub.message=Hogyan osszon meg egy Hub széfet
|
shareVault.hub.message=Hogyan osszon meg egy Hub-tárolót
|
||||||
shareVault.hub.description=Ahhoz, hogy megossza a széf tartalmát egy másik csapattaggal, két lépést kell végrehajtania:
|
shareVault.hub.description=Ahhoz, hogy megossza a tároló tartalmát egy másik csapattaggal, két lépést kell végrehajtania:
|
||||||
shareVault.hub.instruction.1=Ossza meg a titkosított széf mappájának hozzáférését felhőalapú tárolón keresztül.
|
shareVault.hub.instruction.1=Ossza meg a titkosított széf mappájának hozzáférését felhőalapú tárolón keresztül.
|
||||||
shareVault.hub.instruction.2=2. Adjon hozzáférést a csapattagnak a Cryptomator Hubban.
|
shareVault.hub.instruction.2=2. Adjon hozzáférést a csapattagnak a Cryptomator Hubban.
|
||||||
shareVault.hub.openHub=Nyissa meg a Cryptomator Hubot
|
shareVault.hub.openHub=Nyissa meg a Cryptomator Hubot
|
||||||
|
|
||||||
# Decrypt File Names
|
# Decrypt File Names
|
||||||
|
decryptNames.title=Fájlnevek visszafejtése
|
||||||
|
decryptNames.filePicker.title=Titkosított fájl kiválasztása
|
||||||
|
decryptNames.filePicker.extensionDescription=Cryptomator titkosított fájl
|
||||||
|
decryptNames.copyTable.tooltip=Táblázat másolása
|
||||||
|
decryptNames.clearTable.tooltip=Táblázat törlése
|
||||||
|
decryptNames.column.encrypted=Titkosított
|
||||||
|
decryptNames.column.decrypted=Visszafejtett
|
||||||
|
decryptNames.copyHint=A cella tartalmának másolása a következővel: %s
|
||||||
|
decryptNames.dropZone.message=Húzza ide a fájlokat, vagy kattintson a kiválasztáshoz
|
||||||
|
decryptNames.dropZone.error.vaultInternalFiles=A titkosított tároló belső fájljai nem visszafejthető névvel lettek kiválasztva
|
||||||
|
decryptNames.dropZone.error.foreignFiles=A kiválasztott fájlok nem a "%s" titkosított tárolóhoz tartoznak
|
||||||
|
decryptNames.dropZone.error.noDirIdBackup=A kiválasztott könyvtár nem tartalmaz dird.c9r fájlt
|
||||||
|
decryptNames.dropZone.error.generic=A fájlnevek visszafejtése nem sikerült
|
||||||
|
|
||||||
|
|
||||||
# Event View
|
# Event View
|
||||||
|
eventView.title=Események
|
||||||
|
eventView.filter.allVaults=Mind
|
||||||
|
eventView.clearListButton.tooltip=Lista törlése
|
||||||
|
eventView.filterVaults=Szűrés tároló szerint
|
||||||
|
eventView.cell.actionsButton.tooltip=Eseményműveletek
|
||||||
## event list entries
|
## event list entries
|
||||||
|
eventView.entry.vaultLocked.description="%s" megnyitása a részletekért
|
||||||
|
eventView.entry.conflictResolved.message=Megoldott ütközések
|
||||||
|
eventView.entry.conflictResolved.showDecrypted=Titkosított fájlok megjelenítése
|
||||||
|
eventView.entry.conflict.message=Ütközés feloldása sikertelen
|
||||||
|
eventView.entry.conflict.showDecrypted=A visszafejtett, eredeti fájl megjelenítése
|
||||||
|
eventView.entry.conflict.showEncrypted=Az ütköző, titkosított fájl megjelenítése
|
||||||
|
eventView.entry.decryptionFailed.message=A visszafejtés sikertelen
|
||||||
|
eventView.entry.decryptionFailed.showEncrypted=Titkosított fájl megjelenítése
|
||||||
|
eventView.entry.brokenDirFile.message=Törött könyvtárhivatkozás
|
||||||
|
eventView.entry.brokenDirFile.showEncrypted=Törött, titkosított hivatkozás megjelenítése
|
||||||
|
eventView.entry.brokenFileNode.message=Meghibásodott fájlrendszer-csomópont
|
||||||
|
eventView.entry.brokenFileNode.showEncrypted=Meghibásodott, titkosított csomópont megjelenítése
|
||||||
|
eventView.entry.brokenFileNode.copyDecrypted=A visszafejtett elérési út másolása
|
||||||
|
eventView.entry.inUse.message=A fájl használatban van
|
||||||
|
eventView.entry.inUse.showDecrypted=Titkosított fájlok megjelenítése
|
||||||
|
eventView.entry.inUse.showEncrypted=Titkosított fájl megjelenítése
|
||||||
|
eventView.entry.inUse.copyUserAndDevice=A zároló felhasználó és eszköznév másolása
|
||||||
|
eventView.entry.inUse.ignoreLock=Használati állapot figyelmen kívül hagyása
|
||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
notification.inUse.message=A fájlt egy másik eszközön használják
|
||||||
|
notification.inUse.description=A fájlt %s használja ezen a rendszeren: %s. Kérje meg, hogy zárja be a fájlt, és várja meg a szinkronizálás befejezését. Az állapot figyelmen kívül hagyásával most is megnyithatja, de ez ütközéseket okozhat, vagy felülírhatja az újabb módosításokat.
|
||||||
|
notification.inUse.action=Használati állapot figyelmen kívül hagyása
|
||||||
|
|||||||
@@ -154,6 +154,8 @@ unlock.error.title=Gagal membuka kunci "%s"
|
|||||||
hub.noKeychain.message=Tidak dapat mengakses perangkat kunci
|
hub.noKeychain.message=Tidak dapat mengakses perangkat kunci
|
||||||
hub.noKeychain.description=Untuk membuka kunci Hub vault, diperlukan perangkat kunci, yang diamankan menggunakan keychain. Untuk melanjutkan, aktifkan “%s” dan pilih keychain di preferensi.
|
hub.noKeychain.description=Untuk membuka kunci Hub vault, diperlukan perangkat kunci, yang diamankan menggunakan keychain. Untuk melanjutkan, aktifkan “%s” dan pilih keychain di preferensi.
|
||||||
hub.noKeychain.openBtn=Buka Preferensi
|
hub.noKeychain.openBtn=Buka Preferensi
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=Percayai
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Menunggu otentikasi…
|
hub.auth.message=Menunggu otentikasi…
|
||||||
hub.auth.description=Anda secara otomatis akan diarahkan ke halaman login.
|
hub.auth.description=Anda secara otomatis akan diarahkan ke halaman login.
|
||||||
@@ -183,6 +185,7 @@ hub.registerFailed.description.deviceAlreadyExists=Perangkat ini sudah terdaftar
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Akses ditolak
|
hub.unauthorized.message=Akses ditolak
|
||||||
hub.unauthorized.description=Anda tidak punya otorisasi untuk membuka brankas ini. Hubungi pemilik brankas untuk meminta akses.
|
hub.unauthorized.description=Anda tidak punya otorisasi untuk membuka brankas ini. Hubungi pemilik brankas untuk meminta akses.
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Tindakan diperlukan
|
hub.requireAccountInit.message=Tindakan diperlukan
|
||||||
hub.requireAccountInit.description.0=Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan dalam
|
hub.requireAccountInit.description.0=Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan dalam
|
||||||
@@ -614,4 +617,4 @@ eventView.filter.allVaults=Semua
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -109,6 +109,13 @@ addvaultwizard.existing.restore=Ripristina…
|
|||||||
addvaultwizard.existing.chooseBtn=Scegli…
|
addvaultwizard.existing.chooseBtn=Scegli…
|
||||||
addvaultwizard.existing.filePickerTitle=Seleziona file cassaforte
|
addvaultwizard.existing.filePickerTitle=Seleziona file cassaforte
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Cassaforte di Cryptomator
|
addvaultwizard.existing.filePickerMimeDesc=Cassaforte di Cryptomator
|
||||||
|
addvaultwizard.existing.notAVault.title=Non è una cassaforte
|
||||||
|
addvaultwizard.existing.notAVault.message=La cartella selezionata non è una cassaforte Cryptomator
|
||||||
|
addvaultwizard.existing.notAVault.description.missingDataDir=Manca la necessaria sottodirectory "d" all'interno di "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.dataNotADirectory=La voce "d" all'interno di "%s" non è una directory.
|
||||||
|
addvaultwizard.existing.notAVault.description.missingVaultConfig=Manca il file necessario "vault.cryptomator" all'interno di "%s".
|
||||||
|
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=Il file "vault.cryptomator" che si trova dentro "%s" non può essere letto a causa di diritti di accesso insufficienti.
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure=La struttura della directory di "%s" non è supportata.
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=Cassaforte "%s" aggiunta.\nDevi sbloccare questa cassaforte per accedere o aggiungere contenuti. Altrimenti, puoi sbloccarla in qualsiasi momento successivo.
|
addvaultwizard.success.nextStepsInstructions=Cassaforte "%s" aggiunta.\nDevi sbloccare questa cassaforte per accedere o aggiungere contenuti. Altrimenti, puoi sbloccarla in qualsiasi momento successivo.
|
||||||
addvaultwizard.success.unlockNow=Sblocca Ora
|
addvaultwizard.success.unlockNow=Sblocca Ora
|
||||||
@@ -161,6 +168,12 @@ unlock.error.title=Sblocco "%s" non riuscito
|
|||||||
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
|
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
|
||||||
hub.noKeychain.description=Per sbloccare le casseforti Hub, è necessaria una chiave del dispositivo, che è protetta tramite un portachiavi. Per procedere, abilita "%s" e seleziona un portachiavi nelle preferenze.
|
hub.noKeychain.description=Per sbloccare le casseforti Hub, è necessaria una chiave del dispositivo, che è protetta tramite un portachiavi. Per procedere, abilita "%s" e seleziona un portachiavi nelle preferenze.
|
||||||
hub.noKeychain.openBtn=Apri Preferenze
|
hub.noKeychain.openBtn=Apri Preferenze
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.message.check=Controllo Configurazione…
|
||||||
|
hub.checkHostTrust.message.ask=Ti fidi di questo host?
|
||||||
|
hub.checkHostTrust.message.ask.plural=Ti fidi di questi host?
|
||||||
|
hub.checkHostTrust.trustBtn=Fidati
|
||||||
|
hub.checkHostTrust.denyBtn=Rifiuta
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=In attesa di autenticazione…
|
hub.auth.message=In attesa di autenticazione…
|
||||||
hub.auth.description=Dovresti essere reindirizzato automaticamente alla pagina di login.
|
hub.auth.description=Dovresti essere reindirizzato automaticamente alla pagina di login.
|
||||||
@@ -192,6 +205,9 @@ hub.archived.description=Questa cassaforte è stata archiviata e non è più acc
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Accesso negato
|
hub.unauthorized.message=Accesso negato
|
||||||
hub.unauthorized.description=Non sei autorizzato ad aprire questa cassaforte. Chiedi l'accesso al proprietario.
|
hub.unauthorized.description=Non sei autorizzato ad aprire questa cassaforte. Chiedi l'accesso al proprietario.
|
||||||
|
### Untrusted Host
|
||||||
|
hub.untrustedHost.message=Host non affidabile
|
||||||
|
hub.untrustedHost.description=La connessione all'Hub è stata bloccata per la tua sicurezza. Se ritieni che l'host Hub sia sicuro, contatta l'amministratore dell'Hub o riprova.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Azione richiesta
|
hub.requireAccountInit.message=Azione richiesta
|
||||||
hub.requireAccountInit.description.0=Per procedere, completa i passaggi richiesti nel tuo
|
hub.requireAccountInit.description.0=Per procedere, completa i passaggi richiesti nel tuo
|
||||||
@@ -305,6 +321,7 @@ preferences.general.debugDirectory=Rivela i file di registro
|
|||||||
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
|
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
|
||||||
preferences.general.keychainBackend=Memorizza le password con
|
preferences.general.keychainBackend=Memorizza le password con
|
||||||
preferences.general.quickAccessService=Aggiungi cassaforte sbloccata all'area di accesso rapido
|
preferences.general.quickAccessService=Aggiungi cassaforte sbloccata all'area di accesso rapido
|
||||||
|
preferences.general.resetTrustedHosts=Azzera gli host affidabili
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=Interfaccia
|
preferences.interface=Interfaccia
|
||||||
preferences.interface.theme=Aspetto
|
preferences.interface.theme=Aspetto
|
||||||
@@ -716,4 +733,4 @@ eventView.entry.inUse.ignoreLock=Ignora lo stato di utilizzo
|
|||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
notification.inUse.message=Il file è in uso su un altro dispositivo
|
notification.inUse.message=Il file è in uso su un altro dispositivo
|
||||||
notification.inUse.description=Il file è aperto da %s su %s. Chiedigli di chiudere il file e permettere che la sincronizzazione termini. È possibile ignorare lo stato ed aprirlo ora, ma questo può causare conflitti o la sovrascrittura delle modifiche più recenti.
|
notification.inUse.description=Il file è aperto da %s su %s. Chiedigli di chiudere il file e permettere che la sincronizzazione termini. È possibile ignorare lo stato ed aprirlo ora, ma questo può causare conflitti o la sovrascrittura delle modifiche più recenti.
|
||||||
notification.inUse.action=Ignora lo Stato di Utilizzo
|
notification.inUse.action=Ignora lo Stato di Utilizzo
|
||||||
|
|||||||
@@ -154,6 +154,8 @@ unlock.error.title=ロック解除 "%s" に失敗しました。
|
|||||||
hub.noKeychain.message=デバイス キーにアクセスできません
|
hub.noKeychain.message=デバイス キーにアクセスできません
|
||||||
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
|
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
|
||||||
hub.noKeychain.openBtn=環境設定を開く
|
hub.noKeychain.openBtn=環境設定を開く
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.trustBtn=信頼する
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=認証を待機中…
|
hub.auth.message=認証を待機中…
|
||||||
hub.auth.description=ログイン ページに自動的にリダイレクトされます。
|
hub.auth.description=ログイン ページに自動的にリダイレクトされます。
|
||||||
@@ -183,6 +185,7 @@ hub.registerFailed.description.deviceAlreadyExists=このデバイスは既に
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=アクセスが拒否されました
|
hub.unauthorized.message=アクセスが拒否されました
|
||||||
hub.unauthorized.description=この金庫を開く権限がありません。金庫の所有者からアクセス許可を貰って下さい。
|
hub.unauthorized.description=この金庫を開く権限がありません。金庫の所有者からアクセス許可を貰って下さい。
|
||||||
|
### Untrusted Host
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=アクションが必要です
|
hub.requireAccountInit.message=アクションが必要です
|
||||||
hub.requireAccountInit.description.0=続行するには以下のサイトで必要な手順を完了してください
|
hub.requireAccountInit.description.0=続行するには以下のサイトで必要な手順を完了してください
|
||||||
@@ -632,4 +635,4 @@ eventView.entry.inUse.copyUserAndDevice=ロックしているユーザーとデ
|
|||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
|
|||||||
@@ -109,6 +109,13 @@ addvaultwizard.existing.restore=복구…
|
|||||||
addvaultwizard.existing.chooseBtn=선택…
|
addvaultwizard.existing.chooseBtn=선택…
|
||||||
addvaultwizard.existing.filePickerTitle=Vault 파일 선택
|
addvaultwizard.existing.filePickerTitle=Vault 파일 선택
|
||||||
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
|
addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault
|
||||||
|
addvaultwizard.existing.notAVault.title=Vault가 아님
|
||||||
|
addvaultwizard.existing.notAVault.message=선택한 폴더는 Cryptomator Vault가 아닙니다
|
||||||
|
addvaultwizard.existing.notAVault.description.missingDataDir="%s" 내부에 필수 "d" 하위 디렉터리가 누락되었습니다.
|
||||||
|
addvaultwizard.existing.notAVault.description.dataNotADirectory="%s" 내부의 "d" 항목은 디렉터리가 아닙니다.
|
||||||
|
addvaultwizard.existing.notAVault.description.missingVaultConfig="%s" 내부에 필수 "vault.cryptomator" 파일이 누락되었습니다.
|
||||||
|
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=접근 권한이 부족하여 "%s" 내부의 "vault.cryptomator" 파일을 읽을 수 없습니다.
|
||||||
|
addvaultwizard.existing.notAVault.description.unsupportedStructure="%s"의 디렉터리 구조는 지원되지 않습니다.
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions="%s" Vault가 추가되었습니다.\n이 Vault를 접근하거나 컨텐츠를 추가하려면 잠금 해제가 필요합니다. 그렇지만 언제든지 잠금 해제가 가능합니다.
|
addvaultwizard.success.nextStepsInstructions="%s" Vault가 추가되었습니다.\n이 Vault를 접근하거나 컨텐츠를 추가하려면 잠금 해제가 필요합니다. 그렇지만 언제든지 잠금 해제가 가능합니다.
|
||||||
addvaultwizard.success.unlockNow=지금 잠금 해제
|
addvaultwizard.success.unlockNow=지금 잠금 해제
|
||||||
@@ -161,6 +168,12 @@ unlock.error.title="%s" 잠금 해제 실패
|
|||||||
hub.noKeychain.message=기기 키에 액세스할 수 없습니다
|
hub.noKeychain.message=기기 키에 액세스할 수 없습니다
|
||||||
hub.noKeychain.description=Hub Vaults를 잠금 해제하려면 키체인을 사용하여 보호되는 기기 키가 필요합니다. 계속하려면 "%s"을(를) 활성화하고 기본 설정에서 키체인을 선택하십시오.
|
hub.noKeychain.description=Hub Vaults를 잠금 해제하려면 키체인을 사용하여 보호되는 기기 키가 필요합니다. 계속하려면 "%s"을(를) 활성화하고 기본 설정에서 키체인을 선택하십시오.
|
||||||
hub.noKeychain.openBtn=설정 열기
|
hub.noKeychain.openBtn=설정 열기
|
||||||
|
### Check Host Authenticity
|
||||||
|
hub.checkHostTrust.message.check=구성 확인 중…
|
||||||
|
hub.checkHostTrust.message.ask=이 호스트를 신뢰하겠습니까?
|
||||||
|
hub.checkHostTrust.message.ask.plural=이 호스트를 신뢰하겠습니까?
|
||||||
|
hub.checkHostTrust.trustBtn=신뢰하기
|
||||||
|
hub.checkHostTrust.denyBtn=거부
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=인증 대기 중…
|
hub.auth.message=인증 대기 중…
|
||||||
hub.auth.description=자동으로 로그인 페이지로 리다이렉트 될 것입니다.
|
hub.auth.description=자동으로 로그인 페이지로 리다이렉트 될 것입니다.
|
||||||
@@ -192,6 +205,9 @@ hub.archived.description=이 Vault는 아카이브되어 더 이상 접근할
|
|||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=액세스 거부됨
|
hub.unauthorized.message=액세스 거부됨
|
||||||
hub.unauthorized.description=해당 Vault에 접근하도록 허가되지 않았습니다. Vault의 소유자에게 권한을 요청하세요.
|
hub.unauthorized.description=해당 Vault에 접근하도록 허가되지 않았습니다. Vault의 소유자에게 권한을 요청하세요.
|
||||||
|
### Untrusted Host
|
||||||
|
hub.untrustedHost.message=호스트를 신뢰할 수 없음
|
||||||
|
hub.untrustedHost.description=보안상의 이유로 Hub 연결이 차단되었습니다. Hub 호스트가 안전하다고 판단되시면 Hub 관리자에게 문의하거나 다시 시도해 주세요.
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=조치가 필요함
|
hub.requireAccountInit.message=조치가 필요함
|
||||||
hub.requireAccountInit.description.0=진행하려면 필요한 조치를 완료하십시오:
|
hub.requireAccountInit.description.0=진행하려면 필요한 조치를 완료하십시오:
|
||||||
@@ -199,7 +215,7 @@ hub.requireAccountInit.description.1=Hub 사용자 프로필
|
|||||||
hub.requireAccountInit.description.2=.
|
hub.requireAccountInit.description.2=.
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=Hub 라이선스가 잘못되었습니다.
|
hub.invalidLicense.message=Hub 라이선스가 잘못되었습니다.
|
||||||
hub.invalidLicense.description=Cryptomator Hub 인스턴스에 잘못된 라이선스가 있습니다. 라이선스를 업그레이드하거나 갱신하려면 허브 관리자에게 알리십시오.
|
hub.invalidLicense.description=Cryptomator Hub 인스턴스에 잘못된 라이선스가 있습니다. 라이선스를 업그레이드하거나 갱신하려면 Hub 관리자에게 알리십시오.
|
||||||
|
|
||||||
# Lock
|
# Lock
|
||||||
## Force
|
## Force
|
||||||
@@ -305,6 +321,7 @@ preferences.general.debugDirectory=로그 파일 표시
|
|||||||
preferences.general.autoStart=시스템 시작 시 Cryptomator 실행
|
preferences.general.autoStart=시스템 시작 시 Cryptomator 실행
|
||||||
preferences.general.keychainBackend=다음 경로에 비밀번호 저장
|
preferences.general.keychainBackend=다음 경로에 비밀번호 저장
|
||||||
preferences.general.quickAccessService=열린 Vault를 빠른 접근 위치에 추가하기
|
preferences.general.quickAccessService=열린 Vault를 빠른 접근 위치에 추가하기
|
||||||
|
preferences.general.resetTrustedHosts=신뢰하는 호스트 목록 초기화
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=인터페이스
|
preferences.interface=인터페이스
|
||||||
preferences.interface.theme=테마
|
preferences.interface.theme=테마
|
||||||
@@ -581,7 +598,7 @@ recover.recoverMasterkey.title=마스터키 복구하기
|
|||||||
|
|
||||||
## OnBoarding
|
## OnBoarding
|
||||||
recover.onBoarding.chooseMethod=복구 방법을 선택하세요:
|
recover.onBoarding.chooseMethod=복구 방법을 선택하세요:
|
||||||
recover.onBoarding.useRecoveryKey=복구키 사용하기
|
recover.onBoarding.useRecoveryKey=복구 키 사용하기
|
||||||
recover.onBoarding.usePassword=비밀번호 사용하기
|
recover.onBoarding.usePassword=비밀번호 사용하기
|
||||||
recover.onBoarding.intro=아래 사항을 정확히 읽고 확인하세요:
|
recover.onBoarding.intro=아래 사항을 정확히 읽고 확인하세요:
|
||||||
recover.onBoarding.pleaseConfirm=진행하기 전, 다음 사항을 확인해 주십시오:
|
recover.onBoarding.pleaseConfirm=진행하기 전, 다음 사항을 확인해 주십시오:
|
||||||
@@ -700,7 +717,7 @@ eventView.entry.conflict.showDecrypted=복호화된 원본 파일 보기
|
|||||||
eventView.entry.conflict.showEncrypted=충돌하는 암호화된 파일 보기
|
eventView.entry.conflict.showEncrypted=충돌하는 암호화된 파일 보기
|
||||||
eventView.entry.decryptionFailed.message=복호화 실패
|
eventView.entry.decryptionFailed.message=복호화 실패
|
||||||
eventView.entry.decryptionFailed.showEncrypted=암호화된 파일 보기
|
eventView.entry.decryptionFailed.showEncrypted=암호화된 파일 보기
|
||||||
eventView.entry.brokenDirFile.message=망가진 디렉터리 링크
|
eventView.entry.brokenDirFile.message=잘못된 디렉터리 링크
|
||||||
eventView.entry.brokenDirFile.showEncrypted=망가진 암호화된 링크 보기
|
eventView.entry.brokenDirFile.showEncrypted=망가진 암호화된 링크 보기
|
||||||
eventView.entry.brokenFileNode.message=망가진 파일 시스템 노드
|
eventView.entry.brokenFileNode.message=망가진 파일 시스템 노드
|
||||||
eventView.entry.brokenFileNode.showEncrypted=망가진 암호화된 노드 보기
|
eventView.entry.brokenFileNode.showEncrypted=망가진 암호화된 노드 보기
|
||||||
@@ -716,4 +733,4 @@ eventView.entry.inUse.ignoreLock=사용 여부 상태 무시
|
|||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
notification.inUse.message=다른 기기에서 파일 사용 중
|
notification.inUse.message=다른 기기에서 파일 사용 중
|
||||||
notification.inUse.description=해당 파일은 %s이(가) %s의 컴퓨터에서 열어 놓은 상태입니다. 파일을 닫고 동기화가 완료될 때까지 기다리도록 요청하세요. 상태를 무시하고 지금 파일을 열 수도 있지만, 이렇게 하면 충돌이 발생하거나 최신 변경 사항이 덮어쓰여질 수 있습니다.
|
notification.inUse.description=해당 파일은 %s이(가) %s의 컴퓨터에서 열어 놓은 상태입니다. 파일을 닫고 동기화가 완료될 때까지 기다리도록 요청하세요. 상태를 무시하고 지금 파일을 열 수도 있지만, 이렇게 하면 충돌이 발생하거나 최신 변경 사항이 덮어쓰여질 수 있습니다.
|
||||||
notification.inUse.action=사용 여부 상태 무시
|
notification.inUse.action=사용 여부 상태 무시
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user