diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
index 3a7337fe3..83ec96635 100644
--- a/.github/CODE_OF_CONDUCT.md
+++ b/.github/CODE_OF_CONDUCT.md
@@ -22,7 +22,7 @@ include:
Examples of unacceptable behavior by participants include:
-* The use of sexualized language or imagery and unwelcome sexual attention or
+* The use of sexual language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md
index c7dc14547..f9ef8460a 100644
--- a/.github/SUPPORT.md
+++ b/.github/SUPPORT.md
@@ -14,5 +14,5 @@ For _everything else_, please visit our official [Cryptomator Community](https:/
- Discussions about the apps
- [Development discussions](https://community.cryptomator.org/c/development)
- General questions
- - Discussions regarding our design decissions
+ - Discussions regarding our design decisions
- Our roadmap
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 3cf0cb845..21ef6aca2 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -52,13 +52,14 @@ jobs:
with:
name: buildkit-win.zip
path: target/buildkit-win.zip
-
+
release:
name: Draft a Release on GitHub Releases
runs-on: ubuntu-latest
needs: build
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'cryptomator/cryptomator'
steps:
+ - uses: actions/checkout@v2
- name: Download buildkit-linux.zip
uses: actions/download-artifact@v1
with:
@@ -74,6 +75,15 @@ jobs:
with:
name: buildkit-win.zip
path: .
+ - name: Create tarball
+ run: git archive --prefix="cryptomator-${{ github.ref }}/" -o "cryptomator-${{ github.ref }}.tar.gz" ${{ github.ref }}
+ - name: Sign tarball with key 615D449FE6E6A235
+ run: |
+ echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import
+ echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a "cryptomator-${{ github.ref }}.tar.gz"
+ env:
+ GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
+ GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
- name: Create Release
id: create_release
uses: actions/create-release@v1
@@ -127,4 +137,13 @@ jobs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: buildkit-win.zip
asset_name: buildkit-win.zip
- asset_content_type: application/zip
\ No newline at end of file
+ asset_content_type: application/zip
+ - name: Upload tarball signature to GitHub Releases
+ uses: actions/upload-release-asset@v1.0.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: "cryptomator-${{ github.ref }}.tar.gz.asc"
+ asset_name: "cryptomator-${{ github.ref }}.tar.gz.asc"
+ asset_content_type: application/octet-stream
diff --git a/.gitignore b/.gitignore
index d0e6b59a3..be67207df 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,7 +17,9 @@ pom.xml.versionsBackup
# IntelliJ Settings Files (https://intellij-support.jetbrains.com/hc/en-us/articles/206544839-How-to-manage-projects-under-Version-Control-Systems) #
.idea/**/workspace.xml
.idea/**/tasks.xml
-.idea/dictionaries
+.idea/**/shelf
+.idea/dictionaries/**
+!.idea/dictionaries/dict_*
.idea/compiler.xml
.idea/encodings.xml
.idea/jarRepositories.xml
diff --git a/.idea/dictionaries/dict_de.xml b/.idea/dictionaries/dict_de.xml
new file mode 100644
index 000000000..a6ecf3c80
--- /dev/null
+++ b/.idea/dictionaries/dict_de.xml
@@ -0,0 +1,15 @@
+
+
+
+ tresorinhalt
+ tresorkonfigurationsdatei
+ tresorlaufwerk
+ tresorliste
+ tresorname
+ tresoroptionen
+ tresorstatistik
+ ungespeicherten
+ ungespeicherter
+
+
+
\ No newline at end of file
diff --git a/.idea/dictionaries/dict_project.xml b/.idea/dictionaries/dict_project.xml
new file mode 100644
index 000000000..5649810c7
--- /dev/null
+++ b/.idea/dictionaries/dict_project.xml
@@ -0,0 +1,106 @@
+
+
+
+ addvault
+ addvaultwizard
+ adoptopenjdk
+ affero
+ aquafx
+ autolock
+ autolocked
+ autolocking
+ baos
+ bkup
+ buildkit
+ changepassword
+ checkerframework
+ crit
+ crowdin
+ cryptofs
+ cryptomator
+ cryptomator's
+ cryptor
+ csprng
+ dcryptomator
+ dfuse
+ dirid
+ djdk
+ dokany
+ dragboard
+ easybind
+ encr
+ errorprone
+ failureaccess
+ fbidis
+ fldinst
+ fldrslt
+ fontawesomefx
+ gdrive
+ gvfs
+ hmmss
+ httpcomponents
+ httpcore
+ iclouddrive
+ jensd
+ jffi
+ keyloading
+ kibs
+ listcell
+ listenablefuture
+ lopp
+ mainwindow
+ masterkey
+ masterkeyfile
+ mibs
+ mountpath
+ mpc's
+ needsmigration
+ noncommercially
+ noël
+ nulab
+ oatomic
+ oauto
+ objectgraph
+ odefault
+ ogid
+ onoappledouble
+ ordonly
+ ouid
+ ovolname
+ passthrough
+ patreon
+ pcloud
+ probot
+ recoverykey
+ relicensing
+ removevault
+ revealer
+ serceman
+ setolabs
+ skymatic
+ socio
+ spof
+ stenzel
+ styleclass
+ sublicenses
+ sublicensing
+ systemkeychain
+ tada
+ tidelift
+ tmpmountpoint
+ tobiasdiez
+ toggler
+ traymenu
+ unknownerror
+ unlockable
+ vaultconfig
+ vaultlist
+ vaultname
+ vaultoptions
+ wrongfilealert
+ xattr
+ zillmann
+ zxcvbn
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 146ab09b7..0634be039 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/README.md b/README.md
index ad821780e..bcff4c978 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://cryptomator.org/)
[](https://github.com/cryptomator/cryptomator/actions?query=workflow%3ABuild)
-[](https://snyk.io/test/github/cryptomator/cryptomator?targetFile=main%2Fpom.xml)
+[](https://snyk.io/test/github/cryptomator/cryptomator)
[](https://www.codacy.com/gh/cryptomator/cryptomator/dashboard)
[](http://twitter.com/Cryptomator)
[](https://translate.cryptomator.org/)
diff --git a/pom.xml b/pom.xml
index 287f03f8a..1a86c335e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,30 +27,30 @@
com.github.serceman,com.github.jnr,org.ow2.asm,net.java.dev.jna,org.apache.jackrabbit,org.apache.httpcomponents
- 2.1.0-beta6
+ 2.1.0-beta71.0.0-rc11.0.0-beta21.0.0-beta21.0.0-beta11.3.11.3.1
- 1.2.3
+ 1.2.416
- 3.11
- 3.15.0
+ 3.12.0
+ 3.17.02.230.1.1-jre2.372.8.61.5.2
- 1.7.30
+ 1.7.311.2.3
- 5.7.1
- 3.9.0
+ 5.7.2
+ 3.11.22.2
@@ -134,11 +134,6 @@
java-jwt${jwt.version}
-
- com.fasterxml.jackson.core
- jackson-databind
- 2.11.0
-
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 9bd600695..a425c0659 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -23,11 +23,10 @@ module org.cryptomator.desktop {
requires org.slf4j;
requires org.apache.commons.lang3;
requires dagger;
+ requires com.auth0.jwt;
/* TODO: filename-based modules: */
requires static javax.inject; /* ugly dagger/guava crap */
- requires java.jwt;
- requires com.fasterxml.jackson.databind; // TODO: tmp fix, waiting for https://github.com/auth0/java-jwt/pull/484
requires logback.classic;
requires logback.core;
diff --git a/src/main/java/org/cryptomator/common/CommonsModule.java b/src/main/java/org/cryptomator/common/CommonsModule.java
index 705f98b8f..eb7e6cd13 100644
--- a/src/main/java/org/cryptomator/common/CommonsModule.java
+++ b/src/main/java/org/cryptomator/common/CommonsModule.java
@@ -46,6 +46,7 @@ public abstract class CommonsModule {
private static final int NUM_CORE_BG_THREADS = 6;
private static final long BG_THREAD_KEEPALIVE_SECONDS = 60l;
+ @SuppressWarnings("SpellCheckingInspection")
@Provides
@Singleton
@Named("licensePublicKey")
diff --git a/src/main/java/org/cryptomator/common/Environment.java b/src/main/java/org/cryptomator/common/Environment.java
index e27ae9bde..a6c20c2d7 100644
--- a/src/main/java/org/cryptomator/common/Environment.java
+++ b/src/main/java/org/cryptomator/common/Environment.java
@@ -123,8 +123,8 @@ public class Environment {
return Stream.empty();
} else {
Iterable iter = Splitter.on(separator).split(value);
- Spliterator spliter = Spliterators.spliteratorUnknownSize(iter.iterator(), Spliterator.ORDERED | Spliterator.IMMUTABLE);
- return StreamSupport.stream(spliter, false);
+ Spliterator spliterator = Spliterators.spliteratorUnknownSize(iter.iterator(), Spliterator.ORDERED | Spliterator.IMMUTABLE);
+ return StreamSupport.stream(spliterator, false);
}
}
}
diff --git a/src/main/java/org/cryptomator/common/SemVerComparator.java b/src/main/java/org/cryptomator/common/SemVerComparator.java
index e0ff9ae25..0f9148bd5 100644
--- a/src/main/java/org/cryptomator/common/SemVerComparator.java
+++ b/src/main/java/org/cryptomator/common/SemVerComparator.java
@@ -60,17 +60,17 @@ public class SemVerComparator implements Comparator {
final int commonCompCount = Math.min(vComps1.length, vComps2.length);
for (int i = 0; i < commonCompCount; i++) {
- int subversionComparisionResult = 0;
+ int subversionComparisonResult = 0;
try {
final int v1 = Integer.parseInt(vComps1[i]);
final int v2 = Integer.parseInt(vComps2[i]);
- subversionComparisionResult = v1 - v2;
+ subversionComparisonResult = v1 - v2;
} catch (NumberFormatException ex) {
// ok, lets compare this fragment lexicographically
- subversionComparisionResult = vComps1[i].compareTo(vComps2[i]);
+ subversionComparisonResult = vComps1[i].compareTo(vComps2[i]);
}
- if (subversionComparisionResult != 0) {
- return subversionComparisionResult;
+ if (subversionComparisonResult != 0) {
+ return subversionComparisonResult;
}
}
diff --git a/src/main/java/org/cryptomator/common/settings/Settings.java b/src/main/java/org/cryptomator/common/settings/Settings.java
index ee654db49..e4cb9b8f7 100644
--- a/src/main/java/org/cryptomator/common/settings/Settings.java
+++ b/src/main/java/org/cryptomator/common/settings/Settings.java
@@ -30,7 +30,7 @@ public class Settings {
public static final int MIN_PORT = 1024;
public static final int MAX_PORT = 65535;
public static final boolean DEFAULT_ASKED_FOR_UPDATE_CHECK = false;
- public static final boolean DEFAULT_CHECK_FOR_UDPATES = false;
+ public static final boolean DEFAULT_CHECK_FOR_UPDATES = false;
public static final boolean DEFAULT_START_HIDDEN = false;
public static final int DEFAULT_PORT = 42427;
public static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
@@ -46,7 +46,7 @@ public class Settings {
private final ObservableList directories = FXCollections.observableArrayList(VaultSettings::observables);
private final BooleanProperty askedForUpdateCheck = new SimpleBooleanProperty(DEFAULT_ASKED_FOR_UPDATE_CHECK);
- private final BooleanProperty checkForUpdates = new SimpleBooleanProperty(DEFAULT_CHECK_FOR_UDPATES);
+ private final BooleanProperty checkForUpdates = new SimpleBooleanProperty(DEFAULT_CHECK_FOR_UPDATES);
private final BooleanProperty startHidden = new SimpleBooleanProperty(DEFAULT_START_HIDDEN);
private final IntegerProperty port = new SimpleIntegerProperty(DEFAULT_PORT);
private final IntegerProperty numTrayNotifications = new SimpleIntegerProperty(DEFAULT_NUM_TRAY_NOTIFICATIONS);
diff --git a/src/main/java/org/cryptomator/common/settings/SettingsProvider.java b/src/main/java/org/cryptomator/common/settings/SettingsProvider.java
index 8310d0fa9..3be42f7ac 100644
--- a/src/main/java/org/cryptomator/common/settings/SettingsProvider.java
+++ b/src/main/java/org/cryptomator/common/settings/SettingsProvider.java
@@ -101,7 +101,7 @@ public class SettingsProvider implements Supplier {
if (settings == null) {
return;
}
- final Optional settingsPath = env.getSettingsPath().findFirst(); // alway save to preferred (first) path
+ final Optional settingsPath = env.getSettingsPath().findFirst(); // always save to preferred (first) path
settingsPath.ifPresent(path -> {
Runnable saveCommand = () -> this.save(settings, path);
ScheduledFuture> scheduledTask = scheduler.schedule(saveCommand, SAVE_DELAY_MS, TimeUnit.MILLISECONDS);
diff --git a/src/main/java/org/cryptomator/common/settings/VaultSettings.java b/src/main/java/org/cryptomator/common/settings/VaultSettings.java
index b3d4bb674..8ae20406c 100644
--- a/src/main/java/org/cryptomator/common/settings/VaultSettings.java
+++ b/src/main/java/org/cryptomator/common/settings/VaultSettings.java
@@ -31,7 +31,7 @@ import java.util.Random;
public class VaultSettings {
public static final boolean DEFAULT_UNLOCK_AFTER_STARTUP = false;
- public static final boolean DEFAULT_REAVEAL_AFTER_MOUNT = true;
+ public static final boolean DEFAULT_REVEAL_AFTER_MOUNT = true;
public static final boolean DEFAULT_USES_INDIVIDUAL_MOUNTPATH = false;
public static final boolean DEFAULT_USES_READONLY_MODE = false;
public static final String DEFAULT_MOUNT_FLAGS = "";
@@ -47,7 +47,7 @@ public class VaultSettings {
private final StringProperty displayName = new SimpleStringProperty();
private final StringProperty winDriveLetter = new SimpleStringProperty();
private final BooleanProperty unlockAfterStartup = new SimpleBooleanProperty(DEFAULT_UNLOCK_AFTER_STARTUP);
- private final BooleanProperty revealAfterMount = new SimpleBooleanProperty(DEFAULT_REAVEAL_AFTER_MOUNT);
+ private final BooleanProperty revealAfterMount = new SimpleBooleanProperty(DEFAULT_REVEAL_AFTER_MOUNT);
private final BooleanProperty useCustomMountPath = new SimpleBooleanProperty(DEFAULT_USES_INDIVIDUAL_MOUNTPATH);
private final StringProperty customMountPath = new SimpleStringProperty();
private final BooleanProperty usesReadOnlyMode = new SimpleBooleanProperty(DEFAULT_USES_READONLY_MODE);
diff --git a/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java b/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java
index 0cf92a48b..15a081f0d 100644
--- a/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java
+++ b/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java
@@ -44,7 +44,7 @@ class VaultSettingsJsonAdapter {
String customMountPath = null;
String winDriveLetter = null;
boolean unlockAfterStartup = VaultSettings.DEFAULT_UNLOCK_AFTER_STARTUP;
- boolean revealAfterMount = VaultSettings.DEFAULT_REAVEAL_AFTER_MOUNT;
+ boolean revealAfterMount = VaultSettings.DEFAULT_REVEAL_AFTER_MOUNT;
boolean useCustomMountPath = VaultSettings.DEFAULT_USES_INDIVIDUAL_MOUNTPATH;
boolean usesReadOnlyMode = VaultSettings.DEFAULT_USES_READONLY_MODE;
String mountFlags = VaultSettings.DEFAULT_MOUNT_FLAGS;
diff --git a/src/main/java/org/cryptomator/common/vaults/VaultModule.java b/src/main/java/org/cryptomator/common/vaults/VaultModule.java
index d254ec0dd..cc38e6933 100644
--- a/src/main/java/org/cryptomator/common/vaults/VaultModule.java
+++ b/src/main/java/org/cryptomator/common/vaults/VaultModule.java
@@ -138,7 +138,7 @@ public class VaultModule {
// see https://github.com/billziss-gh/winfsp/blob/5d0b10d0b643652c00ebb4704dc2bb28e7244973/src/dll/fuse/fuse_main.c#L53-L62 for syntax guide
// see https://github.com/billziss-gh/winfsp/blob/5d0b10d0b643652c00ebb4704dc2bb28e7244973/src/dll/fuse/fuse.c#L295-L319 for options (-o <...>)
- // see https://github.com/billziss-gh/winfsp/wiki/Frequently-Asked-Questions/5ba00e4be4f5e938eaae6ef1500b331de12dee77 (FUSE 4.) on why the given defaults were choosen
+ // see https://github.com/billziss-gh/winfsp/wiki/Frequently-Asked-Questions/5ba00e4be4f5e938eaae6ef1500b331de12dee77 (FUSE 4.) on why the given defaults were chosen
private String getWindowsFuseDefaultMountFlags(StringBinding mountName, ReadOnlyBooleanProperty readOnly) {
assert SystemUtils.IS_OS_WINDOWS;
StringBuilder flags = new StringBuilder();
diff --git a/src/main/java/org/cryptomator/common/vaults/VaultState.java b/src/main/java/org/cryptomator/common/vaults/VaultState.java
index 801ea7653..51365fbd2 100644
--- a/src/main/java/org/cryptomator/common/vaults/VaultState.java
+++ b/src/main/java/org/cryptomator/common/vaults/VaultState.java
@@ -46,7 +46,7 @@ public class VaultState extends ObservableValueBase implements
UNLOCKED,
/**
- * Unknown state due to preceeding unrecoverable exceptions.
+ * Unknown state due to preceding unrecoverable exceptions.
*/
ERROR;
}
diff --git a/src/main/java/org/cryptomator/common/vaults/VaultStats.java b/src/main/java/org/cryptomator/common/vaults/VaultStats.java
index 649be3a09..ac0b8df38 100644
--- a/src/main/java/org/cryptomator/common/vaults/VaultStats.java
+++ b/src/main/java/org/cryptomator/common/vaults/VaultStats.java
@@ -35,8 +35,8 @@ public class VaultStats {
private final LongProperty bytesPerSecondEncrypted = new SimpleLongProperty();
private final LongProperty bytesPerSecondDecrypted = new SimpleLongProperty();
private final DoubleProperty cacheHitRate = new SimpleDoubleProperty();
- private final LongProperty toalBytesRead = new SimpleLongProperty();
- private final LongProperty toalBytesWritten = new SimpleLongProperty();
+ private final LongProperty totalBytesRead = new SimpleLongProperty();
+ private final LongProperty totalBytesWritten = new SimpleLongProperty();
private final LongProperty totalBytesEncrypted = new SimpleLongProperty();
private final LongProperty totalBytesDecrypted = new SimpleLongProperty();
private final LongProperty filesRead = new SimpleLongProperty();
@@ -75,8 +75,8 @@ public class VaultStats {
cacheHitRate.set(stats.map(this::getCacheHitRate).orElse(0.0));
bytesPerSecondDecrypted.set(stats.map(CryptoFileSystemStats::pollBytesDecrypted).orElse(0L));
bytesPerSecondEncrypted.set(stats.map(CryptoFileSystemStats::pollBytesEncrypted).orElse(0L));
- toalBytesRead.set(stats.map(CryptoFileSystemStats::pollTotalBytesRead).orElse(0L));
- toalBytesWritten.set(stats.map(CryptoFileSystemStats::pollTotalBytesWritten).orElse(0L));
+ totalBytesRead.set(stats.map(CryptoFileSystemStats::pollTotalBytesRead).orElse(0L));
+ totalBytesWritten.set(stats.map(CryptoFileSystemStats::pollTotalBytesWritten).orElse(0L));
totalBytesEncrypted.set(stats.map(CryptoFileSystemStats::pollTotalBytesEncrypted).orElse(0L));
totalBytesDecrypted.set(stats.map(CryptoFileSystemStats::pollTotalBytesDecrypted).orElse(0L));
var oldAccessCount = filesRead.get() + filesWritten.get();
@@ -146,7 +146,7 @@ public class VaultStats {
return bytesPerSecondEncrypted;
}
- public long getBytesPerSecondEnrypted() {
+ public long getBytesPerSecondEncrypted() {
return bytesPerSecondEncrypted.get();
}
@@ -164,13 +164,13 @@ public class VaultStats {
return cacheHitRate.get();
}
- public LongProperty toalBytesReadProperty() {return toalBytesRead;}
+ public LongProperty totalBytesReadProperty() {return totalBytesRead;}
- public long getTotalBytesRead() { return toalBytesRead.get();}
+ public long getTotalBytesRead() { return totalBytesRead.get();}
- public LongProperty toalBytesWrittenProperty() {return toalBytesWritten;}
+ public LongProperty totalBytesWrittenProperty() {return totalBytesWritten;}
- public long getTotalBytesWritten() { return toalBytesWritten.get();}
+ public long getTotalBytesWritten() { return totalBytesWritten.get();}
public LongProperty totalBytesEncryptedProperty() {return totalBytesEncrypted;}
diff --git a/src/main/java/org/cryptomator/common/vaults/Volume.java b/src/main/java/org/cryptomator/common/vaults/Volume.java
index f608122bf..5f434fa43 100644
--- a/src/main/java/org/cryptomator/common/vaults/Volume.java
+++ b/src/main/java/org/cryptomator/common/vaults/Volume.java
@@ -12,7 +12,7 @@ import java.util.function.Consumer;
import java.util.stream.Stream;
/**
- * Takes a Volume and usess it to mount an unlocked vault
+ * Takes a Volume and uses it to mount an unlocked vault
*/
public interface Volume {
@@ -24,7 +24,7 @@ public interface Volume {
boolean isSupported();
/**
- * Gets the coresponding enum type of the {@link VolumeImpl volume implementation ("VolumeImpl")} that is implemented by this Volume.
+ * Gets the corresponding enum type of the {@link VolumeImpl volume implementation ("VolumeImpl")} that is implemented by this Volume.
*
* @return the type of implementation as defined by the {@link VolumeImpl VolumeImpl enum}
*/
diff --git a/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java b/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java
index 03c83377c..b1850bc1e 100644
--- a/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java
+++ b/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java
@@ -67,7 +67,7 @@ public class WebDavVolume implements Volume {
throw new IllegalStateException("Mounting requires unlocked WebDAV servlet.");
}
- //on windows, prevent an automatic drive letter selection in the upstream library. Either we choose already a specifc one or there is no free.
+ //on windows, prevent an automatic drive letter selection in the upstream library. Either we choose already a specific one or there is no free.
Supplier driveLetterSupplier;
if (System.getProperty("os.name").toLowerCase().contains("windows") && vaultSettings.winDriveLetter().isEmpty().get()) {
driveLetterSupplier = () -> windowsDriveLetters.getAvailableDriveLetter().orElse(null);
diff --git a/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java b/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggeringPolicy.java
similarity index 86%
rename from src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java
rename to src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggeringPolicy.java
index 3879fbdc6..25f5239ab 100644
--- a/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java
+++ b/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggeringPolicy.java
@@ -11,12 +11,12 @@ import java.io.File;
*
* @param Event type the policy possibly reacts to
*/
-public class LaunchAndSizeBasedTriggerinPolicy extends TriggeringPolicyBase {
+public class LaunchAndSizeBasedTriggeringPolicy extends TriggeringPolicyBase {
LaunchBasedTriggeringPolicy launchBasedTriggeringPolicy;
SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy;
- public LaunchAndSizeBasedTriggerinPolicy(FileSize threshold) {
+ public LaunchAndSizeBasedTriggeringPolicy(FileSize threshold) {
this.launchBasedTriggeringPolicy = new LaunchBasedTriggeringPolicy<>();
this.sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy<>();
sizeBasedTriggeringPolicy.setMaxFileSize(threshold);
diff --git a/src/main/java/org/cryptomator/logging/LoggerModule.java b/src/main/java/org/cryptomator/logging/LoggerModule.java
index 0b24e0e24..4866655e3 100644
--- a/src/main/java/org/cryptomator/logging/LoggerModule.java
+++ b/src/main/java/org/cryptomator/logging/LoggerModule.java
@@ -85,7 +85,7 @@ public class LoggerModule {
appender.setContext(context);
appender.setFile(logDir.resolve(LOGFILE_NAME).toString());
appender.setEncoder(encoder);
- LaunchAndSizeBasedTriggerinPolicy triggeringPolicy = new LaunchAndSizeBasedTriggerinPolicy(FileSize.valueOf(LOG_MAX_SIZE));
+ LaunchAndSizeBasedTriggeringPolicy triggeringPolicy = new LaunchAndSizeBasedTriggeringPolicy(FileSize.valueOf(LOG_MAX_SIZE));
triggeringPolicy.setContext(context);
triggeringPolicy.start();
appender.setTriggeringPolicy(triggeringPolicy);
diff --git a/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java b/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java
index 9a4f5d012..c10054ef4 100644
--- a/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java
+++ b/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java
@@ -62,8 +62,8 @@ public class FxmlLoaderFactory {
}
Parent root = loader.getRoot();
// TODO: discuss if we can remove language-specific stylesheets
- // List addtionalStyleSheets = Splitter.on(',').omitEmptyStrings().splitToList(resourceBundle.getString("additionalStyleSheets"));
- // addtionalStyleSheets.forEach(styleSheet -> root.getStylesheets().add("/css/" + styleSheet));
+ // List additionalStyleSheets = Splitter.on(',').omitEmptyStrings().splitToList(resourceBundle.getString("additionalStyleSheets"));
+ // additionalStyleSheets.forEach(styleSheet -> root.getStylesheets().add("/css/" + styleSheet));
return sceneFactory.apply(root);
}
diff --git a/src/main/java/org/cryptomator/ui/common/WeakBindings.java b/src/main/java/org/cryptomator/ui/common/WeakBindings.java
index e6071df1d..6efa747c9 100644
--- a/src/main/java/org/cryptomator/ui/common/WeakBindings.java
+++ b/src/main/java/org/cryptomator/ui/common/WeakBindings.java
@@ -77,7 +77,7 @@ public final class WeakBindings {
* @param observable The observable
* @return a IntegerBinding weakly referenced from the given observable
*/
- public static IntegerBinding bindInterger(ObservableValue observable) {
+ public static IntegerBinding bindInteger(ObservableValue observable) {
return new IntegerBinding() {
{
bind(observable);
diff --git a/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java b/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java
index 928cfc40e..4a4e43fff 100644
--- a/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java
+++ b/src/main/java/org/cryptomator/ui/controls/NiceSecurePasswordField.java
@@ -12,8 +12,8 @@ import javafx.scene.layout.StackPane;
public class NiceSecurePasswordField extends StackPane {
private static final String STYLE_CLASS = "nice-secure-password-field";
- private static final String ICONS_STLYE_CLASS = "icons";
- private static final String REVEAL_BUTTON_STLYE_CLASS = "reveal-button";
+ private static final String ICONS_STYLE_CLASS = "icons";
+ private static final String REVEAL_BUTTON_STYLE_CLASS = "reveal-button";
private static final int ICON_SPACING = 6;
private static final double ICON_SIZE = 14.0;
@@ -30,7 +30,7 @@ public class NiceSecurePasswordField extends StackPane {
iconContainer.setAlignment(Pos.CENTER_RIGHT);
iconContainer.setMaxWidth(Double.NEGATIVE_INFINITY);
iconContainer.setPrefWidth(42); // TODO
- iconContainer.getStyleClass().add(ICONS_STLYE_CLASS);
+ iconContainer.getStyleClass().add(ICONS_STYLE_CLASS);
StackPane.setAlignment(iconContainer, Pos.CENTER_RIGHT);
capsLockedIcon.setGlyph(FontAwesome5Icon.ARROW_UP);
@@ -51,7 +51,7 @@ public class NiceSecurePasswordField extends StackPane {
revealPasswordButton.setFocusTraversable(false);
revealPasswordButton.visibleProperty().bind(passwordField.focusedProperty());
revealPasswordButton.managedProperty().bind(passwordField.focusedProperty());
- revealPasswordButton.getStyleClass().add(REVEAL_BUTTON_STLYE_CLASS);
+ revealPasswordButton.getStyleClass().add(REVEAL_BUTTON_STYLE_CLASS);
passwordField.revealPasswordProperty().bind(revealPasswordButton.selectedProperty());
diff --git a/src/main/java/org/cryptomator/ui/controls/ThrougputLabel.java b/src/main/java/org/cryptomator/ui/controls/ThroughputLabel.java
similarity index 96%
rename from src/main/java/org/cryptomator/ui/controls/ThrougputLabel.java
rename to src/main/java/org/cryptomator/ui/controls/ThroughputLabel.java
index a21e6d916..19999ea11 100644
--- a/src/main/java/org/cryptomator/ui/controls/ThrougputLabel.java
+++ b/src/main/java/org/cryptomator/ui/controls/ThroughputLabel.java
@@ -8,7 +8,7 @@ import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.control.Label;
-public class ThrougputLabel extends Label {
+public class ThroughputLabel extends Label {
private static final long KIBS_THRESHOLD = 1l << 7; // 0.128 kiB/s
private static final long MIBS_THRESHOLD = 1l << 19; // 0.512 MiB/s
@@ -18,7 +18,7 @@ public class ThrougputLabel extends Label {
private final StringProperty mibsFormat = new SimpleStringProperty("%.3f");
private final LongProperty bytesPerSecond = new SimpleLongProperty();
- public ThrougputLabel() {
+ public ThroughputLabel() {
textProperty().bind(createStringBinding());
}
diff --git a/src/main/java/org/cryptomator/ui/health/CheckDetailController.java b/src/main/java/org/cryptomator/ui/health/CheckDetailController.java
index 281e404cc..68a74c4a0 100644
--- a/src/main/java/org/cryptomator/ui/health/CheckDetailController.java
+++ b/src/main/java/org/cryptomator/ui/health/CheckDetailController.java
@@ -15,6 +15,8 @@ import javafx.collections.FXCollections;
import javafx.concurrent.Worker;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
+import java.time.Duration;
+import java.util.ResourceBundle;
import java.util.function.Function;
import java.util.stream.Stream;
@@ -24,8 +26,7 @@ public class CheckDetailController implements FxController {
private final EasyObservableList results;
private final OptionalBinding taskState;
private final Binding taskName;
- private final Binding taskDuration;
- private final ResultListCellFactory resultListCellFactory;
+ private final Binding taskDuration;
private final Binding taskRunning;
private final Binding taskScheduled;
private final Binding taskFinished;
@@ -35,17 +36,20 @@ public class CheckDetailController implements FxController {
private final Binding taskCancelled;
private final Binding countOfWarnSeverity;
private final Binding countOfCritSeverity;
+ private final ResultListCellFactory resultListCellFactory;
+ private final ResourceBundle resourceBundle;
public ListView resultsListView;
private Subscription resultSubscription;
@Inject
- public CheckDetailController(ObjectProperty selectedTask, ResultListCellFactory resultListCellFactory) {
+ public CheckDetailController(ObjectProperty selectedTask, ResultListCellFactory resultListCellFactory, ResourceBundle resourceBundle) {
+ this.resultListCellFactory = resultListCellFactory;
+ this.resourceBundle = resourceBundle;
this.results = EasyBind.wrapList(FXCollections.observableArrayList());
this.taskState = EasyBind.wrapNullable(selectedTask).mapObservable(HealthCheckTask::stateProperty);
this.taskName = EasyBind.wrapNullable(selectedTask).map(HealthCheckTask::getTitle).orElse("");
- this.taskDuration = EasyBind.wrapNullable(selectedTask).mapObservable(HealthCheckTask::durationInMillisProperty).orElse(-1L);
- this.resultListCellFactory = resultListCellFactory;
+ this.taskDuration = EasyBind.wrapNullable(selectedTask).mapObservable(HealthCheckTask::durationInMillisProperty).orElse(-1L).map(this::millisToReadAbleDuration);
this.taskRunning = EasyBind.wrapNullable(selectedTask).mapObservable(HealthCheckTask::runningProperty).orElse(false); //TODO: DOES NOT WORK
this.taskScheduled = taskState.map(Worker.State.SCHEDULED::equals).orElse(false);
this.taskNotStarted = taskState.map(Worker.State.READY::equals).orElse(false);
@@ -87,11 +91,11 @@ public class CheckDetailController implements FxController {
return taskName;
}
- public Number getTaskDuration() {
+ public String getTaskDuration() {
return taskDuration.getValue();
}
- public Binding taskDurationProperty() {
+ public Binding taskDurationProperty() {
return taskDuration;
}
@@ -167,4 +171,21 @@ public class CheckDetailController implements FxController {
return taskCancelled;
}
+ private String millisToReadAbleDuration(Number millis) {
+ Duration tmp = Duration.ofMillis(millis.longValue());
+ long hours = tmp.toHoursPart();
+ long minutes = tmp.toMinutesPart();
+ long seconds = tmp.toSecondsPart();
+ if (hours != 0) {
+ String hms_format = resourceBundle.getString("health.check.detail.hmsFormat");
+ return String.format(hms_format, hours, minutes, seconds);
+ } else if (minutes != 0) {
+ String ms_format = resourceBundle.getString("health.check.detail.msFormat");
+ return String.format(ms_format, minutes, seconds);
+ } else {
+ String s_format = resourceBundle.getString("health.check.detail.sFormat");
+ return String.format(s_format, seconds);
+ }
+ }
+
}
diff --git a/src/main/java/org/cryptomator/ui/health/CheckListCell.java b/src/main/java/org/cryptomator/ui/health/CheckListCell.java
index 78f8b1b33..63d9d8d6b 100644
--- a/src/main/java/org/cryptomator/ui/health/CheckListCell.java
+++ b/src/main/java/org/cryptomator/ui/health/CheckListCell.java
@@ -4,35 +4,81 @@ import org.cryptomator.ui.controls.FontAwesome5Icon;
import org.cryptomator.ui.controls.FontAwesome5IconView;
import javafx.beans.binding.Bindings;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
+import javafx.scene.control.CheckBox;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.ListCell;
+import javafx.util.Callback;
class CheckListCell extends ListCell {
private final FontAwesome5IconView stateIcon = new FontAwesome5IconView();
+ private final Callback selectedGetter;
+ private final ObjectProperty stateProperty;
- CheckListCell() {
+ private CheckBox checkBox = new CheckBox();
+ private BooleanProperty selectedProperty;
+
+ CheckListCell(Callback selectedGetter, ObservableValue switchIndicator) {
+ this.selectedGetter = selectedGetter;
+ this.stateProperty = new SimpleObjectProperty<>(State.SELECTION);
+ switchIndicator.addListener(this::changeState);
setPadding(new Insets(6));
setAlignment(Pos.CENTER_LEFT);
setContentDisplay(ContentDisplay.LEFT);
+ getStyleClass().add("label");
+ }
+
+ private void changeState(ObservableValue extends Boolean> observableValue, boolean oldValue, boolean newValue) {
+ if (newValue) {
+ stateProperty.set(State.RUN);
+ } else {
+ stateProperty.set(State.SELECTION);
+ }
}
@Override
protected void updateItem(HealthCheckTask item, boolean empty) {
super.updateItem(item, empty);
-
if (item != null) {
- textProperty().bind(item.titleProperty());
+ setText(item.getTitle());
+ }
+ switch (stateProperty.get()) {
+ case SELECTION -> updateItemSelection(item, empty);
+ case RUN -> updateItemRun(item, empty);
+ }
+ }
+
+ private void updateItemSelection(HealthCheckTask item, boolean empty) {
+ if (!empty) {
+ setGraphic(checkBox);
+
+ if (selectedProperty != null) {
+ checkBox.selectedProperty().unbindBidirectional(selectedProperty);
+ }
+ selectedProperty = selectedGetter.call(item);
+ if (selectedProperty != null) {
+ checkBox.selectedProperty().bindBidirectional(selectedProperty);
+ }
+ } else {
+ setGraphic(null);
+ setText(null);
+ }
+ }
+
+ private void updateItemRun(HealthCheckTask item, boolean empty) {
+ if (item != null) {
item.stateProperty().addListener(this::stateChanged);
- graphicProperty().bind(Bindings.createObjectBinding(() -> graphicForState(item.getState()),item.stateProperty()));
+ graphicProperty().bind(Bindings.createObjectBinding(() -> graphicForState(item.getState()), item.stateProperty()));
stateIcon.setGlyph(glyphForState(item.getState()));
} else {
- textProperty().unbind();
graphicProperty().unbind();
setGraphic(null);
setText(null);
@@ -61,4 +107,9 @@ class CheckListCell extends ListCell {
case SUCCEEDED -> FontAwesome5Icon.CHECK;
};
}
+
+ private enum State {
+ SELECTION,
+ RUN;
+ }
}
diff --git a/src/main/java/org/cryptomator/ui/health/CheckListController.java b/src/main/java/org/cryptomator/ui/health/CheckListController.java
index ccb41d56b..5c7e5af7d 100644
--- a/src/main/java/org/cryptomator/ui/health/CheckListController.java
+++ b/src/main/java/org/cryptomator/ui/health/CheckListController.java
@@ -46,7 +46,7 @@ public class CheckListController implements FxController {
private final ReportWriter reportWriter;
private final ExecutorService executorService;
private final ObjectProperty selectedTask;
- private final Lazy errorComponenBuilder;
+ private final Lazy errorComponentBuilder;
private final SimpleObjectProperty> runningTask;
private final Binding running;
private final Binding finished;
@@ -60,13 +60,13 @@ public class CheckListController implements FxController {
@Inject
- public CheckListController(@HealthCheckWindow Stage window, Lazy> tasks, ReportWriter reportWriteTask, ObjectProperty selectedTask, ExecutorService executorService, Lazy errorComponenBuilder) {
+ public CheckListController(@HealthCheckWindow Stage window, Lazy> tasks, ReportWriter reportWriteTask, ObjectProperty selectedTask, ExecutorService executorService, Lazy errorComponentBuilder) {
this.window = window;
this.tasks = FXCollections.observableArrayList(tasks.get());
this.reportWriter = reportWriteTask;
this.executorService = executorService;
this.selectedTask = selectedTask;
- this.errorComponenBuilder = errorComponenBuilder;
+ this.errorComponentBuilder = errorComponentBuilder;
this.runningTask = new SimpleObjectProperty<>();
this.running = EasyBind.wrapNullable(runningTask).mapObservable(Worker::runningProperty).orElse(false);
this.finished = EasyBind.wrapNullable(runningTask).mapObservable(Worker::stateProperty).map(END_STATES::contains).orElse(false);
@@ -84,17 +84,7 @@ public class CheckListController implements FxController {
@FXML
public void initialize() {
checksListView.setItems(tasks);
- checksListView.setCellFactory(CheckBoxListCell.forListView(listPickIndicators::get, new StringConverter() {
- @Override
- public String toString(HealthCheckTask object) {
- return object.getTitle();
- }
-
- @Override
- public HealthCheckTask fromString(String string) {
- return null;
- }
- }));
+ checksListView.setCellFactory(view -> new CheckListCell(listPickIndicators::get, showResultScreen));
selectedTask.bind(checksListView.getSelectionModel().selectedItemProperty());
}
@@ -115,7 +105,7 @@ public class CheckListController implements FxController {
runningTask.set(batchService);
showResultScreen.set(true);
checksListView.getSelectionModel().select(batch.get(0));
- checksListView.setCellFactory(view -> new CheckListCell());
+ checksListView.refresh();
window.sizeToScene();
}
@@ -131,7 +121,7 @@ public class CheckListController implements FxController {
reportWriter.writeReport(tasks);
} catch (IOException e) {
LOG.error("Failed to write health check report.", e);
- errorComponenBuilder.get().cause(e).window(window).returnToScene(window.getScene()).build().showErrorScene();
+ errorComponentBuilder.get().cause(e).window(window).returnToScene(window.getScene()).build().showErrorScene();
}
}
diff --git a/src/main/java/org/cryptomator/ui/keyloading/KeyLoadingStrategy.java b/src/main/java/org/cryptomator/ui/keyloading/KeyLoadingStrategy.java
index ed8ca0540..eaef7480b 100644
--- a/src/main/java/org/cryptomator/ui/keyloading/KeyLoadingStrategy.java
+++ b/src/main/java/org/cryptomator/ui/keyloading/KeyLoadingStrategy.java
@@ -35,7 +35,7 @@ public interface KeyLoadingStrategy extends MasterkeyLoader {
}
/**
- * Release any ressources or do follow-up tasks after loading a key.
+ * Release any resources or do follow-up tasks after loading a key.
*
* @param unlockedSuccessfully true if successfully unlocked a vault with the loaded key
* @implNote This method might be invoked multiple times, depending on whether multiple attempts to load a key are started.
@@ -47,7 +47,7 @@ public interface KeyLoadingStrategy extends MasterkeyLoader {
/**
* A key loading strategy that will always fail by throwing a {@link MasterkeyLoadingFailedException}.
*
- * @param exception The cause of the failure. If not alreay an {@link MasterkeyLoadingFailedException}, it will get wrapped.
+ * @param exception The cause of the failure. If not already an {@link MasterkeyLoadingFailedException}, it will get wrapped.
* @return A new KeyLoadingStrategy that will always fail with an {@link MasterkeyLoadingFailedException}.
*/
static KeyLoadingStrategy failed(Exception exception) {
diff --git a/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java b/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java
index f8fbdd720..39db1cc04 100644
--- a/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java
+++ b/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/MasterkeyFileLoadingStrategy.java
@@ -32,7 +32,7 @@ public class MasterkeyFileLoadingStrategy implements KeyLoadingStrategy {
public static final String SCHEME = "masterkeyfile";
private final Vault vault;
- private final MasterkeyFileAccess masterkeyFileAcccess;
+ private final MasterkeyFileAccess masterkeyFileAccess;
private final Stage window;
private final Lazy passphraseEntryScene;
private final Lazy selectMasterkeyFileScene;
@@ -45,9 +45,9 @@ public class MasterkeyFileLoadingStrategy implements KeyLoadingStrategy {
private boolean wrongPassword;
@Inject
- public MasterkeyFileLoadingStrategy(@KeyLoading Vault vault, MasterkeyFileAccess masterkeyFileAcccess, @KeyLoading Stage window, @FxmlScene(FxmlFile.UNLOCK_ENTER_PASSWORD) Lazy passphraseEntryScene, @FxmlScene(FxmlFile.UNLOCK_SELECT_MASTERKEYFILE) Lazy selectMasterkeyFileScene, UserInteractionLock passwordEntryLock, UserInteractionLock masterkeyFileProvisionLock, AtomicReference password, AtomicReference filePath, MasterkeyFileLoadingFinisher finisher) {
+ public MasterkeyFileLoadingStrategy(@KeyLoading Vault vault, MasterkeyFileAccess masterkeyFileAccess, @KeyLoading Stage window, @FxmlScene(FxmlFile.UNLOCK_ENTER_PASSWORD) Lazy passphraseEntryScene, @FxmlScene(FxmlFile.UNLOCK_SELECT_MASTERKEYFILE) Lazy selectMasterkeyFileScene, UserInteractionLock passwordEntryLock, UserInteractionLock masterkeyFileProvisionLock, AtomicReference password, AtomicReference filePath, MasterkeyFileLoadingFinisher finisher) {
this.vault = vault;
- this.masterkeyFileAcccess = masterkeyFileAcccess;
+ this.masterkeyFileAccess = masterkeyFileAccess;
this.window = window;
this.passphraseEntryScene = passphraseEntryScene;
this.selectMasterkeyFileScene = selectMasterkeyFileScene;
@@ -68,7 +68,7 @@ public class MasterkeyFileLoadingStrategy implements KeyLoadingStrategy {
filePath = getAlternateMasterkeyFilePath();
}
CharSequence passphrase = getPassphrase();
- return masterkeyFileAcccess.load(filePath, passphrase);
+ return masterkeyFileAccess.load(filePath, passphrase);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new UnlockCancelledException("Unlock interrupted", e);
diff --git a/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java b/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java
index 49ef79e83..f4e5bb790 100644
--- a/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java
+++ b/src/main/java/org/cryptomator/ui/launcher/AppLaunchEventHandler.java
@@ -64,7 +64,7 @@ class AppLaunchEventHandler {
}
}
- // TODO dedup MainWindowController...
+ // TODO deduplicate MainWindowController...
private void addOrRevealVault(Path potentialVaultPath) {
assert Platform.isFxApplicationThread();
try {
diff --git a/src/main/java/org/cryptomator/ui/lock/LockWorkflow.java b/src/main/java/org/cryptomator/ui/lock/LockWorkflow.java
index 87fd486f2..73b4844b9 100644
--- a/src/main/java/org/cryptomator/ui/lock/LockWorkflow.java
+++ b/src/main/java/org/cryptomator/ui/lock/LockWorkflow.java
@@ -22,7 +22,7 @@ import javafx.stage.Window;
/**
* The sequence of actions performed and checked during lock of a vault.
*
- * This class implements the Task interface, sucht that it can run in the background with some possible forground operations/requests to the ui, without blocking the main app.
+ * This class implements the Task interface, sucht that it can run in the background with some possible foreground operations/requests to the ui, without blocking the main app.
* If the task state is
*
succeeded, the vault was successfully locked;
*
canceled, the lock was canceled;
diff --git a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java
index ea9311c88..ef050e799 100644
--- a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java
+++ b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java
@@ -129,7 +129,7 @@ public class MainWindowTitleController implements FxController {
}
public boolean isShowMinimizeButton() {
- // always show the minimize button if no tray icon is present OR it is explicitily enabled
+ // always show the minimize button if no tray icon is present OR it is explicitly enabled
return !trayMenuInitialized || settings.showMinimizeButton().get();
}
}
diff --git a/src/main/java/org/cryptomator/ui/recoverykey/AutoCompleter.java b/src/main/java/org/cryptomator/ui/recoverykey/AutoCompleter.java
index 5c747261b..daac7f459 100644
--- a/src/main/java/org/cryptomator/ui/recoverykey/AutoCompleter.java
+++ b/src/main/java/org/cryptomator/ui/recoverykey/AutoCompleter.java
@@ -26,7 +26,7 @@ public class AutoCompleter {
if (Strings.isNullOrEmpty(prefix)) {
return Optional.empty();
}
- int potentialMatchIdx = findIndexOfLexicographicallyPreceeding(0, dictionary.size(), prefix);
+ int potentialMatchIdx = findIndexOfLexicographicallyPreceding(0, dictionary.size(), prefix);
if (potentialMatchIdx < dictionary.size()) {
String potentialMatch = dictionary.get(potentialMatchIdx);
return potentialMatch.startsWith(prefix) ? Optional.of(potentialMatch) : Optional.empty();
@@ -48,21 +48,21 @@ public class AutoCompleter {
* @param prefix
* @return index between [0, dictLen], i.e. index can exceed the upper bounds of {@link #dictionary}.
*/
- private int findIndexOfLexicographicallyPreceeding(int begin, int end, String prefix) {
+ private int findIndexOfLexicographicallyPreceding(int begin, int end, String prefix) {
if (begin >= end) {
return begin; // this is usually where a binary search ends "unsuccessful"
}
int mid = (begin + end) / 2;
String word = dictionary.get(mid);
- if (prefix.compareTo(word) <= 0) { // prefix preceeds or matches word
+ if (prefix.compareTo(word) <= 0) { // prefix precedes or matches word
// proceed in left half
assert mid < end;
- return findIndexOfLexicographicallyPreceeding(0, mid, prefix);
+ return findIndexOfLexicographicallyPreceding(0, mid, prefix);
} else {
// proceed in right half
assert mid >= begin;
- return findIndexOfLexicographicallyPreceeding(mid + 1, end, prefix);
+ return findIndexOfLexicographicallyPreceding(mid + 1, end, prefix);
}
}
diff --git a/src/main/java/org/cryptomator/ui/recoverykey/WordEncoder.java b/src/main/java/org/cryptomator/ui/recoverykey/WordEncoder.java
index ba4753879..7d31d660c 100644
--- a/src/main/java/org/cryptomator/ui/recoverykey/WordEncoder.java
+++ b/src/main/java/org/cryptomator/ui/recoverykey/WordEncoder.java
@@ -58,7 +58,7 @@ class WordEncoder {
* @throws IllegalArgumentException If input is not a multiple of three bytes
*/
public String encodePadded(byte[] input) {
- Preconditions.checkArgument(input.length % 3 == 0, "input needs to be padded to a multipe of three");
+ Preconditions.checkArgument(input.length % 3 == 0, "input needs to be padded to a multiple of three");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length; i += 3) {
byte b1 = input[i];
@@ -85,12 +85,12 @@ class WordEncoder {
* @throws IllegalArgumentException If the encoded string doesn't consist of a multiple of two words or one of the words is unknown to this encoder.
*/
public byte[] decode(String encoded) {
- List splitted = Splitter.on(DELIMITER).omitEmptyStrings().splitToList(Strings.nullToEmpty(encoded));
- Preconditions.checkArgument(splitted.size() % 2 == 0, "%s needs to be a multiple of two words", encoded);
- byte[] result = new byte[splitted.size() / 2 * 3];
- for (int i = 0; i < splitted.size(); i += 2) {
- String w1 = splitted.get(i);
- String w2 = splitted.get(i + 1);
+ List split = Splitter.on(DELIMITER).omitEmptyStrings().splitToList(Strings.nullToEmpty(encoded));
+ Preconditions.checkArgument(split.size() % 2 == 0, "%s needs to be a multiple of two words", encoded);
+ byte[] result = new byte[split.size() / 2 * 3];
+ for (int i = 0; i < split.size(); i += 2) {
+ String w1 = split.get(i);
+ String w2 = split.get(i + 1);
int firstWordIndex = indices.getOrDefault(w1, -1);
int secondWordIndex = indices.getOrDefault(w2, -1);
Preconditions.checkArgument(firstWordIndex != -1, "%s not in dictionary", w1);
diff --git a/src/main/java/org/cryptomator/ui/stats/VaultStatisticsController.java b/src/main/java/org/cryptomator/ui/stats/VaultStatisticsController.java
index f8937e90f..a3c430946 100644
--- a/src/main/java/org/cryptomator/ui/stats/VaultStatisticsController.java
+++ b/src/main/java/org/cryptomator/ui/stats/VaultStatisticsController.java
@@ -65,8 +65,8 @@ public class VaultStatisticsController implements FxController {
this.cacheHitRate = WeakBindings.bindDouble(stats.cacheHitRateProperty());
this.cacheHitDegrees = cacheHitRate.multiply(-270);
this.cacheHitPercentage = cacheHitRate.multiply(100);
- this.totalBytesRead = WeakBindings.bindLong(stats.toalBytesReadProperty());
- this.totalBytesWritten = WeakBindings.bindLong(stats.toalBytesWrittenProperty());
+ this.totalBytesRead = WeakBindings.bindLong(stats.totalBytesReadProperty());
+ this.totalBytesWritten = WeakBindings.bindLong(stats.totalBytesWrittenProperty());
this.totalBytesDecrypted = WeakBindings.bindLong(stats.totalBytesDecryptedProperty());
this.totalBytesEncrypted = WeakBindings.bindLong(stats.totalBytesEncryptedProperty());
this.filesRead = WeakBindings.bindLong(stats.filesRead());
@@ -102,7 +102,7 @@ public class VaultStatisticsController implements FxController {
this.decryptedBytesRead = readData;
this.encryptedBytesWrite = writeData;
- // initialize data once and change value of datapoints later:
+ // initialize data once and change value of data points later:
for (int i = 0; i < IO_SAMPLING_STEPS; i++) {
decryptedBytesRead.getData().add(new Data<>(i, 0));
encryptedBytesWrite.getData().add(new Data<>(i, 0));
diff --git a/src/main/resources/fxml/stats.fxml b/src/main/resources/fxml/stats.fxml
index a2ef920b9..b17dc67f6 100644
--- a/src/main/resources/fxml/stats.fxml
+++ b/src/main/resources/fxml/stats.fxml
@@ -2,7 +2,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -56,7 +56,7 @@
-
+
diff --git a/src/main/resources/fxml/vault_detail_unlocked.fxml b/src/main/resources/fxml/vault_detail_unlocked.fxml
index 7a4d62952..29b11ed17 100644
--- a/src/main/resources/fxml/vault_detail_unlocked.fxml
+++ b/src/main/resources/fxml/vault_detail_unlocked.fxml
@@ -1,5 +1,5 @@
-
+
@@ -41,11 +41,11 @@
-
+
-
+
diff --git a/src/main/resources/fxml/vault_options_masterkey.fxml b/src/main/resources/fxml/vault_options_masterkey.fxml
index a8ba03f8f..ad7097924 100644
--- a/src/main/resources/fxml/vault_options_masterkey.fxml
+++ b/src/main/resources/fxml/vault_options_masterkey.fxml
@@ -29,7 +29,7 @@
-
+