mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-23 00:14:40 +00:00
Compare commits
37
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 |
@@ -48,6 +48,9 @@ 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: '26.0.1+8'
|
JAVA_VERSION: '26.0.1+8'
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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:
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ 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
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ env:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-version:
|
check-version:
|
||||||
name: Checkout latest jdk version
|
name: Checkout latest jdk version
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ env:
|
|||||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/25.0.3/openjfx-25.0.3_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: 'e3fd682354346845d2944a2da2b1ff2b6cb9259d92027f2f9c121b9b93c5e42f'
|
OPENJFX_JMODS_AARCH64_HASH: 'e3fd682354346845d2944a2da2b1ff2b6cb9259d92027f2f9c121b9b93c5e42f'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
get-version:
|
get-version:
|
||||||
uses: ./.github/workflows/get-version.yml
|
uses: ./.github/workflows/get-version.yml
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-dependencies:
|
check-dependencies:
|
||||||
uses: skymatic/workflows/.github/workflows/run-dependency-check.yml@8356563bf7b8d1c8d693f75ca487e8f57573cec9 # v3.1.0
|
uses: skymatic/workflows/.github/workflows/run-dependency-check.yml@8356563bf7b8d1c8d693f75ca487e8f57573cec9 # v3.1.0
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ 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
|
||||||
|
|||||||
@@ -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,6 +25,9 @@ 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||||
@@ -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,6 +120,8 @@ 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 }}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -28,6 +28,9 @@ env:
|
|||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: 26
|
JAVA_VERSION: 26
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
determine-version:
|
determine-version:
|
||||||
name: 'Determines the version following semver'
|
name: 'Determines the version following semver'
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -62,6 +62,9 @@ env:
|
|||||||
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 }}
|
||||||
@@ -192,7 +195,6 @@ jobs:
|
|||||||
-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
|
||||||
|
|||||||
@@ -60,6 +60,9 @@ env:
|
|||||||
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 }}
|
||||||
@@ -191,7 +194,6 @@ jobs:
|
|||||||
-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
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ 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@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
@@ -102,7 +104,7 @@ 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@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
uses: rtCamp/action-slack-notify@33ca3be66c6f378fe1610fd1d5258632dbed5e58 # v2.4.0
|
||||||
@@ -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) }} }'
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ defaults:
|
|||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Compile and Test
|
name: Compile and Test
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ env:
|
|||||||
JAVA_DIST: 'temurin'
|
JAVA_DIST: 'temurin'
|
||||||
JAVA_VERSION: 26
|
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
|
||||||
@@ -49,18 +52,3 @@ jobs:
|
|||||||
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@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
||||||
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: ./mvnw -B verify -Pdependency-check -DskipTests
|
|
||||||
env:
|
|
||||||
NVD_API_KEY: ${{ secrets.NVD_API_KEY }}
|
|
||||||
@@ -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,7 +85,7 @@ 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: '26.0.1+8'
|
java-version: '26.0.1+8'
|
||||||
java-package: 'jdk'
|
java-package: 'jdk'
|
||||||
steps:
|
steps:
|
||||||
@@ -229,22 +232,23 @@ jobs:
|
|||||||
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 DLLs with Actalis CodeSigner
|
- name: Sign Scripts with Azure Trusted Signing
|
||||||
if: inputs.sign || github.event_name == 'release'
|
if: inputs.sign || github.event_name == 'schedule'
|
||||||
uses: skymatic/workflows/.github/actions/win-sign-action@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # no specific version
|
uses: ./.github/actions/win-sign-action
|
||||||
with:
|
with:
|
||||||
base-dir: 'appdir'
|
base-dir: ${{ github.workspace }}\appdir\Cryptomator
|
||||||
file-extensions: 'dll,exe,ps1'
|
file-extensions: 'ps1'
|
||||||
recursive: true
|
recursive: false
|
||||||
sign-description: 'Cryptomator'
|
append-signature: false # Powershell scripts cannot be signed in append mode, see #4260
|
||||||
sign-url: 'https://cryptomator.org'
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
username: ${{ secrets.WIN_CODESIGN_USERNAME }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
password: ${{ secrets.WIN_CODESIGN_PW }}
|
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: |
|
||||||
@@ -268,7 +272,6 @@ jobs:
|
|||||||
"-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: Create file association file from template
|
- name: Create file association file from template
|
||||||
working-directory: dist/win
|
working-directory: dist/win
|
||||||
@@ -347,7 +350,7 @@ 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: '26.0.1+8'
|
java-version: '26.0.1+8'
|
||||||
java-package: 'jdk'
|
java-package: 'jdk'
|
||||||
steps:
|
steps:
|
||||||
@@ -383,7 +386,6 @@ jobs:
|
|||||||
"-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: |
|
||||||
@@ -429,16 +431,6 @@ jobs:
|
|||||||
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 burn engine with Actalis CodeSigner
|
|
||||||
if: inputs.sign || github.event_name == 'release'
|
|
||||||
uses: skymatic/workflows/.github/actions/win-sign-action@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # no specific version
|
|
||||||
with:
|
|
||||||
base-dir: 'tmp'
|
|
||||||
file-extensions: 'exe'
|
|
||||||
sign-description: 'Cryptomator Bundle Installer'
|
|
||||||
sign-url: 'https://cryptomator.org'
|
|
||||||
username: ${{ secrets.WIN_CODESIGN_USERNAME }}
|
|
||||||
password: ${{ secrets.WIN_CODESIGN_PW }}
|
|
||||||
- name: Reattach signed burn engine to installer
|
- name: Reattach signed burn engine to installer
|
||||||
if: inputs.sign || github.event_name == 'schedule'
|
if: inputs.sign || github.event_name == 'schedule'
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -456,16 +448,6 @@ jobs:
|
|||||||
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 installer with Actalis CodeSigner
|
|
||||||
if: inputs.sign || github.event_name == 'release'
|
|
||||||
uses: skymatic/workflows/.github/actions/win-sign-action@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # no specific version
|
|
||||||
with:
|
|
||||||
base-dir: 'installer'
|
|
||||||
file-extensions: 'exe'
|
|
||||||
sign-description: 'Cryptomator Bundle Installer'
|
|
||||||
sign-url: 'https://cryptomator.org'
|
|
||||||
username: ${{ secrets.WIN_CODESIGN_USERNAME }}
|
|
||||||
password: ${{ secrets.WIN_CODESIGN_PW }}
|
|
||||||
- id: sha256sum
|
- id: sha256sum
|
||||||
run: |
|
run: |
|
||||||
read -ra CMD_OUTPUT < <(sha256sum installer/Cryptomator-*.exe)
|
read -ra CMD_OUTPUT < <(sha256sum installer/Cryptomator-*.exe)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
+22
-2
@@ -8,14 +8,28 @@ 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
|
### Added
|
||||||
* New error dialog if importing a vault fails ([#4243](https://github.com/cryptomator/cryptomator/pull/4243))
|
* New error dialog if importing a vault fails ([#4243](https://github.com/cryptomator/cryptomator/pull/4243))
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* Fixed Cryptomator file extensions were not registered on Windows ([#4219](https://github.com/cryptomator/cryptomator/issues/4219))
|
* 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 ([#4199](https://github.com/cryptomator/cryptomator/pull/4199))
|
* 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 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 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))
|
* Fixed localhost alias on Windows was not removed on uninstall ([#3993](https://github.com/cryptomator/cryptomator/issues/3993))
|
||||||
@@ -24,6 +38,12 @@ Changes to prior versions can be found on the [Github release page](https://gith
|
|||||||
* 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 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))
|
* 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:
|
* Updated dependencies:
|
||||||
- `org.cryptomator:webdav-nio-adapter` from 3.0.1 to 3.0.2
|
- `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.cryptomator:integrations-api` from 1.8.0 to 1.9.0
|
||||||
|
|||||||
@@ -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,7 +79,7 @@ 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)
|
||||||
|
|
||||||
### Run Maven
|
### Run Maven
|
||||||
|
|
||||||
@@ -88,6 +89,20 @@ For more information on the security details visit [cryptomator.org](https://doc
|
|||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -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
-2
@@ -143,8 +143,7 @@ cp ../embedded.provisionprofile ${APP_NAME}.app/Contents/
|
|||||||
-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
+6
-13
@@ -40,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)'
|
||||||
@@ -65,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)
|
||||||
|
|
||||||
@@ -79,7 +74,7 @@ $copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor"
|
|||||||
|
|
||||||
# compile
|
# compile
|
||||||
Invoke-CommandWithExitCheck -Command `
|
Invoke-CommandWithExitCheck -Command `
|
||||||
"mvn" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "clean", "package", "-DskipTests", "-Pwin")
|
"../../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
|
||||||
@@ -212,14 +207,13 @@ if ($LASTEXITCODE -ne 0) {
|
|||||||
|
|
||||||
#Create RTF license for msi
|
#Create RTF license for msi
|
||||||
Invoke-CommandWithExitCheck -Command `
|
Invoke-CommandWithExitCheck -Command `
|
||||||
"mvn" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "license:add-third-party", `
|
"../../mvnw.cmd" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "license:add-third-party", `
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf", `
|
"-Dlicense.thirdPartyFilename=license.rtf", `
|
||||||
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl", `
|
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl", `
|
||||||
"-Dlicense.outputDirectory=$buildDir\resources\", `
|
"-Dlicense.outputDirectory=$buildDir\resources\", `
|
||||||
"-Dlicense.includedScopes=compile", `
|
"-Dlicense.includedScopes=compile", `
|
||||||
"-Dlicense.excludedGroups=^org\.cryptomator", `
|
"-Dlicense.excludedGroups=^org\.cryptomator", `
|
||||||
"-Dlicense.failOnMissing=true", `
|
"-Dlicense.failOnMissing=true")
|
||||||
"-Dlicense.licenseMergesUrl=file:///$buildDir/../../license/merges")
|
|
||||||
|
|
||||||
# patch app dir
|
# patch app dir
|
||||||
Copy-Item "contrib\*" -Destination "$AppName"
|
Copy-Item "contrib\*" -Destination "$AppName"
|
||||||
@@ -259,14 +253,13 @@ Invoke-CommandWithExitCheck -Command `
|
|||||||
|
|
||||||
#Create RTF license for bundle
|
#Create RTF license for bundle
|
||||||
Invoke-CommandWithExitCheck -Command `
|
Invoke-CommandWithExitCheck -Command `
|
||||||
"mvn" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "license:add-third-party", `
|
"../../mvnw.cmd" -Arguments @("-B", "-f", "$buildDir/../../pom.xml", "license:add-third-party", `
|
||||||
"-Dlicense.thirdPartyFilename=license.rtf", `
|
"-Dlicense.thirdPartyFilename=license.rtf", `
|
||||||
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl", `
|
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl", `
|
||||||
"-Dlicense.outputDirectory=$buildDir\bundle\resources\", `
|
"-Dlicense.outputDirectory=$buildDir\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:///$buildDir/../../license/merges")
|
|
||||||
|
|
||||||
# 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'
|
||||||
|
|||||||
+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
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
<cryptomator.integrations.version>1.9.0</cryptomator.integrations.version>
|
<cryptomator.integrations.version>1.9.0</cryptomator.integrations.version>
|
||||||
<cryptomator.integrations.win.version>1.6.1</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.2</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>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<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.4</jackson.version>
|
<jackson.version>2.21.6</jackson.version>
|
||||||
<javafx.version>25.0.3</javafx.version>
|
<javafx.version>25.0.3</javafx.version>
|
||||||
<jwt.version>4.5.2</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>
|
||||||
@@ -72,9 +72,16 @@
|
|||||||
<mvn-dependency.version>3.11.0</mvn-dependency.version>
|
<mvn-dependency.version>3.11.0</mvn-dependency.version>
|
||||||
<mvn-surefire.version>3.5.6</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>
|
||||||
@@ -299,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>
|
||||||
@@ -320,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>
|
||||||
@@ -399,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>
|
||||||
@@ -415,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>
|
||||||
@@ -587,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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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())) //
|
||||||
|
|||||||
+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
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -173,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
|
||||||
|
|||||||
@@ -18,11 +18,6 @@ generic.button.print=طباعة
|
|||||||
generic.button.remove=حذف
|
generic.button.remove=حذف
|
||||||
|
|
||||||
## Vault state
|
## Vault state
|
||||||
vault.state.locked=مقفلة
|
|
||||||
vault.state.unlocked=مفتوحة
|
|
||||||
vault.state.missing=مفقودة
|
|
||||||
vault.state.migrationNeeded=الترحيل مطلوب
|
|
||||||
vault.state.processing=جارٍ المعالجة
|
|
||||||
vault.state.error=خطأ
|
vault.state.error=خطأ
|
||||||
|
|
||||||
# Error
|
# Error
|
||||||
@@ -105,17 +100,9 @@ addvault.new.readme.accessLocation.4=لا تتردد في إزالة هذا ال
|
|||||||
## Existing
|
## Existing
|
||||||
addvaultwizard.existing.title=أضِف مخزن موجود
|
addvaultwizard.existing.title=أضِف مخزن موجود
|
||||||
addvaultwizard.existing.instruction=اختر ملف "vault.cryptomator" من خزينتك الحالية. إذا كان يوجد فقط ملف اسمه "masterkey.cryptomator"، اختره عوضاً عنه.
|
addvaultwizard.existing.instruction=اختر ملف "vault.cryptomator" من خزينتك الحالية. إذا كان يوجد فقط ملف اسمه "masterkey.cryptomator"، اختره عوضاً عنه.
|
||||||
addvaultwizard.existing.restore=استعادة…
|
|
||||||
addvaultwizard.existing.chooseBtn=اختر…
|
addvaultwizard.existing.chooseBtn=اختر…
|
||||||
addvaultwizard.existing.filePickerTitle=حدد مِلَفّ المخزن
|
addvaultwizard.existing.filePickerTitle=حدد مِلَفّ المخزن
|
||||||
addvaultwizard.existing.filePickerMimeDesc=مخزن Cryptomator
|
addvaultwizard.existing.filePickerMimeDesc=مخزن Cryptomator
|
||||||
addvaultwizard.existing.notAVault.title=ليست خزنة
|
|
||||||
addvaultwizard.existing.notAVault.message=المجلد المحدد ليس خزنة Cryptomator
|
|
||||||
addvaultwizard.existing.notAVault.description.missingDataDir=المجلد الفرعي المطلوب "d" مفقود داخل "%s".
|
|
||||||
addvaultwizard.existing.notAVault.description.dataNotADirectory=العنصر "d" داخل "%s" ليس مجلدًا.
|
|
||||||
addvaultwizard.existing.notAVault.description.missingVaultConfig=الملف المطلوب "vault.cryptomator" مفقود داخل "%s".
|
|
||||||
addvaultwizard.existing.notAVault.description.vaultConfigAccessDenied=تعذّر قراءة الملف "vault.cryptomator" داخل "%s" بسبب حقوق وصول غير كافية.
|
|
||||||
addvaultwizard.existing.notAVault.description.unsupportedStructure=بنية الدليل لـ "%s" غير مدعومة.
|
|
||||||
## Success
|
## Success
|
||||||
addvaultwizard.success.nextStepsInstructions=تم إضافة مخزن "%s".\nتحتاج إلى فتح هذا المخزن للوصول أو إضافة محتويات إليه. بدلاً من ذلك، يمكنك فتحه في أي وقت لاحق.
|
addvaultwizard.success.nextStepsInstructions=تم إضافة مخزن "%s".\nتحتاج إلى فتح هذا المخزن للوصول أو إضافة محتويات إليه. بدلاً من ذلك، يمكنك فتحه في أي وقت لاحق.
|
||||||
addvaultwizard.success.unlockNow=افتح الان
|
addvaultwizard.success.unlockNow=افتح الان
|
||||||
@@ -144,7 +131,6 @@ unlock.unlockBtn=افتح
|
|||||||
## Select
|
## Select
|
||||||
unlock.chooseMasterkey.message=لم يتم العثور على مفتاح التشفير الرئيسي
|
unlock.chooseMasterkey.message=لم يتم العثور على مفتاح التشفير الرئيسي
|
||||||
unlock.chooseMasterkey.description=لم يتمكن Cryptomator من العثور على مفتاح التشفير الرئيسي للمخزن "%s". الرجاء اختيار الملف يدوياً.
|
unlock.chooseMasterkey.description=لم يتمكن Cryptomator من العثور على مفتاح التشفير الرئيسي للمخزن "%s". الرجاء اختيار الملف يدوياً.
|
||||||
unlock.chooseMasterkey.restoreInstead=استعادة ملف المفتاح الرئيسي بدلاً من ذلك
|
|
||||||
unlock.chooseMasterkey.filePickerTitle=اختر ملف الـ Masterkey
|
unlock.chooseMasterkey.filePickerTitle=اختر ملف الـ Masterkey
|
||||||
unlock.chooseMasterkey.filePickerMimeDesc=مفتاح التشفير الرئيسي في Cryptomator
|
unlock.chooseMasterkey.filePickerMimeDesc=مفتاح التشفير الرئيسي في Cryptomator
|
||||||
## Success
|
## Success
|
||||||
@@ -169,14 +155,7 @@ hub.noKeychain.message=غير قادر على الوصول إلى مفتاح ا
|
|||||||
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
|
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
|
||||||
hub.noKeychain.openBtn=فتح التفضيلات
|
hub.noKeychain.openBtn=فتح التفضيلات
|
||||||
### Check Host Authenticity
|
### Check Host Authenticity
|
||||||
hub.checkHostTrust.message.check=جارٍ التحقق من الإعدادات…
|
|
||||||
hub.checkHostTrust.message.ask=هل تثق بهذا المضيف؟
|
|
||||||
hub.checkHostTrust.message.ask.plural=هل تثق بهذه المضيفين؟
|
|
||||||
hub.checkHostTrust.description.ask=لا يتعرف Cryptomator على هذا المضيف. لفتح الخزنة، يجب الوثوق به. لا تثق به إلا إذا كنت تتعرف على العنوان أدناه.
|
|
||||||
hub.checkHostTrust.description.ask.plural=لا يتعرف Cryptomator على هذه المضيفين. لفتح الخزنة، يجب الوثوق بها. لا تثق بها إلا إذا كنت تتعرف على العناوين أدناه.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=نسخ العنوان إلى الحافظة
|
|
||||||
hub.checkHostTrust.trustBtn=ثق
|
hub.checkHostTrust.trustBtn=ثق
|
||||||
hub.checkHostTrust.denyBtn=رفض
|
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=جاري الانتظار للمصادقة…
|
hub.auth.message=جاري الانتظار للمصادقة…
|
||||||
hub.auth.description=يجب أن يتم إعادة توجيهك تلقائياً إلى صفحة تسجيل الدخول.
|
hub.auth.description=يجب أن يتم إعادة توجيهك تلقائياً إلى صفحة تسجيل الدخول.
|
||||||
@@ -203,14 +182,10 @@ hub.registerFailed.message=فشل تسجيل الجهاز
|
|||||||
hub.registerFailed.description.generic=حدث خطأ في عملية تسجيل الاسم. لمزيد من التفاصيل، راجع سجل التطبيق.
|
hub.registerFailed.description.generic=حدث خطأ في عملية تسجيل الاسم. لمزيد من التفاصيل، راجع سجل التطبيق.
|
||||||
hub.registerFailed.description.deviceAlreadyExists=هذا الجهاز مسجل لمستخدم مختلف بالفعل. حاول تغيير حساب المستخدم أو استخدام جهاز مختلف.
|
hub.registerFailed.description.deviceAlreadyExists=هذا الجهاز مسجل لمستخدم مختلف بالفعل. حاول تغيير حساب المستخدم أو استخدام جهاز مختلف.
|
||||||
### Archived
|
### Archived
|
||||||
hub.archived.message=الخزنة مؤرشفة
|
|
||||||
hub.archived.description=تمت أرشفة هذه الخزنة ولم تعد قابلة للوصول. يرجى التواصل مع مالك الخزنة.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=تم رفض الوصول
|
hub.unauthorized.message=تم رفض الوصول
|
||||||
hub.unauthorized.description=غير مسموح لك بفتح هذا المستودع. اتصل بمالك المستودع لطلب الوصول.
|
hub.unauthorized.description=غير مسموح لك بفتح هذا المستودع. اتصل بمالك المستودع لطلب الوصول.
|
||||||
### Untrusted Host
|
### 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=للمتابعة، يرجى إكمال الخطوات المطلوبة في
|
||||||
@@ -288,8 +263,6 @@ health.check.detail.checkFinishedAndFound=تم انتهاء الفحص. فضلا
|
|||||||
health.check.detail.checkFailed=الفحص توقف بسبب خطأ.
|
health.check.detail.checkFailed=الفحص توقف بسبب خطأ.
|
||||||
health.check.detail.checkCancelled=تم إلغاء الفحص.
|
health.check.detail.checkCancelled=تم إلغاء الفحص.
|
||||||
health.check.detail.listFilters.label=التصفية
|
health.check.detail.listFilters.label=التصفية
|
||||||
health.check.detail.filterSeverity=تصفية حسب الخطورة
|
|
||||||
health.check.detail.filterFixState=تصفية حسب حالة الإصلاح
|
|
||||||
health.check.detail.fixAllSpecificBtn=إصلاح كل الأنواع
|
health.check.detail.fixAllSpecificBtn=إصلاح كل الأنواع
|
||||||
health.check.exportBtn=تصدير التقرير
|
health.check.exportBtn=تصدير التقرير
|
||||||
## Result view
|
## Result view
|
||||||
@@ -324,7 +297,6 @@ preferences.general.debugDirectory=عرض ملفات السجل
|
|||||||
preferences.general.autoStart=تشغيل Cryptomator عند بدء تشغيل النظام
|
preferences.general.autoStart=تشغيل Cryptomator عند بدء تشغيل النظام
|
||||||
preferences.general.keychainBackend=تخزين كلمات المرور مع
|
preferences.general.keychainBackend=تخزين كلمات المرور مع
|
||||||
preferences.general.quickAccessService=إضافة الخزانات المفتوحة إلى منطقة الوصول السريع
|
preferences.general.quickAccessService=إضافة الخزانات المفتوحة إلى منطقة الوصول السريع
|
||||||
preferences.general.resetTrustedHosts=إعادة تعيين المضيفين الموثوقين
|
|
||||||
## Interface
|
## Interface
|
||||||
preferences.interface=الواجهة
|
preferences.interface=الواجهة
|
||||||
preferences.interface.theme=الشكل والمظهر
|
preferences.interface.theme=الشكل والمظهر
|
||||||
@@ -363,13 +335,8 @@ preferences.updates.lastUpdateCheck.never=مطلقاً
|
|||||||
preferences.updates.lastUpdateCheck.recently=مؤخراً
|
preferences.updates.lastUpdateCheck.recently=مؤخراً
|
||||||
preferences.updates.lastUpdateCheck.daysAgo=منذ %s يوم
|
preferences.updates.lastUpdateCheck.daysAgo=منذ %s يوم
|
||||||
preferences.updates.lastUpdateCheck.hoursAgo=منذ %s ساعة
|
preferences.updates.lastUpdateCheck.hoursAgo=منذ %s ساعة
|
||||||
preferences.updates.prohibitedDueToUnlockedVaults.1=يرجى
|
|
||||||
preferences.updates.prohibitedDueToUnlockedVaults.2=قفل خزائنك
|
|
||||||
preferences.updates.prohibitedDueToUnlockedVaults.3=لتثبيت التحديث.
|
|
||||||
preferences.updates.checkFailed=فشل في البحث عن تحديثات البرنامج تحقق من اتصالك بالإنترنت أو حاول مرة أخرى لاحقاً.
|
preferences.updates.checkFailed=فشل في البحث عن تحديثات البرنامج تحقق من اتصالك بالإنترنت أو حاول مرة أخرى لاحقاً.
|
||||||
preferences.updates.updateFailed=فشل التحديث. يرجى تثبيت التحديث يدويًا.
|
|
||||||
preferences.updates.upToDate=Cryptomator محدث لاخر نسخة.
|
preferences.updates.upToDate=Cryptomator محدث لاخر نسخة.
|
||||||
preferences.updates.visitDownloadPage=زيارة صفحة التنزيل
|
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
preferences.contribute=ادعمنا
|
preferences.contribute=ادعمنا
|
||||||
@@ -380,7 +347,6 @@ preferences.contribute.promptText=قم بلصق رمز شهادة الداعم
|
|||||||
preferences.contribute.thankYou=نشكرك على دعمك لتطوير Cryptomator مفتوح المصدر!
|
preferences.contribute.thankYou=نشكرك على دعمك لتطوير Cryptomator مفتوح المصدر!
|
||||||
preferences.contribute.donate=تبرع
|
preferences.contribute.donate=تبرع
|
||||||
preferences.contribute.sponsor=الراعي
|
preferences.contribute.sponsor=الراعي
|
||||||
preferences.contribute.removeCert.tooltip=إزالة الشهادة
|
|
||||||
|
|
||||||
### Remove License Key Dialog
|
### Remove License Key Dialog
|
||||||
removeCert.title=إزالة الشهادة
|
removeCert.title=إزالة الشهادة
|
||||||
@@ -390,7 +356,6 @@ removeCert.description=الميزات الأساسية لـ Cryptomator غير
|
|||||||
|
|
||||||
## About
|
## About
|
||||||
preferences.about=حول البرنامج
|
preferences.about=حول البرنامج
|
||||||
preferences.about.thirdPartyLicenses=تراخيص الأطراف الثالثة
|
|
||||||
|
|
||||||
# Vault Statistics
|
# Vault Statistics
|
||||||
stats.title=إحصائيات عن %s
|
stats.title=إحصائيات عن %s
|
||||||
@@ -430,7 +395,6 @@ stats.access.total=مجموع الوصول: %d
|
|||||||
# Main Window
|
# Main Window
|
||||||
## Vault List
|
## Vault List
|
||||||
main.vaultlist=المخازن
|
main.vaultlist=المخازن
|
||||||
main.vaultlist.listEntry=الخزنة %s (%s)
|
|
||||||
main.vaultlist.emptyList.onboardingInstruction=انقر هنا لإضافة خزنة
|
main.vaultlist.emptyList.onboardingInstruction=انقر هنا لإضافة خزنة
|
||||||
main.vaultlist.contextMenu.remove=حذف…
|
main.vaultlist.contextMenu.remove=حذف…
|
||||||
main.vaultlist.contextMenu.lock=قفل
|
main.vaultlist.contextMenu.lock=قفل
|
||||||
@@ -439,20 +403,13 @@ main.vaultlist.contextMenu.unlockNow=افتح الان
|
|||||||
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
|
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
|
||||||
main.vaultlist.contextMenu.reveal=اظهار القرص
|
main.vaultlist.contextMenu.reveal=اظهار القرص
|
||||||
main.vaultlist.contextMenu.share=مشاركة…
|
main.vaultlist.contextMenu.share=مشاركة…
|
||||||
main.vaultlist.addVaultBtn.menuItemNew=إنشاء خزنة جديدة…
|
|
||||||
main.vaultlist.addVaultBtn.menuItemExisting=فتح خزنة موجودة…
|
|
||||||
main.vaultlist.addVaultBtn.menuItemRecover=استعادة خزنة موجودة…
|
|
||||||
main.vaultlist.addVaultButton.tooltip=أضِف مخزنًا
|
main.vaultlist.addVaultButton.tooltip=أضِف مخزنًا
|
||||||
main.vaultlist.showEventsButton.tooltip=فتح عرض الأحداث
|
|
||||||
main.vaultlist.showPreferencesButton.tooltip=إظهار التفضيلات
|
|
||||||
##Notification
|
##Notification
|
||||||
main.notification.updateAvailable=هناك تحديث متاح.
|
main.notification.updateAvailable=هناك تحديث متاح.
|
||||||
main.notification.support=دعم Cryptomator.
|
main.notification.support=دعم Cryptomator.
|
||||||
main.notification.closeButton.tooltip=إغلاق شريط المعلومات
|
|
||||||
## Vault Detail
|
## Vault Detail
|
||||||
### Welcome
|
### Welcome
|
||||||
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
|
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
|
||||||
main.vaultDetail.storageLocation=موقع تخزين الخزنة
|
|
||||||
### Locked
|
### Locked
|
||||||
main.vaultDetail.lockedStatus=مغلق
|
main.vaultDetail.lockedStatus=مغلق
|
||||||
main.vaultDetail.unlockBtn=فتح…
|
main.vaultDetail.unlockBtn=فتح…
|
||||||
@@ -484,8 +441,6 @@ main.vaultDetail.missing.recheck=إعادة الفحص
|
|||||||
main.vaultDetail.missing.remove=حذف من قائمة الخزنات…
|
main.vaultDetail.missing.remove=حذف من قائمة الخزنات…
|
||||||
main.vaultDetail.missing.changeLocation=تغيير موقع الخزنة…
|
main.vaultDetail.missing.changeLocation=تغيير موقع الخزنة…
|
||||||
### Missing Vault Config
|
### Missing Vault Config
|
||||||
main.vaultDetail.missingVaultConfig.info=إعدادات الخزنة مفقودة.
|
|
||||||
main.vaultDetail.missingVaultConfig.restore=استعادة إعدادات الخزنة
|
|
||||||
### Needs Migration
|
### Needs Migration
|
||||||
main.vaultDetail.migrateButton=ترقية الحافظة
|
main.vaultDetail.migrateButton=ترقية الحافظة
|
||||||
main.vaultDetail.migratePrompt=يجب ترقية المخزن الخاص بك إلى تنسيق جديد، قبل أن تتمكن من الوصول إليه
|
main.vaultDetail.migratePrompt=يجب ترقية المخزن الخاص بك إلى تنسيق جديد، قبل أن تتمكن من الوصول إليه
|
||||||
@@ -510,7 +465,6 @@ vaultOptions.general=عام
|
|||||||
vaultOptions.general.vaultName=اسم المخزن
|
vaultOptions.general.vaultName=اسم المخزن
|
||||||
vaultOptions.general.autoLock.lockAfterTimePart1=قفل عند الخمول لمدة
|
vaultOptions.general.autoLock.lockAfterTimePart1=قفل عند الخمول لمدة
|
||||||
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
|
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
|
||||||
vaultOptions.general.autoLock.accessibleText=مهلة القفل بالدقائق
|
|
||||||
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
|
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
|
||||||
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
|
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
|
||||||
vaultOptions.general.actionAfterUnlock.ignore=لا تفعل شيئاً
|
vaultOptions.general.actionAfterUnlock.ignore=لا تفعل شيئاً
|
||||||
@@ -541,7 +495,6 @@ vaultOptions.masterkey.forgetSavedPasswordBtn=نسيان كلمة المرور
|
|||||||
vaultOptions.masterkey.recoveryKeyExplanation=مفتاح الاسترداد هو وسيلتك الوحيدة لاستعادة الوصول إلى مخزنك إذا فقدت كلمة المرور.
|
vaultOptions.masterkey.recoveryKeyExplanation=مفتاح الاسترداد هو وسيلتك الوحيدة لاستعادة الوصول إلى مخزنك إذا فقدت كلمة المرور.
|
||||||
vaultOptions.masterkey.showRecoveryKeyBtn=عرض مفتاح الاسترداد
|
vaultOptions.masterkey.showRecoveryKeyBtn=عرض مفتاح الاسترداد
|
||||||
vaultOptions.masterkey.recoverPasswordBtn=إعادة تعيين كلمة المرور
|
vaultOptions.masterkey.recoverPasswordBtn=إعادة تعيين كلمة المرور
|
||||||
vaultOptions.masterkey.missingMasterkeyFile=هذه الخيارات متاحة فقط إذا كان ملف المفتاح الرئيسي موجودًا في دليل الخزنة.
|
|
||||||
## Hub
|
## Hub
|
||||||
vaultOptions.hub=الإسترداد
|
vaultOptions.hub=الإسترداد
|
||||||
vaultOptions.hub.convertInfo=يمكنك استخدام مفتاح الاسترداد لتحويل هذه خزانة Hub إلى خزانة تعتمد على كلمة مرور في حالة الطوارئ.
|
vaultOptions.hub.convertInfo=يمكنك استخدام مفتاح الاسترداد لتحويل هذه خزانة Hub إلى خزانة تعتمد على كلمة مرور في حالة الطوارئ.
|
||||||
@@ -552,7 +505,6 @@ vaultOptions.hub.convertBtn=التحويل إلى خزانة قائمة على
|
|||||||
recoveryKey.display.title=إظهار مفتاح الاسترداد
|
recoveryKey.display.title=إظهار مفتاح الاسترداد
|
||||||
recoveryKey.create.message=مطلوب كلمة المرور
|
recoveryKey.create.message=مطلوب كلمة المرور
|
||||||
recoveryKey.create.description=أدخل كلمة المرور الخاصة بك لإظهار مفتاح الاسترداد ل "%s":
|
recoveryKey.create.description=أدخل كلمة المرور الخاصة بك لإظهار مفتاح الاسترداد ل "%s":
|
||||||
recoveryKey.recover.description=أدخل كلمة المرور لـ "%s" لاستعادة إعدادات الخزنة.
|
|
||||||
recoveryKey.display.description=يمكن استخدام مفتاح الاسترداد التالي لاستعادة الوصول إلى "%s":
|
recoveryKey.display.description=يمكن استخدام مفتاح الاسترداد التالي لاستعادة الوصول إلى "%s":
|
||||||
recoveryKey.display.StorageHints=حافظ عليه في مكان ما آمن جداً، على سبيل المثال\n • تخزينه باستخدام مدير كلمات المرور\n • حفظه على محرك أقراص خارجي USB\n • كتابته أو طباعته على الورق
|
recoveryKey.display.StorageHints=حافظ عليه في مكان ما آمن جداً، على سبيل المثال\n • تخزينه باستخدام مدير كلمات المرور\n • حفظه على محرك أقراص خارجي USB\n • كتابته أو طباعته على الورق
|
||||||
## Reset Password
|
## Reset Password
|
||||||
@@ -565,59 +517,29 @@ recoveryKey.recover.invalidKey=مفتاح الاسترداد غير صالح
|
|||||||
recoveryKey.printout.heading=مفتاح استرداد Cryptomator\n"%s"\n
|
recoveryKey.printout.heading=مفتاح استرداد Cryptomator\n"%s"\n
|
||||||
### Reset Password
|
### Reset Password
|
||||||
recoveryKey.recover.resetBtn=إعادة الضبط
|
recoveryKey.recover.resetBtn=إعادة الضبط
|
||||||
recoveryKey.recover.recoverBtn=استعادة
|
|
||||||
### Recovery Key Password Reset Success
|
### Recovery Key Password Reset Success
|
||||||
recoveryKey.recover.resetSuccess.message=تم إعادة تعيين كلمة المرور بنجاح
|
recoveryKey.recover.resetSuccess.message=تم إعادة تعيين كلمة المرور بنجاح
|
||||||
recoveryKey.recover.resetSuccess.description=يمكنك فتح الخزانة الخاصة بك بكلمة المرور الجديدة.
|
recoveryKey.recover.resetSuccess.description=يمكنك فتح الخزانة الخاصة بك بكلمة المرور الجديدة.
|
||||||
### Recovery Key Vault Config Reset Success
|
### Recovery Key Vault Config Reset Success
|
||||||
recoveryKey.recover.resetVaultConfigSuccess.message=تمت استعادة إعدادات الخزنة
|
|
||||||
recoveryKey.recover.resetMasterkeyFileSuccess.message=تمت استعادة ملف المفتاح الرئيسي
|
|
||||||
recoveryKey.recover.resetMasterkeyFileSuccess.description=يمكنك الآن فتح خزنتك باستخدام كلمة المرور.
|
|
||||||
|
|
||||||
# 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=تمت إضافة الخزنة
|
|
||||||
recover.existing.message=تمت إضافة الخزنة بنجاح
|
|
||||||
recover.existing.description=تمت إضافة خزنتك "%s" إلى قائمة الخزائن. لم تكن هناك حاجة لعملية استعادة.
|
|
||||||
|
|
||||||
##Vault Already Exists - Dialog
|
##Vault Already Exists - Dialog
|
||||||
recover.alreadyExists.title=الخزنة موجودة بالفعل
|
|
||||||
recover.alreadyExists.message=تمت إضافة هذه الخزنة بالفعل
|
|
||||||
recover.alreadyExists.description=خزنتك "%s" موجودة بالفعل في قائمة الخزائن، لذلك لم تتم إضافتها مرة أخرى.
|
|
||||||
|
|
||||||
##Invalid Selection - Dialog
|
##Invalid Selection - Dialog
|
||||||
recover.invalidSelection.title=تحديد غير صالح
|
|
||||||
recover.invalidSelection.message=تحديدك ليس خزنة
|
|
||||||
recover.invalidSelection.description=يجب أن يكون المجلد المحدد خزنة Cryptomator صالحة.
|
|
||||||
|
|
||||||
## Contact Hub Vault Owner - Dialog
|
## Contact Hub Vault Owner - Dialog
|
||||||
contactHubVaultOwner.title=خزانة Hub
|
contactHubVaultOwner.title=خزانة Hub
|
||||||
contactHubVaultOwner.message=تم إنشاء هذه الخزنة باستخدام Cryptomator Hub
|
|
||||||
contactHubVaultOwner.description=يرجى التواصل مع مالك الخزنة لاستعادة الملف المفقود. يمكنه تنزيل قالب الخزنة من Cryptomator Hub.
|
|
||||||
|
|
||||||
##Dialog Title
|
##Dialog Title
|
||||||
recover.recoverVaultConfig.title=استعادة إعدادات الخزنة
|
|
||||||
recover.recoverMasterkey.title=استعادة المفتاح الرئيسي
|
|
||||||
|
|
||||||
## OnBoarding
|
## OnBoarding
|
||||||
recover.onBoarding.chooseMethod=اختر طريقة الاستعادة:
|
|
||||||
recover.onBoarding.useRecoveryKey=استخدام مفتاح الاستعادة
|
|
||||||
recover.onBoarding.usePassword=استخدام كلمة المرور
|
|
||||||
recover.onBoarding.intro=تأكد من التحقق مما يلي:
|
|
||||||
recover.onBoarding.pleaseConfirm=قبل المتابعة، يرجى تأكيد ما يلي:
|
|
||||||
recover.onBoarding.otherwisePleaseConfirm=وإلا، يرجى تأكيد ما يلي:
|
|
||||||
recover.onBoarding.allMissing.intro=إذا كانت هذه الخزنة مُدارة بواسطة Cryptomator Hub، فيجب على مالك الخزنة استعادتها لك.
|
|
||||||
recover.onBoarding.intro.ensure=جميع الملفات متزامنة بالكامل.
|
|
||||||
recover.onBoarding.affirmation=لقد قرأت هذه المتطلبات وفهمتها
|
|
||||||
|
|
||||||
###Vault Config Missing
|
###Vault Config Missing
|
||||||
recover.onBoarding.intro.recoveryKey=لديك مفتاح الاستعادة وتعرف ما إذا تم استخدام الإعدادات المتقدمة.
|
|
||||||
recover.onBoarding.intro.password=لديك كلمة مرور الخزنة وتعرف ما إذا تم استخدام الإعدادات المتقدمة.
|
|
||||||
###Masterkey Missing
|
###Masterkey Missing
|
||||||
recover.onBoarding.intro.masterkey.recoveryKey=لديك مفتاح استعادة الخزنة.
|
|
||||||
|
|
||||||
## Expert Settings
|
## Expert Settings
|
||||||
recover.expertSettings.shorteningThreshold.title=يجب أن تتطابق هذه القيمة مع القيمة المستخدمة قبل الاستعادة لضمان التوافق مع البيانات المشفّرة سابقًا.
|
|
||||||
|
|
||||||
# Convert Vault
|
# Convert Vault
|
||||||
convertVault.title=تحويل الخزانة
|
convertVault.title=تحويل الخزانة
|
||||||
@@ -695,8 +617,6 @@ decryptNames.filePicker.title=اختر ملَف مشفر
|
|||||||
decryptNames.filePicker.extensionDescription=ملف مشفر
|
decryptNames.filePicker.extensionDescription=ملف مشفر
|
||||||
decryptNames.copyTable.tooltip=نسخ الجدول
|
decryptNames.copyTable.tooltip=نسخ الجدول
|
||||||
decryptNames.clearTable.tooltip=مسح الجدول
|
decryptNames.clearTable.tooltip=مسح الجدول
|
||||||
decryptNames.column.encrypted=مشفّر
|
|
||||||
decryptNames.column.decrypted=مفكوك التشفير
|
|
||||||
decryptNames.copyHint=نسخ محتوى الخلية مع %s
|
decryptNames.copyHint=نسخ محتوى الخلية مع %s
|
||||||
decryptNames.dropZone.message=إسقاط الملفات أو انقر لتحديد
|
decryptNames.dropZone.message=إسقاط الملفات أو انقر لتحديد
|
||||||
decryptNames.dropZone.error.vaultInternalFiles=مخزن الملفات الداخلية مع عدم تحديد اسم قابل للتشفير
|
decryptNames.dropZone.error.vaultInternalFiles=مخزن الملفات الداخلية مع عدم تحديد اسم قابل للتشفير
|
||||||
@@ -709,8 +629,6 @@ decryptNames.dropZone.error.generic=فشل فك تشفير أسماء الملف
|
|||||||
eventView.title=أحداث
|
eventView.title=أحداث
|
||||||
eventView.filter.allVaults=الكل
|
eventView.filter.allVaults=الكل
|
||||||
eventView.clearListButton.tooltip=تفريغ القائمة
|
eventView.clearListButton.tooltip=تفريغ القائمة
|
||||||
eventView.filterVaults=تصفية حسب الخزنة
|
|
||||||
eventView.cell.actionsButton.tooltip=إجراءات الأحداث
|
|
||||||
## event list entries
|
## event list entries
|
||||||
eventView.entry.vaultLocked.description=فتح "%s" للحصول على التفاصيل
|
eventView.entry.vaultLocked.description=فتح "%s" للحصول على التفاصيل
|
||||||
eventView.entry.conflictResolved.message=تم حل التضارب
|
eventView.entry.conflictResolved.message=تم حل التضارب
|
||||||
@@ -725,15 +643,9 @@ eventView.entry.brokenDirFile.showEncrypted=إظهار الرابط المكسو
|
|||||||
eventView.entry.brokenFileNode.message=عقدة ملفات النظام التافلة
|
eventView.entry.brokenFileNode.message=عقدة ملفات النظام التافلة
|
||||||
eventView.entry.brokenFileNode.showEncrypted=عرض العقدة المشفّرة التافلة
|
eventView.entry.brokenFileNode.showEncrypted=عرض العقدة المشفّرة التافلة
|
||||||
eventView.entry.brokenFileNode.copyDecrypted=نسخ المسار غير المشفر
|
eventView.entry.brokenFileNode.copyDecrypted=نسخ المسار غير المشفر
|
||||||
eventView.entry.inUse.message=الملف قيد الاستخدام
|
|
||||||
eventView.entry.inUse.showDecrypted=إظهار الملف غير المشفر
|
eventView.entry.inUse.showDecrypted=إظهار الملف غير المشفر
|
||||||
eventView.entry.inUse.showEncrypted=عرض ملَف المشفر
|
eventView.entry.inUse.showEncrypted=عرض ملَف المشفر
|
||||||
eventView.entry.inUse.copyUserAndDevice=نسخ اسم المستخدم والجهاز القافل
|
|
||||||
eventView.entry.inUse.ignoreLock=تجاهل حالة الاستخدام
|
|
||||||
|
|
||||||
|
|
||||||
# Notifications
|
# Notifications
|
||||||
## FileIsInUse Notification
|
## FileIsInUse Notification
|
||||||
notification.inUse.message=الملف قيد الاستخدام على جهاز آخر
|
|
||||||
notification.inUse.description=الملف مفتوح بواسطة %s على %s. اطلب منهم إغلاق الملف والسماح للمزامنة بالانتهاء. يمكنك تجاهل الحالة لفتحه الآن، لكن قد يؤدي ذلك إلى تعارضات أو الكتابة فوق تغييرات أحدث.
|
|
||||||
notification.inUse.action=تجاهل حالة الاستخدام
|
|
||||||
|
|||||||
@@ -176,8 +176,6 @@ hub.register.registerBtn=Регистриране
|
|||||||
hub.registerSuccess.unlockBtn=Отключване
|
hub.registerSuccess.unlockBtn=Отключване
|
||||||
### Registration Failed
|
### Registration Failed
|
||||||
### Archived
|
### Archived
|
||||||
hub.archived.message=Хранили е архивиран
|
|
||||||
hub.archived.description=Това хранилище е архивирано и вече не е достъпно. Моля, свържете се със собственика на хранилището.
|
|
||||||
### Unauthorized
|
### Unauthorized
|
||||||
hub.unauthorized.message=Отказан достъп
|
hub.unauthorized.message=Отказан достъп
|
||||||
### Untrusted Host
|
### Untrusted Host
|
||||||
@@ -563,7 +561,6 @@ dokanySupportEnd.preferencesBtn=Към настройките
|
|||||||
|
|
||||||
|
|
||||||
# Event View
|
# Event View
|
||||||
eventView.filter.allVaults=Всички
|
|
||||||
## event list entries
|
## event list entries
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -172,9 +172,6 @@ hub.noKeychain.openBtn=Åbn Indstillinger
|
|||||||
hub.checkHostTrust.message.check=Kontrollerer konfiguration…
|
hub.checkHostTrust.message.check=Kontrollerer konfiguration…
|
||||||
hub.checkHostTrust.message.ask=Stol på denne vært?
|
hub.checkHostTrust.message.ask=Stol på denne vært?
|
||||||
hub.checkHostTrust.message.ask.plural=Stol på disse værter?
|
hub.checkHostTrust.message.ask.plural=Stol på disse værter?
|
||||||
hub.checkHostTrust.description.ask=Cryptomator genkender ikke denne vært. For at låse boksen op, skal den have tillid til den. Stol kun på den, hvis du genkender adressen nedenfor.
|
|
||||||
hub.checkHostTrust.description.ask.plural=Cryptomator genkender ikke denne vært. For at låse boksen op, skal den have tillid til den. Stol kun på den, hvis du genkender adressen nedenfor.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Kopiér adresse til udklipsholder
|
|
||||||
hub.checkHostTrust.trustBtn=Hav tillid
|
hub.checkHostTrust.trustBtn=Hav tillid
|
||||||
hub.checkHostTrust.denyBtn=Afvis
|
hub.checkHostTrust.denyBtn=Afvis
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -158,7 +158,6 @@ 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
|
### Check Host Authenticity
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Adresse in die Zwischenablage kopieren
|
|
||||||
hub.checkHostTrust.trustBtn=Vertrauen
|
hub.checkHostTrust.trustBtn=Vertrauen
|
||||||
### Waiting
|
### Waiting
|
||||||
hub.auth.message=Warten auf Authentifizierung …
|
hub.auth.message=Warten auf Authentifizierung …
|
||||||
|
|||||||
@@ -172,9 +172,6 @@ hub.noKeychain.openBtn=Ouvrir les préférences
|
|||||||
hub.checkHostTrust.message.check=Vérification de configuration…
|
hub.checkHostTrust.message.check=Vérification de configuration…
|
||||||
hub.checkHostTrust.message.ask=Faire confiance à cet hôte ?
|
hub.checkHostTrust.message.ask=Faire confiance à cet hôte ?
|
||||||
hub.checkHostTrust.message.ask.plural=Faire confiance à ces hôtes ?
|
hub.checkHostTrust.message.ask.plural=Faire confiance à ces hôtes ?
|
||||||
hub.checkHostTrust.description.ask=Cryptomator ne reconnaît pas cet hôte. Pour déverrouiller le coffre, il faut lui faire confiance. Ne lui faites confiance que si vous reconnaissez l'adresse ci-dessous.
|
|
||||||
hub.checkHostTrust.description.ask.plural=Cryptomator ne reconnaît pas ces hôtes. Pour déverrouiller le coffre, il faut leur faire confiance. Ne leur faites confiance que si vous reconnaissez les adresses ci-dessous.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Copier l’adresse dans le presse-papier
|
|
||||||
hub.checkHostTrust.trustBtn=Approuver
|
hub.checkHostTrust.trustBtn=Approuver
|
||||||
hub.checkHostTrust.denyBtn=Refuser
|
hub.checkHostTrust.denyBtn=Refuser
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ removeVault.description=Ez kizárólag a Cryptomator listájából távolítja e
|
|||||||
|
|
||||||
# Change Password
|
# Change Password
|
||||||
changepassword.title=Jelszó megváltoztatása
|
changepassword.title=Jelszó megváltoztatása
|
||||||
changepassword.enterOldPassword=Írja be a jelenlegi jelszót a következő tárolóhoz: "%s"
|
changepassword.enterOldPassword=Írja be a jelenlegi jelszavat a következő széfhez "%s"
|
||||||
changepassword.finalConfirmation=Megértettem, hogy nem fogok hozzáférni az adataimhoz amennyiben elfelejtem a jelszavam
|
changepassword.finalConfirmation=Megértettem, hogy nem fogok hozzáférni az adataimhoz amennyiben elfelejtem a jelszavam
|
||||||
|
|
||||||
# Forget Password
|
# Forget Password
|
||||||
@@ -138,7 +138,7 @@ forgetPassword.confirmBtn=Jelszó elfelejtése
|
|||||||
|
|
||||||
# Unlock
|
# Unlock
|
||||||
unlock.title="%s" feloldása
|
unlock.title="%s" feloldása
|
||||||
unlock.passwordPrompt=Írja be a jelszavát a következő tárolóhoz "%s":
|
unlock.passwordPrompt=Írja be a jelszavát a következő széfhez "%s":
|
||||||
unlock.savePassword=Jelszó megjegyzése
|
unlock.savePassword=Jelszó megjegyzése
|
||||||
unlock.unlockBtn=Feloldás
|
unlock.unlockBtn=Feloldás
|
||||||
## Select
|
## Select
|
||||||
@@ -151,7 +151,7 @@ unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Mesterkulcs
|
|||||||
unlock.success.message=Sikeres feloldás
|
unlock.success.message=Sikeres feloldás
|
||||||
unlock.success.description=Mostantól elérhető a csatolási pontján keresztül a következő tároló tartalma: "%s".
|
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=Tároló megjelenítése
|
unlock.success.revealBtn=Széf megjelenítése
|
||||||
## Failure
|
## Failure
|
||||||
unlock.error.customPath.message=Nem lehet csatolni a tárolót 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 tároló beállításaihoz é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.
|
||||||
@@ -426,7 +426,7 @@ stats.access.total=Összes hozzáférés: %d
|
|||||||
|
|
||||||
# Main Window
|
# Main Window
|
||||||
## Vault List
|
## Vault List
|
||||||
main.vaultlist=Titkosított tárolók
|
main.vaultlist=Széfek
|
||||||
main.vaultlist.listEntry=Titkosított tároló %s (%s)
|
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.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…
|
||||||
@@ -439,7 +439,7 @@ main.vaultlist.contextMenu.share=Megosztás…
|
|||||||
main.vaultlist.addVaultBtn.menuItemNew=Új titkosított tároló létrehozása…
|
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.menuItemExisting=Titkosított tároló megnyitása…
|
||||||
main.vaultlist.addVaultBtn.menuItemRecover=Titkosított tároló visszaállítása…
|
main.vaultlist.addVaultBtn.menuItemRecover=Titkosított tároló visszaállítása…
|
||||||
main.vaultlist.addVaultButton.tooltip=Titkosított tároló hozzáadása
|
main.vaultlist.addVaultButton.tooltip=Széf hozzáadása
|
||||||
main.vaultlist.showEventsButton.tooltip=Eseménynapló megnyitása
|
main.vaultlist.showEventsButton.tooltip=Eseménynapló megnyitása
|
||||||
main.vaultlist.showPreferencesButton.tooltip=Beállítások megnyitása
|
main.vaultlist.showPreferencesButton.tooltip=Beállítások megnyitása
|
||||||
##Notification
|
##Notification
|
||||||
@@ -588,7 +588,7 @@ 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.
|
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 tároló
|
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.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.
|
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.
|
||||||
|
|
||||||
@@ -682,7 +682,7 @@ shareVault.visitHub=Látogassa meg a Cryptomator Hubot
|
|||||||
|
|
||||||
shareVault.hub.message=Hogyan osszon meg egy Hub-tárolót
|
shareVault.hub.message=Hogyan osszon meg egy Hub-tárolót
|
||||||
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.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=1. Ossza meg a titkosított tároló 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
|
||||||
|
|
||||||
|
|||||||
@@ -172,9 +172,6 @@ hub.noKeychain.openBtn=Apri Preferenze
|
|||||||
hub.checkHostTrust.message.check=Controllo Configurazione…
|
hub.checkHostTrust.message.check=Controllo Configurazione…
|
||||||
hub.checkHostTrust.message.ask=Ti fidi di questo host?
|
hub.checkHostTrust.message.ask=Ti fidi di questo host?
|
||||||
hub.checkHostTrust.message.ask.plural=Ti fidi di questi host?
|
hub.checkHostTrust.message.ask.plural=Ti fidi di questi host?
|
||||||
hub.checkHostTrust.description.ask=Cryptomator non riconosce questo host. Per sbloccare la cassaforte, esso deve essere affidabile. Rendilo affidabile solo se riconosci l'indirizzo qui sotto.
|
|
||||||
hub.checkHostTrust.description.ask.plural=Cryptomator non riconosce questi host. Per sbloccare la cassaforte, essi devono essere affidabili. Rendili affidabili solo se riconosci gli indirizzi qui sotto.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Copia indirizzo negli appunti
|
|
||||||
hub.checkHostTrust.trustBtn=Fidati
|
hub.checkHostTrust.trustBtn=Fidati
|
||||||
hub.checkHostTrust.denyBtn=Rifiuta
|
hub.checkHostTrust.denyBtn=Rifiuta
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -400,7 +400,6 @@ main.vaultlist.contextMenu.unlockNow=今すぐ解錠
|
|||||||
main.vaultlist.contextMenu.vaultoptions=金庫のオプションを表示
|
main.vaultlist.contextMenu.vaultoptions=金庫のオプションを表示
|
||||||
main.vaultlist.contextMenu.reveal=ドライブを表示
|
main.vaultlist.contextMenu.reveal=ドライブを表示
|
||||||
main.vaultlist.contextMenu.share=共有…
|
main.vaultlist.contextMenu.share=共有…
|
||||||
main.vaultlist.addVaultBtn.menuItemNew=新しい金庫を作成…
|
|
||||||
main.vaultlist.addVaultButton.tooltip=金庫を追加
|
main.vaultlist.addVaultButton.tooltip=金庫を追加
|
||||||
##Notification
|
##Notification
|
||||||
main.notification.updateAvailable=アップデートがあります。
|
main.notification.updateAvailable=アップデートがあります。
|
||||||
@@ -629,10 +628,7 @@ decryptNames.dropZone.error.generic=ファイル名の復号化に失敗しま
|
|||||||
|
|
||||||
|
|
||||||
# Event View
|
# Event View
|
||||||
eventView.title=イベント
|
|
||||||
eventView.filter.allVaults=すべて
|
|
||||||
## event list entries
|
## event list entries
|
||||||
eventView.entry.decryptionFailed.showEncrypted=暗号化されたファイルを表示
|
|
||||||
eventView.entry.inUse.showDecrypted=復号化されたファイルを表示
|
eventView.entry.inUse.showDecrypted=復号化されたファイルを表示
|
||||||
eventView.entry.inUse.showEncrypted=暗号化されたファイルを表示
|
eventView.entry.inUse.showEncrypted=暗号化されたファイルを表示
|
||||||
eventView.entry.inUse.copyUserAndDevice=ロックしているユーザーとデバイス名をコピー
|
eventView.entry.inUse.copyUserAndDevice=ロックしているユーザーとデバイス名をコピー
|
||||||
|
|||||||
@@ -172,9 +172,6 @@ hub.noKeychain.openBtn=설정 열기
|
|||||||
hub.checkHostTrust.message.check=구성 확인 중…
|
hub.checkHostTrust.message.check=구성 확인 중…
|
||||||
hub.checkHostTrust.message.ask=이 호스트를 신뢰하겠습니까?
|
hub.checkHostTrust.message.ask=이 호스트를 신뢰하겠습니까?
|
||||||
hub.checkHostTrust.message.ask.plural=이 호스트를 신뢰하겠습니까?
|
hub.checkHostTrust.message.ask.plural=이 호스트를 신뢰하겠습니까?
|
||||||
hub.checkHostTrust.description.ask=Cryptomator에서 이 호스트를 인식하지 못했습니다. Vault를 잠금 해제하려면 이 호스트를 신뢰해야 합니다. 아래 주소를 알고 있는 경우에만 신뢰하도록 설정하세요.
|
|
||||||
hub.checkHostTrust.description.ask.plural=Cryptomator에서 이 호스트들을 인식하지 못했습니다. Vault를 잠금 해제하려면 해당 호스트를 신뢰 대상으로 등록해야 합니다. 아래 주소를 알고 있는 경우에만 신뢰하도록 설정하세요.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=클립보드로 주소 복사하기
|
|
||||||
hub.checkHostTrust.trustBtn=신뢰하기
|
hub.checkHostTrust.trustBtn=신뢰하기
|
||||||
hub.checkHostTrust.denyBtn=거부
|
hub.checkHostTrust.denyBtn=거부
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -163,9 +163,6 @@ hub.noKeychain.description=Lai atslēgtu Hub glabātavas, ir nepieciešama ierī
|
|||||||
hub.noKeychain.openBtn=Atvērt iestatījumus
|
hub.noKeychain.openBtn=Atvērt iestatījumus
|
||||||
### Check Host Authenticity
|
### Check Host Authenticity
|
||||||
hub.checkHostTrust.message.check=Pārbauda konfigurāciju…
|
hub.checkHostTrust.message.check=Pārbauda konfigurāciju…
|
||||||
hub.checkHostTrust.description.ask=Criptomator neaptazīst šo saimniekdatoru. Lai atslēgtu glabātavu, tam ir jāuzticas. Uzticies tam tikai tad, ja atpazīsti zemāk esošo adresi!
|
|
||||||
hub.checkHostTrust.description.ask.plural=Criptomator neaptazīst šos saimniekdatorus. Lai atslēgtu glabātavu, tiem ir jāuzticas. Uzticies tiem tikai tad, ja atpazīsti zemāk esošās adreses!
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Ievietot adresi starpliktuvē
|
|
||||||
hub.checkHostTrust.trustBtn=Uzticēties
|
hub.checkHostTrust.trustBtn=Uzticēties
|
||||||
hub.checkHostTrust.denyBtn=Noraidīt
|
hub.checkHostTrust.denyBtn=Noraidīt
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -172,9 +172,6 @@ hub.noKeychain.openBtn=Abrir preferências
|
|||||||
hub.checkHostTrust.message.check=Verificando a configuração…
|
hub.checkHostTrust.message.check=Verificando a configuração…
|
||||||
hub.checkHostTrust.message.ask=Confiar neste anfitrião?
|
hub.checkHostTrust.message.ask=Confiar neste anfitrião?
|
||||||
hub.checkHostTrust.message.ask.plural=Confiar nestes anfitriões?
|
hub.checkHostTrust.message.ask.plural=Confiar nestes anfitriões?
|
||||||
hub.checkHostTrust.description.ask=O Cryptomator não reconhece este provedor. Para desbloquear o cofre, é necessário confiar nele. Confie apenas se reconhecer o endereço abaixo.
|
|
||||||
hub.checkHostTrust.description.ask.plural=O Cryptomator não reconhece estes provedores. Para desbloquear o cofre, é necessário confiar neles. Confie apenas se reconhecer os endereços abaixo.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Copiar endereço para a área de transferência
|
|
||||||
hub.checkHostTrust.trustBtn=Confiar
|
hub.checkHostTrust.trustBtn=Confiar
|
||||||
hub.checkHostTrust.denyBtn=Negar
|
hub.checkHostTrust.denyBtn=Negar
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ unlock.chooseMasterkey.filePickerMimeDesc=Masterkey do Cryptomator
|
|||||||
## Success
|
## Success
|
||||||
unlock.success.message=Desbloqueado com sucesso
|
unlock.success.message=Desbloqueado com sucesso
|
||||||
unlock.success.description=O conteúdo no cofre "%s" agora está acessível no seu ponto de montagem.
|
unlock.success.description=O conteúdo no cofre "%s" agora está acessível no seu ponto de montagem.
|
||||||
unlock.success.rememberChoice=Lembrar escolha. Não perguntar novamente
|
unlock.success.rememberChoice=Lembrar opção escolhida. Não perguntar novamente
|
||||||
unlock.success.revealBtn=Revelar volume
|
unlock.success.revealBtn=Revelar volume
|
||||||
## Failure
|
## Failure
|
||||||
unlock.error.customPath.message=Não foi possível iniciar o cofre no caminho personalizado
|
unlock.error.customPath.message=Não foi possível iniciar o cofre no caminho personalizado
|
||||||
@@ -172,9 +172,6 @@ hub.noKeychain.openBtn=Abrir preferências
|
|||||||
hub.checkHostTrust.message.check=Verificando configuração…
|
hub.checkHostTrust.message.check=Verificando configuração…
|
||||||
hub.checkHostTrust.message.ask=Confiar neste host?
|
hub.checkHostTrust.message.ask=Confiar neste host?
|
||||||
hub.checkHostTrust.message.ask.plural=Confiar nestes hosts?
|
hub.checkHostTrust.message.ask.plural=Confiar nestes hosts?
|
||||||
hub.checkHostTrust.description.ask=O Cryptomador não reconhece este host. Para desbloquear o cofre, ele precisa ser confiável. Apenas confie nele se você reconhecer o endereço abaixo.
|
|
||||||
hub.checkHostTrust.description.ask.plural=O Cryptomador não reconhece este host. Para desbloquear o cofre, ele precisa ser confiável. Apenas confie nele se você reconhecer os endereços abaixo.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Copiar endereço para a área de transferência
|
|
||||||
hub.checkHostTrust.trustBtn=Confio
|
hub.checkHostTrust.trustBtn=Confio
|
||||||
hub.checkHostTrust.denyBtn=Recusar
|
hub.checkHostTrust.denyBtn=Recusar
|
||||||
### Waiting
|
### Waiting
|
||||||
@@ -218,7 +215,7 @@ hub.requireAccountInit.description.1=Perfil de usuário do Hub
|
|||||||
hub.requireAccountInit.description.2=.
|
hub.requireAccountInit.description.2=.
|
||||||
### License Exceeded
|
### License Exceeded
|
||||||
hub.invalidLicense.message=Licença Hub invalida
|
hub.invalidLicense.message=Licença Hub invalida
|
||||||
hub.invalidLicense.description=Sua instância do Cryptomator Hub tem uma licença inválida. Informe a um administrador do Hub para atualizar ou renovar a licença.
|
hub.invalidLicense.description=Sua instância do Cryptomator Hub tem uma licença inválida. Informe a um administrador do Hub para atualizar ou renová-la.
|
||||||
|
|
||||||
# Lock
|
# Lock
|
||||||
## Force
|
## Force
|
||||||
@@ -357,7 +354,7 @@ preferences.updates=Atualizações
|
|||||||
preferences.updates.currentVersion=Versão atual: %s
|
preferences.updates.currentVersion=Versão atual: %s
|
||||||
preferences.updates.autoUpdateCheck=Buscar atualizações automaticamente
|
preferences.updates.autoUpdateCheck=Buscar atualizações automaticamente
|
||||||
preferences.updates.checkNowBtn=Verificar agora
|
preferences.updates.checkNowBtn=Verificar agora
|
||||||
preferences.updates.updateAvailable=Atualização para a versão %s disponível.
|
preferences.updates.updateAvailable=Atualizar para versão %s disponível.
|
||||||
preferences.updates.lastUpdateCheck=Última verificação: %s
|
preferences.updates.lastUpdateCheck=Última verificação: %s
|
||||||
preferences.updates.lastUpdateCheck.never=nunca
|
preferences.updates.lastUpdateCheck.never=nunca
|
||||||
preferences.updates.lastUpdateCheck.recently=recentemente
|
preferences.updates.lastUpdateCheck.recently=recentemente
|
||||||
|
|||||||
@@ -172,9 +172,6 @@ hub.noKeychain.openBtn=Открыть настройки
|
|||||||
hub.checkHostTrust.message.check=Проверка конфигурации…
|
hub.checkHostTrust.message.check=Проверка конфигурации…
|
||||||
hub.checkHostTrust.message.ask=Доверять этому хосту?
|
hub.checkHostTrust.message.ask=Доверять этому хосту?
|
||||||
hub.checkHostTrust.message.ask.plural=Доверять этим хостам?
|
hub.checkHostTrust.message.ask.plural=Доверять этим хостам?
|
||||||
hub.checkHostTrust.description.ask=Cryptomator не распознаёт этот хост. Чтобы разблокировать хранилище, оно должно быть доверенным. Доверяйте, только если вам известен указанный ниже адрес.
|
|
||||||
hub.checkHostTrust.description.ask.plural=Cryptomator не распознаёт эти хосты. Чтобы разблокировать хранилище, оно должно быть доверенным. Доверяйте им, только если вам известны указанные ниже адреса.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Скопировать адрес в буфер
|
|
||||||
hub.checkHostTrust.trustBtn=Доверять
|
hub.checkHostTrust.trustBtn=Доверять
|
||||||
hub.checkHostTrust.denyBtn=Отклонить
|
hub.checkHostTrust.denyBtn=Отклонить
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -170,9 +170,6 @@ hub.noKeychain.openBtn=Otvoriť predvoľby
|
|||||||
hub.checkHostTrust.message.check=Kontrolovanie konfigurácie…
|
hub.checkHostTrust.message.check=Kontrolovanie konfigurácie…
|
||||||
hub.checkHostTrust.message.ask=Veríte tomuto hostovi?
|
hub.checkHostTrust.message.ask=Veríte tomuto hostovi?
|
||||||
hub.checkHostTrust.message.ask.plural=Veríte týmto hostom?
|
hub.checkHostTrust.message.ask.plural=Veríte týmto hostom?
|
||||||
hub.checkHostTrust.description.ask=Cryptomator nedokáže rozpoznať tohto hostiteľa. Na odomknutie trezoru je potrebné, aby bol dôveryhodný. Dôverujte mu iba v prípade, že rozpoznáte adresu uvedenú nižšie.
|
|
||||||
hub.checkHostTrust.description.ask.plural=Cryptomator tieto hostiteľské počítače nerozpoznáva. Na odomknutie trezoru musia byť dôveryhodní. Dôverujte im iba v prípade, že rozpoznáte adresy uvedené nižšie.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Skopírovať adresu do schránky
|
|
||||||
hub.checkHostTrust.trustBtn=Veriť
|
hub.checkHostTrust.trustBtn=Veriť
|
||||||
hub.checkHostTrust.denyBtn=Odmietnuť
|
hub.checkHostTrust.denyBtn=Odmietnuť
|
||||||
### Waiting
|
### Waiting
|
||||||
@@ -202,7 +199,6 @@ hub.unauthorized.message=Prístup zamietnutý
|
|||||||
hub.unauthorized.description=Nie ste autorizovaný na otvorenie tohto trezora. Kontaktujte vlastníka trezora pre vyžiadanie prístupu.
|
hub.unauthorized.description=Nie ste autorizovaný na otvorenie tohto trezora. Kontaktujte vlastníka trezora pre vyžiadanie prístupu.
|
||||||
### Untrusted Host
|
### Untrusted Host
|
||||||
hub.untrustedHost.message=Nedôveryhodný host
|
hub.untrustedHost.message=Nedôveryhodný host
|
||||||
hub.untrustedHost.description=Pripojenie k Hubu bolo z bezpečnostných dôvodov zablokované. Ak si myslíte, že hostiteľ Hubu je bezpečný, kontaktujte správcu Hubu alebo to skúste znova.
|
|
||||||
### Requires Account Initialization
|
### Requires Account Initialization
|
||||||
hub.requireAccountInit.message=Vyžadovaná akcia
|
hub.requireAccountInit.message=Vyžadovaná akcia
|
||||||
hub.requireAccountInit.description.0=Pre pokračovanie vyplňte potrebné kroky vo vašom
|
hub.requireAccountInit.description.0=Pre pokračovanie vyplňte potrebné kroky vo vašom
|
||||||
|
|||||||
@@ -529,13 +529,10 @@ recoveryKey.recover.resetSuccess.description=Yeni parola ile kasanızın kilidin
|
|||||||
|
|
||||||
# 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=Kasa Eklendi
|
|
||||||
|
|
||||||
##Vault Already Exists - Dialog
|
##Vault Already Exists - Dialog
|
||||||
recover.alreadyExists.description="%s" kasanız halihazırda kasa listenizde bulunuyor, dolayısıyla tekrar eklenmedi.
|
|
||||||
|
|
||||||
##Invalid Selection - Dialog
|
##Invalid Selection - Dialog
|
||||||
recover.invalidSelection.message=Seçiminiz bir kasa değil
|
|
||||||
|
|
||||||
## Contact Hub Vault Owner - Dialog
|
## Contact Hub Vault Owner - Dialog
|
||||||
contactHubVaultOwner.title=Hub Kasası
|
contactHubVaultOwner.title=Hub Kasası
|
||||||
@@ -633,8 +630,6 @@ eventView.clearListButton.tooltip=Listeyi temizle
|
|||||||
eventView.filterVaults=Kasayı süz
|
eventView.filterVaults=Kasayı süz
|
||||||
## event list entries
|
## event list entries
|
||||||
eventView.entry.inUse.message=Kullanılan dosya
|
eventView.entry.inUse.message=Kullanılan dosya
|
||||||
eventView.entry.inUse.showEncrypted=Şifrelenmiş dosyayı göster
|
|
||||||
eventView.entry.inUse.copyUserAndDevice=Kilitleyen kullanıcı ve cihaz adını kopyala
|
|
||||||
eventView.entry.inUse.ignoreLock=Kullanım durumunu yok say
|
eventView.entry.inUse.ignoreLock=Kullanım durumunu yok say
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -173,9 +173,6 @@ hub.noKeychain.openBtn=Відкрити налаштування
|
|||||||
hub.checkHostTrust.message.check=Перевірка конфігурації…
|
hub.checkHostTrust.message.check=Перевірка конфігурації…
|
||||||
hub.checkHostTrust.message.ask=Довіряти цьому хосту?
|
hub.checkHostTrust.message.ask=Довіряти цьому хосту?
|
||||||
hub.checkHostTrust.message.ask.plural=Довіряти цим хостам?
|
hub.checkHostTrust.message.ask.plural=Довіряти цим хостам?
|
||||||
hub.checkHostTrust.description.ask=Cryptomator не розпізнає цей хост. Щоб розблокувати сховище, йому потрібно довіряти. Довіряйте йому лише в тому випадку, якщо ви впізнаєте адресу, наведену нижче.
|
|
||||||
hub.checkHostTrust.description.ask.plural=Cryptomator не розпізнає ці хости. Щоб розблокувати сховище, їм потрібно довіряти. Довіряйте їм лише в тому випадку, якщо ви впізнаєте адреси, наведені нижче.
|
|
||||||
hub.checkHostTrust.copyBtn.tooltip=Скопіювати адресу в буфер обміну
|
|
||||||
hub.checkHostTrust.trustBtn=Довіряти
|
hub.checkHostTrust.trustBtn=Довіряти
|
||||||
hub.checkHostTrust.denyBtn=Відхилити
|
hub.checkHostTrust.denyBtn=Відхилити
|
||||||
### Waiting
|
### Waiting
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import org.junit.jupiter.api.condition.EnabledIf;
|
|||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@@ -56,7 +55,7 @@ public class EnvironmentTest {
|
|||||||
List<Path> result = env.getPaths("test.path.property").toList();
|
List<Path> result = env.getPaths("test.path.property").toList();
|
||||||
|
|
||||||
MatcherAssert.assertThat(result, Matchers.hasSize(1));
|
MatcherAssert.assertThat(result, Matchers.hasSize(1));
|
||||||
MatcherAssert.assertThat(result, Matchers.hasItem(Paths.get("/foo/bar/test")));
|
MatcherAssert.assertThat(result, Matchers.hasItem(Path.of("/foo/bar/test")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class SettingsJsonTest {
|
|||||||
|
|
||||||
Assertions.assertTrue(jsonObj.checkForUpdatesEnabled);
|
Assertions.assertTrue(jsonObj.checkForUpdatesEnabled);
|
||||||
Assertions.assertEquals(2, jsonObj.directories.size());
|
Assertions.assertEquals(2, jsonObj.directories.size());
|
||||||
Assertions.assertEquals("/vault1", jsonObj.directories.get(0).path);
|
Assertions.assertEquals("/vault1", jsonObj.directories.getFirst().path);
|
||||||
Assertions.assertEquals("/vault2", jsonObj.directories.get(1).path);
|
Assertions.assertEquals("/vault2", jsonObj.directories.get(1).path);
|
||||||
Assertions.assertEquals("--foo --bar", jsonObj.directories.get(1).mountFlags);
|
Assertions.assertEquals("--foo --bar", jsonObj.directories.get(1).mountFlags);
|
||||||
Assertions.assertEquals(8080, jsonObj.port);
|
Assertions.assertEquals(8080, jsonObj.port);
|
||||||
@@ -67,7 +67,7 @@ public class SettingsJsonTest {
|
|||||||
public void testSerialize() throws JsonProcessingException {
|
public void testSerialize() throws JsonProcessingException {
|
||||||
var jsonObj = new SettingsJson();
|
var jsonObj = new SettingsJson();
|
||||||
jsonObj.directories = List.of(new VaultSettingsJson(), new VaultSettingsJson());
|
jsonObj.directories = List.of(new VaultSettingsJson(), new VaultSettingsJson());
|
||||||
jsonObj.directories.get(0).id = "test";
|
jsonObj.directories.getFirst().id = "test";
|
||||||
jsonObj.theme = UiTheme.DARK;
|
jsonObj.theme = UiTheme.DARK;
|
||||||
jsonObj.showTrayIcon = false;
|
jsonObj.showTrayIcon = false;
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import org.mockito.Mockito;
|
|||||||
import java.nio.file.FileSystem;
|
import java.nio.file.FileSystem;
|
||||||
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.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -43,7 +42,7 @@ public class FileOpenRequestHandlerTest {
|
|||||||
AppLaunchEvent evt = queue.poll();
|
AppLaunchEvent evt = queue.poll();
|
||||||
Assertions.assertNotNull(evt);
|
Assertions.assertNotNull(evt);
|
||||||
Collection<Path> paths = evt.pathsToOpen();
|
Collection<Path> paths = evt.pathsToOpen();
|
||||||
MatcherAssert.assertThat(paths, CoreMatchers.hasItems(Paths.get("foo"), Paths.get("bar")));
|
MatcherAssert.assertThat(paths, CoreMatchers.hasItems(Path.of("foo"), Path.of("bar")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user