From fafb7b229fce8e1064ffec4e158de80d895b033f Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 4 Jun 2021 20:29:15 +0200 Subject: [PATCH 001/208] update i18n config [ci skip] --- .crowdin.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.crowdin.yml b/.crowdin.yml index a70a3975b..735a56aa9 100644 --- a/.crowdin.yml +++ b/.crowdin.yml @@ -1,5 +1,6 @@ commit_message: "[ci skip]" -escape_special_characters: 0 files: - source: /src/main/resources/i18n/strings.properties translation: /src/main/resources/i18n/strings_%two_letters_code%.properties + escape_quotes: 0 + escape_special_characters: 0 From b70033e777f9420de744245febf278ca9eb11233 Mon Sep 17 00:00:00 2001 From: Cryptobot Date: Fri, 4 Jun 2021 20:48:48 +0200 Subject: [PATCH 002/208] Update Crowdin configuration file --- .crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.crowdin.yml b/.crowdin.yml index 735a56aa9..ab4470ffa 100644 --- a/.crowdin.yml +++ b/.crowdin.yml @@ -1,4 +1,4 @@ -commit_message: "[ci skip]" +commit_message: '[ci skip]' files: - source: /src/main/resources/i18n/strings.properties translation: /src/main/resources/i18n/strings_%two_letters_code%.properties From 04c13ba24228634764b7f4a3e52b04adbc5c15df Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 4 Jun 2021 21:00:56 +0200 Subject: [PATCH 003/208] New Crowdin updates (#1677) [ci skip] Co-authored-by: Cryptobot --- src/main/resources/i18n/strings_pt_BR.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/i18n/strings_pt_BR.properties b/src/main/resources/i18n/strings_pt_BR.properties index 4e8c985c2..2ef517721 100644 --- a/src/main/resources/i18n/strings_pt_BR.properties +++ b/src/main/resources/i18n/strings_pt_BR.properties @@ -31,7 +31,7 @@ traymenu.vault.reveal=Exibir # Add Vault Wizard addvaultwizard.title=Adicionar Cofre ## Welcome -addvaultwizard.welcome.newButton=Criar Novo Cofre +addvaultwizard.welcome.newButton=Criar Um Novo Cofre addvaultwizard.welcome.existingButton=Abrir Cofre Existente ## New ### Name @@ -329,6 +329,9 @@ vaultOptions.masterkey.recoveryKeyExpanation=Se você perder a sua senha, a úni vaultOptions.masterkey.showRecoveryKeyBtn=Exibir chave de recuperação vaultOptions.masterkey.recoverPasswordBtn=Recuperar Senha ## Auto Lock +vaultOptions.autoLock=Bloqueio automático +vaultOptions.autoLock.lockAfterTimePart1=Bloquear quando inativo por +vaultOptions.autoLock.lockAfterTimePart2=minutos # Recovery Key recoveryKey.title=Chave de recuperação From 2d3f4d1c039d7872ca4a1bccad2fb8ee00d90945 Mon Sep 17 00:00:00 2001 From: Cryptobot Date: Sat, 5 Jun 2021 09:11:48 +0200 Subject: [PATCH 004/208] New Crowdin updates (#1678) [ci skip] Co-authored-by: Sebastian Stenzel --- src/main/resources/i18n/strings_cs.properties | 2 +- src/main/resources/i18n/strings_el.properties | 23 ++++++++++++++++ src/main/resources/i18n/strings_fr.properties | 26 +++++++++---------- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/main/resources/i18n/strings_cs.properties b/src/main/resources/i18n/strings_cs.properties index be92842b6..651d13cdb 100644 --- a/src/main/resources/i18n/strings_cs.properties +++ b/src/main/resources/i18n/strings_cs.properties @@ -11,7 +11,7 @@ generic.button.copy=Kopírovat generic.button.copied=Zkopírováno! generic.button.done=Hotovo generic.button.next=Další -generic.button.print=Vytisknout +generic.button.print=Tisk ## Error generic.error.title=Došlo k neočekávané chybě generic.error.instruction=Tohle se nemělo stát. Prosím, nahlaste níže uvedený chybový text a popište, jaké kroky vedly k této chybě. diff --git a/src/main/resources/i18n/strings_el.properties b/src/main/resources/i18n/strings_el.properties index ee60e0e0a..462f79dcb 100644 --- a/src/main/resources/i18n/strings_el.properties +++ b/src/main/resources/i18n/strings_el.properties @@ -146,8 +146,27 @@ migration.impossible.reason=Το vault δεν μπορεί να συγχωνευ migration.impossible.moreInfo=Το vault μπορεί να ανοιχθεί με παλαιότερη έκδοση. Για οδηγίες χειροκίνητης συγχώνευσης του vault, επισκεφτείτε # Health Check +health.title=Έλεγχος Υγείας Vault +health.start.introduction=Ο Έλεγχος Υγείας του Vault είναι μια σειρά από ελέγχους για ανίχνευση και επιδιόρθωση των προβλημάτων στην εσωτερική δομή του Vault σας. Παρακαλώ σημειώστε, ότι δεν μπορούν να διορθωθούν όλα τα προβλήματα. Χρειάζεστε τον κωδικό πρόσβασης Vault για να εκτελέσετε τους ελέγχους. +health.start.configValid=Η ανάγνωση και η ανάλυση του αρχείου ρυθμίσεων του Vault ήταν επιτυχής. Συνεχίστε για να επιλέξετε ελέγχους. +health.start.configInvalid=Σφάλμα κατά την ανάγνωση και ανάλυση του αρχείου ρυθμίσεων του Vault. +health.checkList.header=Διαθέσιμοι Έλεγχοι Υγείας +health.checkList.selectAllBox=Επιλογή όλων +health.check.runBatchBtn=Εκτέλεση επιλεγμένων ελέγχων ## Detail view +health.check.detail.noSelectedCheck=Για τα αποτελέσματα επιλέξτε έναν ολοκληρωμένο έλεγχο υγείας στην αριστερή λίστα. +health.check.detail.header=Αποτελέσματα από %s +health.check.detail.taskNotStarted=Ο έλεγχος δεν επιλέχθηκε για εκτέλεση. +health.check.detail.taskScheduled=Ο έλεγχος έχει προγραμματιστεί. +health.check.detail.taskRunning=Ο έλεγχος εκτελείται αυτήν τη στιγμή… +health.check.detail.taskSucceeded=Ο έλεγχος ολοκληρώθηκε επιτυχώς μετά από %d χιλιοστά του δευτερολέπτου. +health.check.detail.taskFailed=Ο έλεγχος τερματίστηκε λόγω σφάλματος. +health.check.detail.taskCancelled=Ο έλεγχος ακυρώθηκε. +health.check.detail.problemCount=Βρέθηκαν %d προβλήματα και %d μη επιδιορθώσιμα σφάλματα. +health.check.exportBtn=Εξαγωγή Αναφοράς +health.check.fixBtn=Επιδιόρθωση ## Checks +health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Έλεγχος Φακέλου # Preferences preferences.title=Προτιμήσεις @@ -290,6 +309,7 @@ vaultOptions.general.actionAfterUnlock=Μετά το επιτυχές ξεκλε vaultOptions.general.actionAfterUnlock.ignore=Να μην γίνει τίποτα vaultOptions.general.actionAfterUnlock.reveal=Αποκάλυψη Εικονικού Δίσκου vaultOptions.general.actionAfterUnlock.ask=Ρώτα +vaultOptions.general.healthBtn=Έναρξη ελέγχου Υγείας Vault ## Mount vaultOptions.mount=Προσάρτηση vaultOptions.mount.readonly=Μόνο για ανάγνωση @@ -309,6 +329,9 @@ vaultOptions.masterkey.recoveryKeyExpanation=Το κλειδί ασφαλεία vaultOptions.masterkey.showRecoveryKeyBtn=Προβολή κλειδιού ανάκτησης vaultOptions.masterkey.recoverPasswordBtn=Ανάκτηση κωδικού ## Auto Lock +vaultOptions.autoLock=Αυτόματο Κλείδωμα +vaultOptions.autoLock.lockAfterTimePart1=Κλείδωμα όταν παραμένει σε αδράνεια για +vaultOptions.autoLock.lockAfterTimePart2=λεπτά # Recovery Key recoveryKey.title=Κλειδί Ανάκτησης diff --git a/src/main/resources/i18n/strings_fr.properties b/src/main/resources/i18n/strings_fr.properties index 115925de7..50a670823 100644 --- a/src/main/resources/i18n/strings_fr.properties +++ b/src/main/resources/i18n/strings_fr.properties @@ -45,13 +45,13 @@ addvaultwizard.new.directoryPickerLabel=Emplacement personnalisé addvaultwizard.new.directoryPickerButton=Choisir... addvaultwizard.new.directoryPickerTitle=Choisissez le répertoire addvaultwizard.new.fileAlreadyExists=Un fichier ou un répertoire avec ce nom existe déjà -addvaultwizard.new.locationDoesNotExist=Un répertoire dans le chemin spécifié n'existe pas ou ne peut pas être accédé +addvaultwizard.new.locationDoesNotExist=Un répertoire dans le chemin spécifié n'existe pas ou n'est pas accessible addvaultwizard.new.locationIsNotWritable=Pas d'accès en écriture au chemin spécifié addvaultwizard.new.locationIsOk=Lieu approprié pour votre coffre addvaultwizard.new.invalidName=Nom de coffre invalide. Préférez un nom de répertoire habituel. ### Password addvaultwizard.new.createVaultBtn=Créer un coffre -addvaultwizard.new.generateRecoveryKeyChoice=Sans votre mot de passe, il sera d'impossible d'accéder à vos données. Souhaitez-vous créer une clé de secours en cas d'oubli du mot passe ? +addvaultwizard.new.generateRecoveryKeyChoice=Il sera impossible d’accéder à vos données sans mot de passe. Souhaitez-vous créer une clé de secours en cas d'oubli du mot passe ? addvaultwizard.new.generateRecoveryKeyChoice.yes=Oui, mieux vaut prévenir que guérir addvaultwizard.new.generateRecoveryKeyChoice.no=Non merci, je n'oublierai pas mon mot de passe ### Information @@ -59,25 +59,25 @@ addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf addvault.new.readme.storageLocation.1=Fichiers de coffre-fort addvault.new.readme.storageLocation.2=Ceci est le chemin de votre coffre-fort. addvault.new.readme.storageLocation.3=NE PAS -addvault.new.readme.storageLocation.4=Modifier n'importe quel fichiers dans ce répertoire ou -addvault.new.readme.storageLocation.5=Collez n'importe quel fichiers à crypter dans ce répertoire. +addvault.new.readme.storageLocation.4=Modifier n'importe quel fichier dans ce répertoire ou +addvault.new.readme.storageLocation.5=Collez n'importe quel fichier à crypter dans ce répertoire. addvault.new.readme.storageLocation.6=Si vous voulez chiffrer les fichiers et afficher le contenu du coffre, faites ce qui suit : addvault.new.readme.storageLocation.7=1. Ajouter ce coffre à Cryptomator. -addvault.new.readme.storageLocation.8=2. Déverrouillez le coffre-fort dans Cryptomateur. +addvault.new.readme.storageLocation.8=2. Déverrouillez le coffre-fort dans Cryptomator. addvault.new.readme.storageLocation.9=3. Ouvrez l'emplacement d'accès en cliquant sur le bouton "Révéler ". addvault.new.readme.storageLocation.10=Si vous avez besoin d'aide, consultez la documentation : %s addvault.new.readme.accessLocation.fileName=BIENVENUE.rtf addvault.new.readme.accessLocation.1=🔐 VOLUME CHIFFRÉ 🔐 addvault.new.readme.accessLocation.2=Ceci est le chemin d'accès de votre coffre-fort. -addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront cryptés par Cryptomateur. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue décryptée de son contenu, vos fichiers restent cryptés dans votre disque dur à tout le temps. +addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront cryptés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur à tout le temps. addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier. ## Existing -addvaultwizard.existing.instruction=Selectionner le fichier "masterkey.cryptomator" de votre coffre existant. +addvaultwizard.existing.instruction=Sélectionner le fichier "masterkey.cryptomator" de votre coffre existant. addvaultwizard.existing.chooseBtn=Choisir... addvaultwizard.existing.filePickerTitle=Sélectionner le fichier clef ## Success -addvaultwizard.success.nextStepsInstructions=Coffre “%s” ajouté.\nIl faudra déverrouiller ce coffre afin d’y accéder ou d’y ajouter du contenu. Cette action n’a pas à être effectuée immédiatement. -addvaultwizard.success.unlockNow=Déverouiller +addvaultwizard.success.nextStepsInstructions=Coffre “%s” ajouté.\nIl faudra déverrouiller ce coffre afin d’y accéder ou d’y ajouter du contenu. Cette action peut être réalisée ultérieurement. +addvaultwizard.success.unlockNow=Déverrouiller # Remove Vault removeVault.title=Supprimer le coffre @@ -90,7 +90,7 @@ changepassword.enterOldPassword=Entrez le mot de passe actuel pour "%s" changepassword.finalConfirmation=Je comprends que je ne pourrai pas récupérer mes données si j'oublie mon mot de passe # Forget Password -forgetPassword.title=Oublier le mot de passe +forgetPassword.title=Mot de passe oublié forgetPassword.information=Ceci supprimera le mot de passe enregistré pour ce coffre de votre chaîne de clés système. forgetPassword.confirmBtn=Oublier le mot de passe @@ -125,14 +125,14 @@ lock.fail.message=Le coffre-fort "%s" n'a pas pu être verrouillé. Assurez-vous migration.title=Mettre à jour le coffre ## Start migration.start.prompt=Le coffre “%s” doit être mis à jour. Assurez-vous qu’aucune synchronisation n’est en cours sur ce coffre avant de continuer. -migration.start.confirm=Ce coffre est bien synchronisé +migration.start.confirm=Oui, mon coffre est bien synchronisé ## Run migration.run.enterPassword=Entrez le mot de passe pour %s migration.run.startMigrationBtn=Migrer le coffre migration.run.progressHint=Ceci peut prendre un certain temps… ## Sucess migration.success.nextStepsInstructions=“%s” migré.\nVous pouvez à présent déverrouiller ce coffre. -migration.success.unlockNow=Déverouiller +migration.success.unlockNow=Déverrouiller ## Missing file system capabilities migration.error.missingFileSystemCapabilities.title=Système de fichiers non pris en charge migration.error.missingFileSystemCapabilities.description=La migration n'a pas débuté car votre coffre se trouve dans un système de fichiers inapproprié. @@ -199,7 +199,7 @@ preferences.volume.webdav.scheme=Schéma WebDAV ## Updates preferences.updates=Mises à jour preferences.updates.currentVersion=Version actuelle : “%s” -preferences.updates.autoUpdateCheck=Vérifier automatiquement l’existence de mise à jour +preferences.updates.autoUpdateCheck=Vérifier automatiquement si des formations sont disponibles preferences.updates.checkNowBtn=Vérifier maintenant preferences.updates.updateAvailable=Mise à jour “%s” disponible. ## Contribution From 2e1f33ca82c09d8a05ded91409799be9f9f74444 Mon Sep 17 00:00:00 2001 From: Ralph Plawetzki Date: Sun, 6 Jun 2021 21:56:28 +0200 Subject: [PATCH 005/208] Fix instructions for building (#1682) --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 18ddc3342..ad821780e 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,6 @@ For more information on the security details visit [cryptomator.org](https://doc ### Run Maven ``` -cd main mvn clean install # or mvn clean install -Pwindows # or mvn clean install -Pmac From 48ad74715e99b2b1288ff193f84c51954d582533 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 7 Jun 2021 15:17:58 +0200 Subject: [PATCH 006/208] * store class name of selected keychain in settings.json * prepared GeneralPreferencesController to use a provider-supplied display name --- .../common/keychain/KeychainModule.java | 4 +- .../common/settings/KeychainBackend.java | 19 ------ .../cryptomator/common/settings/Settings.java | 9 +-- .../common/settings/SettingsJsonAdapter.java | 13 +--- .../GeneralPreferencesController.java | 65 ++++++++++++------- src/main/resources/i18n/strings.properties | 4 -- 6 files changed, 52 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/org/cryptomator/common/settings/KeychainBackend.java diff --git a/src/main/java/org/cryptomator/common/keychain/KeychainModule.java b/src/main/java/org/cryptomator/common/keychain/KeychainModule.java index 9ac343d36..01a221ed7 100644 --- a/src/main/java/org/cryptomator/common/keychain/KeychainModule.java +++ b/src/main/java/org/cryptomator/common/keychain/KeychainModule.java @@ -34,11 +34,11 @@ public class KeychainModule { @Singleton static ObjectExpression provideKeychainAccessProvider(Settings settings, Set providers) { return Bindings.createObjectBinding(() -> { - var selectedProviderClass = settings.keychainBackend().get().getProviderClass(); + var selectedProviderClass = settings.keychainProvider().get(); var selectedProvider = providers.stream().filter(provider -> provider.getClass().getName().equals(selectedProviderClass)).findAny(); var fallbackProvider = providers.stream().findAny().orElse(null); return selectedProvider.orElse(fallbackProvider); - }, settings.keychainBackend()); + }, settings.keychainProvider()); } } diff --git a/src/main/java/org/cryptomator/common/settings/KeychainBackend.java b/src/main/java/org/cryptomator/common/settings/KeychainBackend.java deleted file mode 100644 index 65f869a12..000000000 --- a/src/main/java/org/cryptomator/common/settings/KeychainBackend.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.cryptomator.common.settings; - -public enum KeychainBackend { - GNOME("org.cryptomator.linux.keychain.SecretServiceKeychainAccess"), - KDE("org.cryptomator.linux.keychain.KDEWalletKeychainAccess"), - MAC_SYSTEM_KEYCHAIN("org.cryptomator.macos.keychain.MacSystemKeychainAccess"), - WIN_SYSTEM_KEYCHAIN("org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess"); - - private final String providerClass; - - KeychainBackend(String providerClass) { - this.providerClass = providerClass; - } - - public String getProviderClass() { - return providerClass; - } - -} diff --git a/src/main/java/org/cryptomator/common/settings/Settings.java b/src/main/java/org/cryptomator/common/settings/Settings.java index a419d206a..ee654db49 100644 --- a/src/main/java/org/cryptomator/common/settings/Settings.java +++ b/src/main/java/org/cryptomator/common/settings/Settings.java @@ -38,7 +38,8 @@ public class Settings { public static final boolean DEFAULT_DEBUG_MODE = false; public static final VolumeImpl DEFAULT_PREFERRED_VOLUME_IMPL = SystemUtils.IS_OS_WINDOWS ? VolumeImpl.DOKANY : VolumeImpl.FUSE; public static final UiTheme DEFAULT_THEME = UiTheme.LIGHT; - public static final KeychainBackend DEFAULT_KEYCHAIN_BACKEND = SystemUtils.IS_OS_WINDOWS ? KeychainBackend.WIN_SYSTEM_KEYCHAIN : SystemUtils.IS_OS_MAC ? KeychainBackend.MAC_SYSTEM_KEYCHAIN : KeychainBackend.GNOME; + @Deprecated // to be changed to "whatever is available" eventually + public static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : "org.cryptomator.linux.keychain.SecretServiceKeychainAccess"; public static final NodeOrientation DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT; public static final String DEFAULT_LICENSE_KEY = ""; public static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false; @@ -53,7 +54,7 @@ public class Settings { private final BooleanProperty debugMode = new SimpleBooleanProperty(DEFAULT_DEBUG_MODE); private final ObjectProperty preferredVolumeImpl = new SimpleObjectProperty<>(DEFAULT_PREFERRED_VOLUME_IMPL); private final ObjectProperty theme = new SimpleObjectProperty<>(DEFAULT_THEME); - private final ObjectProperty keychainBackend = new SimpleObjectProperty<>(DEFAULT_KEYCHAIN_BACKEND); + private final ObjectProperty keychainProvider = new SimpleObjectProperty<>(DEFAULT_KEYCHAIN_PROVIDER); private final ObjectProperty userInterfaceOrientation = new SimpleObjectProperty<>(DEFAULT_USER_INTERFACE_ORIENTATION); private final StringProperty licenseKey = new SimpleStringProperty(DEFAULT_LICENSE_KEY); private final BooleanProperty showMinimizeButton = new SimpleBooleanProperty(DEFAULT_SHOW_MINIMIZE_BUTTON); @@ -77,7 +78,7 @@ public class Settings { debugMode.addListener(this::somethingChanged); preferredVolumeImpl.addListener(this::somethingChanged); theme.addListener(this::somethingChanged); - keychainBackend.addListener(this::somethingChanged); + keychainProvider.addListener(this::somethingChanged); userInterfaceOrientation.addListener(this::somethingChanged); licenseKey.addListener(this::somethingChanged); showMinimizeButton.addListener(this::somethingChanged); @@ -140,7 +141,7 @@ public class Settings { return theme; } - public ObjectProperty keychainBackend() { return keychainBackend; } + public ObjectProperty keychainProvider() { return keychainProvider; } public ObjectProperty userInterfaceOrientation() { return userInterfaceOrientation; diff --git a/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java b/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java index d22e0867f..5bcb5f3d7 100644 --- a/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java +++ b/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java @@ -48,7 +48,7 @@ public class SettingsJsonAdapter extends TypeAdapter { out.name("preferredVolumeImpl").value(value.preferredVolumeImpl().get().name()); out.name("theme").value(value.theme().get().name()); out.name("uiOrientation").value(value.userInterfaceOrientation().get().name()); - out.name("keychainBackend").value(value.keychainBackend().get().name()); + out.name("keychainProvider").value(value.keychainProvider().get()); out.name("licenseKey").value(value.licenseKey().get()); out.name("showMinimizeButton").value(value.showMinimizeButton().get()); out.name("showTrayIcon").value(value.showTrayIcon().get()); @@ -82,7 +82,7 @@ public class SettingsJsonAdapter extends TypeAdapter { case "preferredVolumeImpl" -> settings.preferredVolumeImpl().set(parsePreferredVolumeImplName(in.nextString())); case "theme" -> settings.theme().set(parseUiTheme(in.nextString())); case "uiOrientation" -> settings.userInterfaceOrientation().set(parseUiOrientation(in.nextString())); - case "keychainBackend" -> settings.keychainBackend().set(parseKeychainBackend(in.nextString())); + case "keychainProvider" -> settings.keychainProvider().set(in.nextString()); case "licenseKey" -> settings.licenseKey().set(in.nextString()); case "showMinimizeButton" -> settings.showMinimizeButton().set(in.nextBoolean()); case "showTrayIcon" -> settings.showTrayIcon().set(in.nextBoolean()); @@ -124,15 +124,6 @@ public class SettingsJsonAdapter extends TypeAdapter { } } - private KeychainBackend parseKeychainBackend(String backendName) { - try { - return KeychainBackend.valueOf(backendName.toUpperCase()); - } catch (IllegalArgumentException e) { - LOG.warn("Invalid keychain backend {}. Defaulting to {}.", backendName, Settings.DEFAULT_KEYCHAIN_BACKEND); - return Settings.DEFAULT_KEYCHAIN_BACKEND; - } - } - private NodeOrientation parseUiOrientation(String uiOrientationName) { try { return NodeOrientation.valueOf(uiOrientationName.toUpperCase()); diff --git a/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java index 64d71a8b7..1dc7bb35c 100644 --- a/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java @@ -2,7 +2,6 @@ package org.cryptomator.ui.preferences; import org.cryptomator.common.Environment; import org.cryptomator.common.LicenseHolder; -import org.cryptomator.common.settings.KeychainBackend; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.UiTheme; import org.cryptomator.integrations.autostart.AutoStartProvider; @@ -16,6 +15,7 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javafx.application.Application; +import javafx.beans.binding.Bindings; import javafx.beans.property.ObjectProperty; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; @@ -27,11 +27,9 @@ import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; import javafx.stage.Stage; import javafx.util.StringConverter; -import java.util.Arrays; import java.util.Optional; import java.util.ResourceBundle; import java.util.Set; -import java.util.stream.Collectors; @PreferencesScoped public class GeneralPreferencesController implements FxController { @@ -51,7 +49,7 @@ public class GeneralPreferencesController implements FxController { private final Set keychainAccessProviders; private final ErrorComponent.Builder errorComponent; public ChoiceBox themeChoiceBox; - public ChoiceBox keychainBackendChoiceBox; + public ChoiceBox keychainBackendChoiceBox; public CheckBox showMinimizeButtonCheckbox; public CheckBox showTrayIconCheckbox; public CheckBox startHiddenCheckbox; @@ -101,15 +99,13 @@ public class GeneralPreferencesController implements FxController { nodeOrientationRtl.setSelected(settings.userInterfaceOrientation().get() == NodeOrientation.RIGHT_TO_LEFT); nodeOrientation.selectedToggleProperty().addListener(this::toggleNodeOrientation); - keychainBackendChoiceBox.getItems().addAll(getAvailableBackends()); - keychainBackendChoiceBox.setConverter(new KeychainBackendConverter(resourceBundle)); - keychainBackendChoiceBox.valueProperty().bindBidirectional(settings.keychainBackend()); + var keychainSettingsConverter = new KeychainProviderClassNameConverter(keychainAccessProviders); + keychainBackendChoiceBox.getItems().addAll(keychainAccessProviders); + keychainBackendChoiceBox.setValue(keychainSettingsConverter.fromString(settings.keychainProvider().get())); + keychainBackendChoiceBox.setConverter(new KeychainProviderDisplayNameConverter()); + Bindings.bindBidirectional(settings.keychainProvider(), keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter); } - private KeychainBackend[] getAvailableBackends() { - var namesOfAvailableProviders = keychainAccessProviders.stream().map(KeychainAccessProvider::getClass).map(Class::getName).collect(Collectors.toUnmodifiableSet()); - return Arrays.stream(KeychainBackend.values()).filter(value -> namesOfAvailableProviders.contains(value.getProviderClass())).toArray(KeychainBackend[]::new); - } public boolean isTrayMenuInitialized() { return trayMenuInitialized; @@ -188,23 +184,48 @@ public class GeneralPreferencesController implements FxController { } - private static class KeychainBackendConverter extends StringConverter { + private class KeychainProviderDisplayNameConverter extends StringConverter { - private final ResourceBundle resourceBundle; - - KeychainBackendConverter(ResourceBundle resourceBundle) { - this.resourceBundle = resourceBundle; + @Override + public String toString(KeychainAccessProvider provider) { + if (provider == null) { + return null; + } else { + return provider.getClass().getSimpleName(); // TODO: change to provider.getDisplayName(); + } } @Override - public String toString(KeychainBackend impl) { - return resourceBundle.getString("preferences.general.keychainBackend." + impl.getProviderClass()); - } - - @Override - public KeychainBackend fromString(String string) { + public KeychainAccessProvider fromString(String string) { throw new UnsupportedOperationException(); } } + + private static class KeychainProviderClassNameConverter extends StringConverter { + + private final Set keychainAccessProviders; + + public KeychainProviderClassNameConverter(Set keychainAccessProviders) { + this.keychainAccessProviders = keychainAccessProviders; + } + + @Override + public String toString(KeychainAccessProvider provider) { + if (provider == null) { + return null; + } else { + return provider.getClass().getName(); + } + } + + @Override + public KeychainAccessProvider fromString(String string) { + if (string == null) { + return null; + } else { + return keychainAccessProviders.stream().filter(provider -> provider.getClass().getName().equals(string)).findAny().orElseThrow(); + } + } + } } diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index 8ffc15c4c..f0f550769 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -185,10 +185,6 @@ preferences.general.debugLogging=Enable debug logging preferences.general.debugDirectory=Reveal log files preferences.general.autoStart=Launch Cryptomator on system start preferences.general.keychainBackend=Store passwords with -preferences.general.keychainBackend.org.cryptomator.linux.keychain.SecretServiceKeychainAccess=Gnome Keyring -preferences.general.keychainBackend.org.cryptomator.linux.keychain.KDEWalletKeychainAccess=KDE Wallet -preferences.general.keychainBackend.org.cryptomator.macos.keychain.MacSystemKeychainAccess=macOS Keychain Access -preferences.general.keychainBackend.org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess=Windows Data Protection preferences.general.interfaceOrientation=Interface Orientation preferences.general.interfaceOrientation.ltr=Left to Right preferences.general.interfaceOrientation.rtl=Right to Left From 72e2f64a68e3e6c9199aa422bd5ac68c471f7fe6 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 7 Jun 2021 16:24:42 +0200 Subject: [PATCH 007/208] show provided display name --- pom.xml | 2 +- .../ui/preferences/GeneralPreferencesController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c53ca818b..a052540bc 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ 2.1.0-beta5 - 1.0.0-beta2 + 1.0.0-rc1 1.0.0-beta2 1.0.0-beta2 1.0.0-beta1 diff --git a/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java index 1dc7bb35c..9b22b2c97 100644 --- a/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java @@ -191,7 +191,7 @@ public class GeneralPreferencesController implements FxController { if (provider == null) { return null; } else { - return provider.getClass().getSimpleName(); // TODO: change to provider.getDisplayName(); + return provider.displayName(); } } From f9545b553212a9a7fc7af8d756f2a9094c746b6a Mon Sep 17 00:00:00 2001 From: JaniruTEC Date: Tue, 25 May 2021 18:00:03 +0200 Subject: [PATCH 008/208] Refactored MPC priority --- .../common/mountpoint/MountPointChooser.java | 8 +++---- .../mountpoint/MountPointChooserModule.java | 22 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/cryptomator/common/mountpoint/MountPointChooser.java b/src/main/java/org/cryptomator/common/mountpoint/MountPointChooser.java index 3a4d82cf3..1e36ba5f6 100644 --- a/src/main/java/org/cryptomator/common/mountpoint/MountPointChooser.java +++ b/src/main/java/org/cryptomator/common/mountpoint/MountPointChooser.java @@ -1,6 +1,6 @@ package org.cryptomator.common.mountpoint; -import com.google.common.base.Preconditions; +import dagger.multibindings.IntKey; import org.cryptomator.common.vaults.Volume; import java.nio.file.Path; @@ -12,13 +12,13 @@ import java.util.SortedSet; * preparation of a mountpoint or an exception otherwise.
*

All MountPointChoosers (MPCs) need to implement this class and must be added to * the pool of possible MPCs by the {@link MountPointChooserModule MountPointChooserModule.} - * The MountPointChooserModule will sort them according to their {@link #getPriority() priority.} + * The MountPointChooserModule will sort them according to their {@link IntKey IntKey priority.} * The priority must be defined by the developer to reflect a useful execution order.
* A specific priority must not be assigned to more than one MPC at a time; * the result of having two MPCs with equal priority is undefined. * - *

MPCs are executed by a {@link Volume} in ascending order of their priority - * (smaller priorities are tried first) to find and prepare a suitable mountpoint for the volume. + *

MPCs are executed by a {@link Volume} in descending order of their priority + * (higher priorities are tried first) to find and prepare a suitable mountpoint for the volume. * The volume has access to a {@link SortedSet} of MPCs in this specific order, * that is provided by the Module. The Set contains all available Choosers, even if they * are not {@link #isApplicable(Volume) applicable} for the Vault/Volume. The Volume must diff --git a/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java b/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java index cfb7b68ec..9c7893e42 100644 --- a/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java +++ b/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java @@ -9,6 +9,7 @@ import dagger.multibindings.IntoMap; import org.cryptomator.common.vaults.PerVault; import javax.inject.Named; +import java.util.Comparator; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; @@ -24,16 +25,22 @@ public abstract class MountPointChooserModule { @Binds @IntoMap - @IntKey(0) + @IntKey(1000) @PerVault public abstract MountPointChooser bindCustomMountPointChooser(CustomMountPointChooser chooser); @Binds @IntoMap - @IntKey(100) + @IntKey(900) @PerVault public abstract MountPointChooser bindCustomDriveLetterChooser(CustomDriveLetterChooser chooser); + @Binds + @IntoMap + @IntKey(800) + @PerVault + public abstract MountPointChooser bindAvailableDriveLetterChooser(AvailableDriveLetterChooser chooser); + @Binds @IntoMap @IntKey(101) @@ -42,13 +49,7 @@ public abstract class MountPointChooserModule { @Binds @IntoMap - @IntKey(200) - @PerVault - public abstract MountPointChooser bindAvailableDriveLetterChooser(AvailableDriveLetterChooser chooser); - - @Binds - @IntoMap - @IntKey(999) + @IntKey(100) @PerVault public abstract MountPointChooser bindTemporaryMountPointChooser(TemporaryMountPointChooser chooser); @@ -56,7 +57,8 @@ public abstract class MountPointChooserModule { @PerVault @Named("orderedMountPointChoosers") public static Iterable provideOrderedMountPointChoosers(Map choosers) { - SortedMap sortedChoosers = new TreeMap<>(choosers); + SortedMap sortedChoosers = new TreeMap<>(Comparator.reverseOrder()); + sortedChoosers.putAll(choosers); return Iterables.unmodifiableIterable(sortedChoosers.values()); } } From f10d2b713bbd58b4849d9f73d36f9f898923389a Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 9 Jun 2021 10:14:08 +0200 Subject: [PATCH 009/208] made tests public to avoid reflection and "open modules" see also https://issues.apache.org/jira/browse/SUREFIRE-1909 --- src/main/java/org/cryptomator/common/Environment.java | 4 ++-- src/test/java/org/cryptomator/common/EnvironmentTest.java | 6 +++--- .../java/org/cryptomator/common/LicenseCheckerTest.java | 2 +- .../cryptomator/ui/controls/SecurePasswordFieldTest.java | 6 +++--- .../org/cryptomator/ui/recoverykey/AutoCompleterTest.java | 4 ++-- .../cryptomator/ui/recoverykey/RecoveryKeyFactoryTest.java | 2 +- .../org/cryptomator/ui/recoverykey/WordEncoderTest.java | 6 +++--- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/cryptomator/common/Environment.java b/src/main/java/org/cryptomator/common/Environment.java index 0fa12ee20..e27ae9bde 100644 --- a/src/main/java/org/cryptomator/common/Environment.java +++ b/src/main/java/org/cryptomator/common/Environment.java @@ -99,12 +99,12 @@ public class Environment { } // visible for testing - Path getHomeDir() { + public Path getHomeDir() { return getPath("user.home").orElseThrow(); } // visible for testing - Stream getPaths(String propertyName) { + public Stream getPaths(String propertyName) { Stream rawSettingsPaths = getRawList(propertyName, PATH_LIST_SEP); return rawSettingsPaths.filter(Predicate.not(Strings::isNullOrEmpty)).map(Paths::get).map(this::replaceHomeDir); } diff --git a/src/test/java/org/cryptomator/common/EnvironmentTest.java b/src/test/java/org/cryptomator/common/EnvironmentTest.java index b68d4a631..5bd2e5bcb 100644 --- a/src/test/java/org/cryptomator/common/EnvironmentTest.java +++ b/src/test/java/org/cryptomator/common/EnvironmentTest.java @@ -17,12 +17,12 @@ import java.util.Optional; import java.util.stream.Collectors; @DisplayName("Environment Variables Test") -class EnvironmentTest { +public class EnvironmentTest { private Environment env; @BeforeEach - void init() { + public void init() { env = Mockito.spy(new Environment()); Mockito.when(env.getHomeDir()).thenReturn(Path.of("/home/testuser")); } @@ -82,7 +82,7 @@ class EnvironmentTest { @Nested @DisplayName("Path Lists") - class SettingsPath { + public class SettingsPath { @Test @DisplayName("test.path.property=") diff --git a/src/test/java/org/cryptomator/common/LicenseCheckerTest.java b/src/test/java/org/cryptomator/common/LicenseCheckerTest.java index 066126ccf..02d6a6d29 100644 --- a/src/test/java/org/cryptomator/common/LicenseCheckerTest.java +++ b/src/test/java/org/cryptomator/common/LicenseCheckerTest.java @@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test; import java.util.Optional; -class LicenseCheckerTest { +public class LicenseCheckerTest { private static final String PUBLIC_KEY = """ MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBgc4HZz+/fBbC7lmEww0AO3NK9wVZ\ diff --git a/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java b/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java index cc5223c6a..0956967e6 100644 --- a/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java +++ b/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java @@ -12,12 +12,12 @@ import java.awt.GraphicsEnvironment; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -class SecurePasswordFieldTest { +public class SecurePasswordFieldTest { private SecurePasswordField pwField = new SecurePasswordField(); @BeforeAll - static void initJavaFx() throws InterruptedException { + public static void initJavaFx() throws InterruptedException { Assumptions.assumeFalse(GraphicsEnvironment.isHeadless()); final CountDownLatch latch = new CountDownLatch(1); Platform.startup(latch::countDown); @@ -29,7 +29,7 @@ class SecurePasswordFieldTest { @Nested @DisplayName("Content Update Events") - class TextChange { + public class TextChange { @Test @DisplayName("\"ant\".append(\"eater\")") diff --git a/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java b/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java index c0535df8e..e5bbe24c9 100644 --- a/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java +++ b/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java @@ -10,7 +10,7 @@ import org.junit.jupiter.params.provider.ValueSource; import java.util.Optional; import java.util.Set; -class AutoCompleterTest { +public class AutoCompleterTest { @Test @DisplayName("no match in []") @@ -30,7 +30,7 @@ class AutoCompleterTest { @Nested @DisplayName("search in dict: ['tame', 'teach', 'teacher']") - class NarrowedDownDict { + public class NarrowedDownDict { AutoCompleter autoCompleter = new AutoCompleter(Set.of("tame", "teach", "teacher")); diff --git a/src/test/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactoryTest.java b/src/test/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactoryTest.java index 672b7a3b8..0df21f6c0 100644 --- a/src/test/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactoryTest.java +++ b/src/test/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactoryTest.java @@ -13,7 +13,7 @@ import java.io.IOException; import java.nio.file.Path; import java.security.SecureRandom; -class RecoveryKeyFactoryTest { +public class RecoveryKeyFactoryTest { private WordEncoder wordEncoder = new WordEncoder(); private MasterkeyFileAccess masterkeyFileAccess = Mockito.mock(MasterkeyFileAccess.class); diff --git a/src/test/java/org/cryptomator/ui/recoverykey/WordEncoderTest.java b/src/test/java/org/cryptomator/ui/recoverykey/WordEncoderTest.java index 9d09c3d8b..6fbd2132b 100644 --- a/src/test/java/org/cryptomator/ui/recoverykey/WordEncoderTest.java +++ b/src/test/java/org/cryptomator/ui/recoverykey/WordEncoderTest.java @@ -12,7 +12,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -class WordEncoderTest { +public class WordEncoderTest { private static final Random PRNG = new Random(42l); private WordEncoder encoder; @@ -25,13 +25,13 @@ class WordEncoderTest { @DisplayName("decode(encode(input)) == input") @ParameterizedTest(name = "test {index}") @MethodSource("createRandomByteSequences") - void encodeAndDecode(byte[] input) { + public void encodeAndDecode(byte[] input) { String encoded = encoder.encodePadded(input); byte[] decoded = encoder.decode(encoded); Assertions.assertArrayEquals(input, decoded); } - static Stream createRandomByteSequences() { + public static Stream createRandomByteSequences() { return IntStream.range(0, 30).mapToObj(i -> { byte[] randomBytes = new byte[i * 3]; PRNG.nextBytes(randomBytes); From 210050d9d53e2bfc14c51ff5d7864268c4f9341e Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 9 Jun 2021 18:15:39 +0200 Subject: [PATCH 010/208] update cryptofs --- pom.xml | 2 +- .../java/org/cryptomator/ui/health/CheckDetailController.java | 2 +- src/main/java/org/cryptomator/ui/health/ReportWriter.java | 2 +- src/main/java/org/cryptomator/ui/health/ResultFixApplier.java | 2 +- .../org/cryptomator/ui/health/ResultListCellController.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index a052540bc..61bae548b 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 16 - 2.1.0-beta5 + 2.1.0-beta6 1.0.0-rc1 1.0.0-beta2 1.0.0-beta2 diff --git a/src/main/java/org/cryptomator/ui/health/CheckDetailController.java b/src/main/java/org/cryptomator/ui/health/CheckDetailController.java index d579ff709..281e404cc 100644 --- a/src/main/java/org/cryptomator/ui/health/CheckDetailController.java +++ b/src/main/java/org/cryptomator/ui/health/CheckDetailController.java @@ -68,7 +68,7 @@ public class CheckDetailController implements FxController { } private Function, Long> countSeverity(DiagnosticResult.Severity severity) { - return stream -> stream.filter(item -> severity.equals(item.getServerity())).count(); + return stream -> stream.filter(item -> severity.equals(item.getSeverity())).count(); } @FXML diff --git a/src/main/java/org/cryptomator/ui/health/ReportWriter.java b/src/main/java/org/cryptomator/ui/health/ReportWriter.java index fb74cbd51..2bc4c28d9 100644 --- a/src/main/java/org/cryptomator/ui/health/ReportWriter.java +++ b/src/main/java/org/cryptomator/ui/health/ReportWriter.java @@ -72,7 +72,7 @@ public class ReportWriter { case SUCCEEDED -> { writer.write("STATUS: SUCCESS\nRESULTS:\n"); for (var result : task.results()) { - writer.write(REPORT_CHECK_RESULT.formatted(result.getServerity(), result.toString())); + writer.write(REPORT_CHECK_RESULT.formatted(result.getSeverity(), result.toString())); } } case CANCELLED -> writer.write("STATUS: CANCELED\n"); diff --git a/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java b/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java index 9a639e8a0..3c5403ab7 100644 --- a/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java +++ b/src/main/java/org/cryptomator/ui/health/ResultFixApplier.java @@ -33,7 +33,7 @@ class ResultFixApplier { } public void fix(DiagnosticResult result) { - Preconditions.checkArgument(result.getServerity() == DiagnosticResult.Severity.WARN, "Unfixable result"); + Preconditions.checkArgument(result.getSeverity() == DiagnosticResult.Severity.WARN, "Unfixable result"); try (var masterkeyClone = masterkey.clone(); // var cryptor = vaultConfig.getCipherCombo().getCryptorProvider(csprng).withKey(masterkeyClone)) { result.fix(vaultPath, vaultConfig, masterkeyClone, cryptor); diff --git a/src/main/java/org/cryptomator/ui/health/ResultListCellController.java b/src/main/java/org/cryptomator/ui/health/ResultListCellController.java index f2bca059a..4506bc602 100644 --- a/src/main/java/org/cryptomator/ui/health/ResultListCellController.java +++ b/src/main/java/org/cryptomator/ui/health/ResultListCellController.java @@ -37,7 +37,7 @@ public class ResultListCellController implements FxController { actionButton.setVisible(false); //TODO: see comment in case WARN actionButton.setManaged(false); - switch (newVal.getServerity()) { + switch (newVal.getSeverity()) { case INFO -> { iconView.setGlyph(FontAwesome5Icon.INFO_CIRCLE); iconView.getStyleClass().add("glyph-icon-muted"); From 7f4a9c13dc24984ba273941ef5113e8d0ce2846d Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 9 Jun 2021 18:33:08 +0200 Subject: [PATCH 011/208] update easybind --- pom.xml | 4 ++-- src/main/resources/license/THIRD-PARTY.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 61bae548b..f60923d59 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ 16 3.11 3.15.0 - 2.1.0 + 2.2 30.1.1-jre 2.35.1 2.8.6 @@ -221,7 +221,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.0.0-M5 org.codehaus.mojo diff --git a/src/main/resources/license/THIRD-PARTY.txt b/src/main/resources/license/THIRD-PARTY.txt index 4c7ff5c1c..0e1c229df 100644 --- a/src/main/resources/license/THIRD-PARTY.txt +++ b/src/main/resources/license/THIRD-PARTY.txt @@ -85,7 +85,7 @@ Cryptomator uses 47 third-party dependencies under the following licenses: - Checker Qual (org.checkerframework:checker-qual:3.8.0 - https://checkerframework.org) - SLF4J API Module (org.slf4j:slf4j-api:1.7.30 - http://www.slf4j.org) The BSD 2-Clause License: - - EasyBind (com.tobiasdiez:easybind:2.1.0 - https://github.com/tobiasdiez/EasyBind) + - EasyBind (com.tobiasdiez:easybind:2.2 - https://github.com/tobiasdiez/EasyBind) Cryptomator uses other third-party assets under the following licenses: SIL OFL 1.1 License: From 52940d6a19c000330c80b9f5c79eb96ef65638b9 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 9 Jun 2021 18:34:16 +0200 Subject: [PATCH 012/208] add module-info [ci skip] due to split package in jnr-fuse --- pom.xml | 6 ++++ src/main/java/module-info.java | 63 ++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/main/java/module-info.java diff --git a/pom.xml b/pom.xml index f60923d59..15df379fd 100644 --- a/pom.xml +++ b/pom.xml @@ -130,6 +130,12 @@ 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 new file mode 100644 index 000000000..519c6199e --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,63 @@ +import org.cryptomator.integrations.autostart.AutoStartProvider; +import org.cryptomator.integrations.keychain.KeychainAccessProvider; +import org.cryptomator.integrations.tray.TrayIntegrationProvider; +import org.cryptomator.integrations.uiappearance.UiAppearanceProvider; + +module org.cryptomator.desktop { + requires org.cryptomator.cryptofs; + requires org.cryptomator.frontend.dokany; + requires org.cryptomator.frontend.fuse; + requires org.cryptomator.frontend.webdav; + requires org.cryptomator.integrations.api; + requires java.rmi; + requires java.desktop; + requires java.net.http; + requires javafx.base; + requires javafx.graphics; + requires javafx.controls; + requires javafx.fxml; + requires com.tobiasdiez.easybind; + requires com.google.common; + requires com.google.gson; // really? + requires org.slf4j; + requires org.apache.commons.lang3; + + /* TODO: filename-based modules: */ + requires dagger; + requires static javax.inject; /* ugly dagger/guava crap */ + requires static jsr305; /* 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 zxcvbn; + requires logback.classic; + requires logback.core; + + uses AutoStartProvider; + uses KeychainAccessProvider; + uses TrayIntegrationProvider; + uses UiAppearanceProvider; + + opens org.cryptomator.common.settings to com.google.gson; + + opens org.cryptomator.launcher to java.rmi; + + opens org.cryptomator.common to javafx.fxml; + opens org.cryptomator.common.vaults to javafx.fxml; + opens org.cryptomator.ui.addvaultwizard to javafx.fxml; + opens org.cryptomator.ui.changepassword to javafx.fxml; + opens org.cryptomator.ui.common to javafx.fxml; + opens org.cryptomator.ui.controls to javafx.fxml; + opens org.cryptomator.ui.forgetPassword to javafx.fxml; + opens org.cryptomator.ui.fxapp to javafx.fxml; + opens org.cryptomator.ui.keyloading.masterkeyfile to javafx.fxml; + opens org.cryptomator.ui.mainwindow to javafx.fxml; + opens org.cryptomator.ui.migration to javafx.fxml; + opens org.cryptomator.ui.preferences to javafx.fxml; + opens org.cryptomator.ui.quit to javafx.fxml; + opens org.cryptomator.ui.recoverykey to javafx.fxml; + opens org.cryptomator.ui.removevault to javafx.fxml; + opens org.cryptomator.ui.stats to javafx.fxml; + opens org.cryptomator.ui.unlock to javafx.fxml; + opens org.cryptomator.ui.vaultoptions to javafx.fxml; + opens org.cryptomator.ui.wrongfilealert to javafx.fxml; +} \ No newline at end of file From 0e924e74293f594ec7d3efd02e2e12e0fdd60158 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 9 Jun 2021 18:38:44 +0200 Subject: [PATCH 013/208] disable fuse for now --- pom.xml | 10 +++++----- src/main/java/module-info.java | 2 +- .../vaults/{FuseVolume.java => FuseVolume.java.txt} | 0 .../org/cryptomator/common/vaults/VaultModule.java | 6 +++--- .../java/org/cryptomator/common/vaults/Volume.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename src/main/java/org/cryptomator/common/vaults/{FuseVolume.java => FuseVolume.java.txt} (100%) diff --git a/pom.xml b/pom.xml index 15df379fd..899d1b393 100644 --- a/pom.xml +++ b/pom.xml @@ -57,11 +57,11 @@ cryptofs ${cryptomator.cryptofs.version} - - org.cryptomator - fuse-nio-adapter - ${cryptomator.fuse.version} - + + + + + org.cryptomator dokany-nio-adapter diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 519c6199e..5825e5b15 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -6,7 +6,7 @@ import org.cryptomator.integrations.uiappearance.UiAppearanceProvider; module org.cryptomator.desktop { requires org.cryptomator.cryptofs; requires org.cryptomator.frontend.dokany; - requires org.cryptomator.frontend.fuse; + // requires org.cryptomator.frontend.fuse; requires org.cryptomator.frontend.webdav; requires org.cryptomator.integrations.api; requires java.rmi; diff --git a/src/main/java/org/cryptomator/common/vaults/FuseVolume.java b/src/main/java/org/cryptomator/common/vaults/FuseVolume.java.txt similarity index 100% rename from src/main/java/org/cryptomator/common/vaults/FuseVolume.java rename to src/main/java/org/cryptomator/common/vaults/FuseVolume.java.txt diff --git a/src/main/java/org/cryptomator/common/vaults/VaultModule.java b/src/main/java/org/cryptomator/common/vaults/VaultModule.java index 901ee7f42..756fa5aa8 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultModule.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultModule.java @@ -48,12 +48,12 @@ public class VaultModule { } @Provides - public Volume provideVolume(Settings settings, WebDavVolume webDavVolume, FuseVolume fuseVolume, DokanyVolume dokanyVolume) { + public Volume provideVolume(Settings settings, WebDavVolume webDavVolume, DokanyVolume dokanyVolume) { VolumeImpl preferredImpl = settings.preferredVolumeImpl().get(); if (VolumeImpl.DOKANY == preferredImpl && dokanyVolume.isSupported()) { return dokanyVolume; - } else if (VolumeImpl.FUSE == preferredImpl && fuseVolume.isSupported()) { - return fuseVolume; +// } else if (VolumeImpl.FUSE == preferredImpl && fuseVolume.isSupported()) { +// return fuseVolume; } else { if (VolumeImpl.WEBDAV != preferredImpl) { LOG.warn("Using WebDAV, because {} is not supported.", preferredImpl.getDisplayName()); diff --git a/src/main/java/org/cryptomator/common/vaults/Volume.java b/src/main/java/org/cryptomator/common/vaults/Volume.java index f608122bf..f57f913e4 100644 --- a/src/main/java/org/cryptomator/common/vaults/Volume.java +++ b/src/main/java/org/cryptomator/common/vaults/Volume.java @@ -66,7 +66,7 @@ public interface Volume { return Stream.of(VolumeImpl.values()).filter(impl -> switch (impl) { case WEBDAV -> WebDavVolume.isSupportedStatic(); case DOKANY -> DokanyVolume.isSupportedStatic(); - case FUSE -> FuseVolume.isSupportedStatic(); + case FUSE -> false; // FuseVolume.isSupportedStatic(); }).toArray(VolumeImpl[]::new); } From 6f3c90465c53b47e9b68d3f1ba94c1f568dfc41b Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 9 Jun 2021 21:25:00 +0200 Subject: [PATCH 014/208] adjust fxml loading to modular setup --- .../cryptomator/ui/common/FxmlLoaderFactory.java | 15 +++++---------- .../resources/fxml/addvault_new_password.fxml | 2 +- .../resources/fxml/addvault_new_recoverykey.fxml | 2 +- src/main/resources/fxml/addvault_welcome.fxml | 2 +- src/main/resources/fxml/changepassword.fxml | 2 +- src/main/resources/fxml/health_check_list.fxml | 2 +- src/main/resources/fxml/main_window.fxml | 8 ++++---- src/main/resources/fxml/preferences.fxml | 10 +++++----- src/main/resources/fxml/preferences_about.fxml | 2 +- .../fxml/recoverykey_reset_password.fxml | 2 +- src/main/resources/fxml/recoverykey_success.fxml | 2 +- .../resources/fxml/unlock_enter_password.fxml | 10 +++++----- src/main/resources/fxml/vault_detail_welcome.fxml | 2 +- src/main/resources/fxml/vault_options.fxml | 8 ++++---- 14 files changed, 32 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java b/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java index cf8940cc2..9a4f5d012 100644 --- a/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java +++ b/src/main/java/org/cryptomator/ui/common/FxmlLoaderFactory.java @@ -5,7 +5,6 @@ import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import java.io.IOException; -import java.io.InputStream; import java.io.UncheckedIOException; import java.util.Map; import java.util.ResourceBundle; @@ -26,11 +25,9 @@ public class FxmlLoaderFactory { /** * @return A new FXMLLoader instance */ - public FXMLLoader construct() { - FXMLLoader loader = new FXMLLoader(); - loader.setControllerFactory(this::constructController); - loader.setResources(resourceBundle); - return loader; + private FXMLLoader construct(String fxmlResourceName) { + var url = getClass().getResource(fxmlResourceName); + return new FXMLLoader(url, resourceBundle, null, this::constructController); } /** @@ -41,10 +38,8 @@ public class FxmlLoaderFactory { * @throws IOException if an error occurs while loading the FXML file */ public FXMLLoader load(String fxmlResourceName) throws IOException { - FXMLLoader loader = construct(); - try (InputStream in = getClass().getResourceAsStream(fxmlResourceName)) { - loader.load(in); - } + FXMLLoader loader = construct(fxmlResourceName); + loader.load(); return loader; } diff --git a/src/main/resources/fxml/addvault_new_password.fxml b/src/main/resources/fxml/addvault_new_password.fxml index 4b62f9b78..0bb0a3b3f 100644 --- a/src/main/resources/fxml/addvault_new_password.fxml +++ b/src/main/resources/fxml/addvault_new_password.fxml @@ -23,7 +23,7 @@ - + diff --git a/src/main/resources/fxml/addvault_new_recoverykey.fxml b/src/main/resources/fxml/addvault_new_recoverykey.fxml index 956461fe9..b04677bc3 100644 --- a/src/main/resources/fxml/addvault_new_recoverykey.fxml +++ b/src/main/resources/fxml/addvault_new_recoverykey.fxml @@ -18,7 +18,7 @@ - + diff --git a/src/main/resources/fxml/addvault_welcome.fxml b/src/main/resources/fxml/addvault_welcome.fxml index 750a574a2..7d7244973 100644 --- a/src/main/resources/fxml/addvault_welcome.fxml +++ b/src/main/resources/fxml/addvault_welcome.fxml @@ -21,7 +21,7 @@ - + diff --git a/src/main/resources/fxml/changepassword.fxml b/src/main/resources/fxml/changepassword.fxml index 3f077df5d..eaab7b06a 100644 --- a/src/main/resources/fxml/changepassword.fxml +++ b/src/main/resources/fxml/changepassword.fxml @@ -25,7 +25,7 @@ - + diff --git a/src/main/resources/fxml/health_check_list.fxml b/src/main/resources/fxml/health_check_list.fxml index a3a9c2f93..407627891 100644 --- a/src/main/resources/fxml/health_check_list.fxml +++ b/src/main/resources/fxml/health_check_list.fxml @@ -32,7 +32,7 @@ - + diff --git a/src/main/resources/fxml/main_window.fxml b/src/main/resources/fxml/main_window.fxml index b960f3ed1..ff8e65292 100644 --- a/src/main/resources/fxml/main_window.fxml +++ b/src/main/resources/fxml/main_window.fxml @@ -13,11 +13,11 @@ fx:controller="org.cryptomator.ui.mainwindow.MainWindowController" styleClass="main-window"> - + - - + + @@ -33,5 +33,5 @@ - + diff --git a/src/main/resources/fxml/preferences.fxml b/src/main/resources/fxml/preferences.fxml index 643b31176..4eaf3d45c 100644 --- a/src/main/resources/fxml/preferences.fxml +++ b/src/main/resources/fxml/preferences.fxml @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -43,7 +43,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/src/main/resources/fxml/preferences_about.fxml b/src/main/resources/fxml/preferences_about.fxml index 1c2b7119f..287e91da3 100644 --- a/src/main/resources/fxml/preferences_about.fxml +++ b/src/main/resources/fxml/preferences_about.fxml @@ -18,7 +18,7 @@ - + diff --git a/src/main/resources/fxml/recoverykey_reset_password.fxml b/src/main/resources/fxml/recoverykey_reset_password.fxml index 085554965..b43706673 100644 --- a/src/main/resources/fxml/recoverykey_reset_password.fxml +++ b/src/main/resources/fxml/recoverykey_reset_password.fxml @@ -17,7 +17,7 @@ - + diff --git a/src/main/resources/fxml/recoverykey_success.fxml b/src/main/resources/fxml/recoverykey_success.fxml index 0e9cd2bce..8d9dee3ef 100644 --- a/src/main/resources/fxml/recoverykey_success.fxml +++ b/src/main/resources/fxml/recoverykey_success.fxml @@ -17,7 +17,7 @@ - + diff --git a/src/main/resources/fxml/unlock_enter_password.fxml b/src/main/resources/fxml/unlock_enter_password.fxml index 5fb55dd01..48dcf5451 100644 --- a/src/main/resources/fxml/unlock_enter_password.fxml +++ b/src/main/resources/fxml/unlock_enter_password.fxml @@ -26,23 +26,23 @@ - + - + - + - + - + diff --git a/src/main/resources/fxml/vault_detail_welcome.fxml b/src/main/resources/fxml/vault_detail_welcome.fxml index 59b2596d9..b2cbce7fa 100644 --- a/src/main/resources/fxml/vault_detail_welcome.fxml +++ b/src/main/resources/fxml/vault_detail_welcome.fxml @@ -11,7 +11,7 @@ spacing="24"> - + diff --git a/src/main/resources/fxml/vault_options.fxml b/src/main/resources/fxml/vault_options.fxml index 4808209b2..994853b96 100644 --- a/src/main/resources/fxml/vault_options.fxml +++ b/src/main/resources/fxml/vault_options.fxml @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -33,7 +33,7 @@ - + @@ -41,7 +41,7 @@ - + From be6b6e4541626950be5faedab876b0334a435a6a Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 10 Jun 2021 10:35:02 +0200 Subject: [PATCH 015/208] adjusted launcher scripts to use the module path --- src/package/launcher-linux.sh | 4 ++-- src/package/launcher-mac.sh | 4 ++-- src/package/launcher-win.bat | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/package/launcher-linux.sh b/src/package/launcher-linux.sh index 6ceb933b0..4ce8e6670 100644 --- a/src/package/launcher-linux.sh +++ b/src/package/launcher-linux.sh @@ -1,7 +1,7 @@ #!/bin/sh cd $(dirname $0) java \ - -cp "libs/*" \ + -p "libs" \ -Dcryptomator.settingsPath="~/.config/Cryptomator/settings.json" \ -Dcryptomator.ipcPortPath="~/.config/Cryptomator/ipcPort.bin" \ -Dcryptomator.logDir="~/.local/share/Cryptomator/logs" \ @@ -9,4 +9,4 @@ java \ -Djdk.gtk.version=2 \ -Xss2m \ -Xmx512m \ - org.cryptomator.launcher.Cryptomator + -m org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator diff --git a/src/package/launcher-mac.sh b/src/package/launcher-mac.sh index 2c06efab2..100c975b5 100644 --- a/src/package/launcher-mac.sh +++ b/src/package/launcher-mac.sh @@ -1,11 +1,11 @@ #!/bin/sh cd $(dirname $0) java \ - -cp "libs/*" \ + -p "libs" \ -Dcryptomator.settingsPath="~/Library/Application Support/Cryptomator/settings.json" \ -Dcryptomator.ipcPortPath="~/Library/Application Support/Cryptomator/ipcPort.bin" \ -Dcryptomator.logDir="~/Library/Logs/Cryptomator" \ -Dcryptomator.mountPointsDir="/Volumes" \ -Xss20m \ -Xmx512m \ - org.cryptomator.launcher.Cryptomator \ No newline at end of file + -m org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator \ No newline at end of file diff --git a/src/package/launcher-win.bat b/src/package/launcher-win.bat index d385d7e28..b809b3b04 100644 --- a/src/package/launcher-win.bat +++ b/src/package/launcher-win.bat @@ -1,6 +1,6 @@ @echo off java ^ - -cp "libs/*" ^ + -p "libs" ^ -Dcryptomator.settingsPath="~/AppData/Roaming/Cryptomator/settings.json" ^ -Dcryptomator.ipcPortPath="~/AppData/Roaming/Cryptomator/ipcPort.bin" ^ -Dcryptomator.logDir="~/AppData/Roaming/Cryptomator" ^ @@ -8,4 +8,4 @@ java ^ -Dcryptomator.keychainPath="~/AppData/Roaming/Cryptomator/keychain.json" ^ -Xss20m ^ -Xmx512m ^ - org.cryptomator.launcher.Cryptomator \ No newline at end of file + -m org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator \ No newline at end of file From 364d59fdf7ea6678cc9de77f3dd13760cc39b0d9 Mon Sep 17 00:00:00 2001 From: JaniruTEC Date: Fri, 11 Jun 2021 18:27:51 +0200 Subject: [PATCH 016/208] Added ".idea/**/shelf" to .gitignore See: https://github.com/github/gitignore/blob/991e760c1c6d50fdda246e0178b9c58b06770b90/Global/JetBrains.gitignore#L9 --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d0e6b59a3..2bbe9355a 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ 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/**/shelf .idea/dictionaries .idea/compiler.xml .idea/encodings.xml From 0dc401883f5616d59ad1afcb01c67dbc49736463 Mon Sep 17 00:00:00 2001 From: JaniruTEC Date: Sat, 12 Jun 2021 01:35:36 +0200 Subject: [PATCH 017/208] Enabled proofreading Removed dict_* files from .gitignore Added dict_de.xml Added dict_project.xml --- .gitignore | 3 +- .idea/dictionaries/dict_de.xml | 15 +++ .idea/dictionaries/dict_project.xml | 106 +++++++++++++++++++ .idea/inspectionProfiles/Project_Default.xml | 2 +- 4 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 .idea/dictionaries/dict_de.xml create mode 100644 .idea/dictionaries/dict_project.xml diff --git a/.gitignore b/.gitignore index 2bbe9355a..be67207df 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,8 @@ pom.xml.versionsBackup .idea/**/workspace.xml .idea/**/tasks.xml .idea/**/shelf -.idea/dictionaries +.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 @@

- * 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/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..96116db36 100644 --- a/src/main/java/org/cryptomator/ui/stats/VaultStatisticsController.java +++ b/src/main/java/org/cryptomator/ui/stats/VaultStatisticsController.java @@ -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/i18n/strings.properties b/src/main/resources/i18n/strings.properties index f0f550769..692423e8f 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -14,7 +14,7 @@ generic.button.done=Done generic.button.next=Next generic.button.print=Print ## Error -generic.error.title=An unexpected error occured +generic.error.title=An unexpected error occurred generic.error.instruction=This should not have happened. Please report the error text below and include a description of what steps did lead to this error. # Defaults @@ -131,7 +131,7 @@ migration.start.confirm=Yes, my vault is fully synced migration.run.enterPassword=Enter the password for "%s" migration.run.startMigrationBtn=Migrate Vault migration.run.progressHint=This might take some time… -## Sucess +## Success migration.success.nextStepsInstructions=Migrated "%s" successfully.\nYou can now unlock your vault. migration.success.unlockNow=Unlock Now ## Missing file system capabilities @@ -148,7 +148,7 @@ migration.impossible.moreInfo=The vault can still be opened with an older versio # Health Check health.title=Vault Health Check -health.start.introduction=The Vault Health Check is a collection of checks to detect and possilby fix problems in the internal structure of your vault. Please note, that not all problems are fixable. You need the vault password to perform the checks. +health.start.introduction=The Vault Health Check is a collection of checks to detect and possibly fix problems in the internal structure of your vault. Please note, that not all problems are fixable. You need the vault password to perform the checks. health.start.configValid=Reading and parsing vault configuration file was successful. Proceed to select checks. health.start.configInvalid=Error while reading and parsing the vault configuration file. health.checkList.header=Available Health Checks diff --git a/src/test/java/org/cryptomator/common/LicenseCheckerTest.java b/src/test/java/org/cryptomator/common/LicenseCheckerTest.java index 02d6a6d29..2370b2fe2 100644 --- a/src/test/java/org/cryptomator/common/LicenseCheckerTest.java +++ b/src/test/java/org/cryptomator/common/LicenseCheckerTest.java @@ -9,6 +9,7 @@ import java.util.Optional; public class LicenseCheckerTest { + @SuppressWarnings("SpellCheckingInspection") private static final String PUBLIC_KEY = """ MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBgc4HZz+/fBbC7lmEww0AO3NK9wVZ\ PDZ0VEnsaUFLEYpTzb90nITtJUcPUbvOsdZIZ1Q8fnbquAYgxXL5UgHMoywAib47\ @@ -25,6 +26,7 @@ public class LicenseCheckerTest { @Test public void testCheckValidLicense() { + @SuppressWarnings("SpellCheckingInspection") String license = "eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6InhaRGZacHJ5NFA5dlpQWnlHMmZOQlJqLTdMejVvbVZkbTd0SG9DZ1NOZlkifQ.eyJzdWIiOiJjcnlwdG9ib3RAZXhhbXBsZS5jb20iLCJpYXQiOjE1MTYyMzkwMjJ9.AQaBIKQdNCxmRJi2wLOcbagTgi39WhdWwgdpKTYSPicg-aPr_tst_RjmnqMemx3cBe0Blr4nEbj_lAtSKHz_i61fAUyI1xCIAZYbK9Q3ICHIHQl3AiuCpBwFl-k81OB4QDYiKpEc9gLN5dhW_VymJMsgOvyiC0UjC91f2AM7s46byDNj"; Optional decoded = licenseChecker.check(license); @@ -35,6 +37,7 @@ public class LicenseCheckerTest { @Test public void testCheckInvalidLicenseHeader() { + @SuppressWarnings("SpellCheckingInspection") String license = "EyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6InhaRGZacHJ5NFA5dlpQWnlHMmZOQlJqLTdMejVvbVZkbTd0SG9DZ1NOZlkifQ.eyJzdWIiOiJjcnlwdG9ib3RAZXhhbXBsZS5jb20iLCJpYXQiOjE1MTYyMzkwMjJ9.AQaBIKQdNCxmRJi2wLOcbagTgi39WhdWwgdpKTYSPicg-aPr_tst_RjmnqMemx3cBe0Blr4nEbj_lAtSKHz_i61fAUyI1xCIAZYbK9Q3ICHIHQl3AiuCpBwFl-k81OB4QDYiKpEc9gLN5dhW_VymJMsgOvyiC0UjC91f2AM7s46byDNj"; Optional decoded = licenseChecker.check(license); @@ -44,6 +47,7 @@ public class LicenseCheckerTest { @Test public void testCheckInvalidLicensePayload() { + @SuppressWarnings("SpellCheckingInspection") String license = "eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6InhaRGZacHJ5NFA5dlpQWnlHMmZOQlJqLTdMejVvbVZkbTd0SG9DZ1NOZlkifQ.EyJzdWIiOiJjcnlwdG9ib3RAZXhhbXBsZS5jb20iLCJpYXQiOjE1MTYyMzkwMjJ9.AQaBIKQdNCxmRJi2wLOcbagTgi39WhdWwgdpKTYSPicg-aPr_tst_RjmnqMemx3cBe0Blr4nEbj_lAtSKHz_i61fAUyI1xCIAZYbK9Q3ICHIHQl3AiuCpBwFl-k81OB4QDYiKpEc9gLN5dhW_VymJMsgOvyiC0UjC91f2AM7s46byDNj"; Optional decoded = licenseChecker.check(license); @@ -53,6 +57,7 @@ public class LicenseCheckerTest { @Test public void testCheckInvalidLicenseSignature() { + @SuppressWarnings("SpellCheckingInspection") String license = "eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6InhaRGZacHJ5NFA5dlpQWnlHMmZOQlJqLTdMejVvbVZkbTd0SG9DZ1NOZlkifQ.eyJzdWIiOiJjcnlwdG9ib3RAZXhhbXBsZS5jb20iLCJpYXQiOjE1MTYyMzkwMjJ9.aQaBIKQdNCxmRJi2wLOcbagTgi39WhdWwgdpKTYSPicg-aPr_tst_RjmnqMemx3cBe0Blr4nEbj_lAtSKHz_i61fAUyI1xCIAZYbK9Q3ICHIHQl3AiuCpBwFl-k81OB4QDYiKpEc9gLN5dhW_VymJMsgOvyiC0UjC91f2AM7s46byDNj"; Optional decoded = licenseChecker.check(license); diff --git a/src/test/java/org/cryptomator/common/settings/SettingsJsonAdapterTest.java b/src/test/java/org/cryptomator/common/settings/SettingsJsonAdapterTest.java index a03eb1d57..b2ecf4b89 100644 --- a/src/test/java/org/cryptomator/common/settings/SettingsJsonAdapterTest.java +++ b/src/test/java/org/cryptomator/common/settings/SettingsJsonAdapterTest.java @@ -44,6 +44,7 @@ public class SettingsJsonAdapterTest { Assertions.assertEquals(VolumeImpl.FUSE, settings.preferredVolumeImpl().get()); } + @SuppressWarnings("SpellCheckingInspection") @ParameterizedTest(name = "fromJson() should throw IOException for input: {0}") @ValueSource(strings = { // "", // diff --git a/src/test/java/org/cryptomator/common/settings/VaultSettingsJsonAdapterTest.java b/src/test/java/org/cryptomator/common/settings/VaultSettingsJsonAdapterTest.java index a606de948..3d902ba6c 100644 --- a/src/test/java/org/cryptomator/common/settings/VaultSettingsJsonAdapterTest.java +++ b/src/test/java/org/cryptomator/common/settings/VaultSettingsJsonAdapterTest.java @@ -40,6 +40,7 @@ public class VaultSettingsJsonAdapterTest { ); } + @SuppressWarnings("SpellCheckingInspection") @Test public void testSerialize() throws IOException { VaultSettings vaultSettings = new VaultSettings("test"); diff --git a/src/test/java/org/cryptomator/launcher/IpcFactoryTest.java b/src/test/java/org/cryptomator/launcher/IpcFactoryTest.java index aeb9fbeb3..d5e244d0c 100644 --- a/src/test/java/org/cryptomator/launcher/IpcFactoryTest.java +++ b/src/test/java/org/cryptomator/launcher/IpcFactoryTest.java @@ -24,7 +24,7 @@ public class IpcFactoryTest { private IpcProtocolImpl protocolHandler = Mockito.mock(IpcProtocolImpl.class); @Test - @DisplayName("Wihout IPC port files") + @DisplayName("Without IPC port files") public void testNoIpcWithoutPortFile() throws IOException { IpcFactory inTest = new IpcFactory(environment, protocolHandler); diff --git a/src/test/java/org/cryptomator/ui/addvaultwizard/ReadMeGeneratorTest.java b/src/test/java/org/cryptomator/ui/addvaultwizard/ReadMeGeneratorTest.java index 9715c6654..97f02aee1 100644 --- a/src/test/java/org/cryptomator/ui/addvaultwizard/ReadMeGeneratorTest.java +++ b/src/test/java/org/cryptomator/ui/addvaultwizard/ReadMeGeneratorTest.java @@ -11,6 +11,7 @@ import java.util.List; public class ReadMeGeneratorTest { + @SuppressWarnings("SpellCheckingInspection") @ParameterizedTest @CsvSource({ // "test,test", // diff --git a/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java b/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java index 0956967e6..865966049 100644 --- a/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java +++ b/src/test/java/org/cryptomator/ui/controls/SecurePasswordFieldTest.java @@ -49,6 +49,7 @@ public class SecurePasswordFieldTest { Assertions.assertEquals("anteater", pwField.getCharacters().toString()); } + @SuppressWarnings("SpellCheckingInspection") @Test @DisplayName("\"anteater\".insert(3, \"b\")") public void insert2() { @@ -76,6 +77,7 @@ public class SecurePasswordFieldTest { Assertions.assertEquals("ant", pwField.getCharacters().toString()); } + @SuppressWarnings("SpellCheckingInspection") @Test @DisplayName("\"anteater\".replace(0, 3, \"hand\")") public void replace1() { @@ -85,6 +87,7 @@ public class SecurePasswordFieldTest { Assertions.assertEquals("handeater", pwField.getCharacters().toString()); } + @SuppressWarnings("SpellCheckingInspection") @Test @DisplayName("\"anteater\".replace(3, 6, \"keep\")") public void replace2() { @@ -94,6 +97,7 @@ public class SecurePasswordFieldTest { Assertions.assertEquals("antkeeper", pwField.getCharacters().toString()); } + @SuppressWarnings("SpellCheckingInspection") @Test @DisplayName("\"anteater\".replace(0, 3, \"bee\")") public void replace3() { @@ -105,6 +109,7 @@ public class SecurePasswordFieldTest { } + @SuppressWarnings("SpellCheckingInspection") @Test @DisplayName("entering NFC string leads to NFC char[]") public void enterNfcString() { @@ -125,6 +130,7 @@ public class SecurePasswordFieldTest { Assertions.assertEquals('\uDCA9', result.charAt(9)); } + @SuppressWarnings("SpellCheckingInspection") @Test @DisplayName("entering NFD string leads to NFC char[]") public void enterNfdString() { diff --git a/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java b/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java index e5bbe24c9..953507b89 100644 --- a/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java +++ b/src/test/java/org/cryptomator/ui/recoverykey/AutoCompleterTest.java @@ -43,6 +43,7 @@ public class AutoCompleterTest { Assertions.assertEquals("tame", result.get()); } + @SuppressWarnings("SpellCheckingInspection") @ParameterizedTest @DisplayName("find 'teach'") @ValueSource(strings = {"te", "tea", "teac", "teach"}) @@ -52,6 +53,7 @@ public class AutoCompleterTest { Assertions.assertEquals("teach", result.get()); } + @SuppressWarnings("SpellCheckingInspection") @ParameterizedTest @DisplayName("find 'teacher'") @ValueSource(strings = {"teache", "teacher"}) From 000f27e166fc592ca46480bff2244e0c39940046 Mon Sep 17 00:00:00 2001 From: JaniruTEC Date: Sat, 12 Jun 2021 01:56:15 +0200 Subject: [PATCH 019/208] Fixed spelling mistakes that required API breaking changes --- .github/CODE_OF_CONDUCT.md | 2 +- .../cryptomator/common/vaults/VaultStats.java | 18 +++++++++--------- ...=> LaunchAndSizeBasedTriggeringPolicy.java} | 4 ++-- .../org/cryptomator/logging/LoggerModule.java | 2 +- .../cryptomator/ui/common/WeakBindings.java | 2 +- ...hrougputLabel.java => ThroughputLabel.java} | 4 ++-- .../ui/recoverykey/AutoCompleter.java | 10 +++++----- .../ui/stats/VaultStatisticsController.java | 4 ++-- src/main/resources/fxml/stats.fxml | 6 +++--- .../resources/fxml/vault_detail_unlocked.fxml | 6 +++--- 10 files changed, 29 insertions(+), 29 deletions(-) rename src/main/java/org/cryptomator/logging/{LaunchAndSizeBasedTriggerinPolicy.java => LaunchAndSizeBasedTriggeringPolicy.java} (86%) rename src/main/java/org/cryptomator/ui/controls/{ThrougputLabel.java => ThroughputLabel.java} (96%) 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/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/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/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/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/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/stats/VaultStatisticsController.java b/src/main/java/org/cryptomator/ui/stats/VaultStatisticsController.java index 96116db36..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()); 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 @@ From 74355b128a8ea1f0defe630e53efb69717b016b9 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Wed, 16 Jun 2021 13:24:25 +0200 Subject: [PATCH 020/208] Sign tarball in release using GPG --- .github/workflows/build.yml | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3cf0cb845..62990ca23 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,17 @@ jobs: with: name: buildkit-win.zip path: . + - name: Create tarball + run: git archive --prefix="cryptomator-${{ github.ref }}/" -o ${{ github.ref }}.tar.gz ${{ github.ref }} + - name: Prepare GPG-Agent to 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 --dry-run --sign ${{ github.ref }}.tar.gz + env: + GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} + GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} + - name: Sign tarball + run: gpg --batch --quiet --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a ${{ github.ref }}.tar.gz - name: Create Release id: create_release uses: actions/create-release@v1 @@ -127,4 +139,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: ${{ github.ref }}.tar.gz.asc + asset_name: ${{ github.ref }}.tar.gz.asc + asset_content_type: application/octet-stream \ No newline at end of file From b15cda260e35ca7f6a9a0cf4fa94c07ead89439c Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Wed, 16 Jun 2021 12:13:49 +0000 Subject: [PATCH 021/208] Apply suggestions from code review Co-authored-by: Sebastian Stenzel --- .github/workflows/build.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 62990ca23..0539bec21 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -77,15 +77,13 @@ jobs: path: . - name: Create tarball run: git archive --prefix="cryptomator-${{ github.ref }}/" -o ${{ github.ref }}.tar.gz ${{ github.ref }} - - name: Prepare GPG-Agent to sign tarball with key 615D449FE6E6A235 + - 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 --dry-run --sign ${{ github.ref }}.tar.gz + echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a ${{ github.ref }}.tar.gz env: GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} - - name: Sign tarball - run: gpg --batch --quiet --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a ${{ github.ref }}.tar.gz - name: Create Release id: create_release uses: actions/create-release@v1 @@ -148,4 +146,4 @@ jobs: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ${{ github.ref }}.tar.gz.asc asset_name: ${{ github.ref }}.tar.gz.asc - asset_content_type: application/octet-stream \ No newline at end of file + asset_content_type: application/octet-stream From 08cbfd47eaa7f086afd4bd3fa0574e699f07c7a6 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Wed, 16 Jun 2021 14:19:14 +0200 Subject: [PATCH 022/208] Prefix signature of tarball in release with cryptomator To apply convention of the other release assets --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0539bec21..21ef6aca2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -76,11 +76,11 @@ jobs: name: buildkit-win.zip path: . - name: Create tarball - run: git archive --prefix="cryptomator-${{ github.ref }}/" -o ${{ github.ref }}.tar.gz ${{ github.ref }} + 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 ${{ github.ref }}.tar.gz + 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 }} @@ -144,6 +144,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ${{ github.ref }}.tar.gz.asc - asset_name: ${{ github.ref }}.tar.gz.asc + asset_path: "cryptomator-${{ github.ref }}.tar.gz.asc" + asset_name: "cryptomator-${{ github.ref }}.tar.gz.asc" asset_content_type: application/octet-stream From f2fadafa6629f075fad535a1b434b7683a3273f2 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Wed, 16 Jun 2021 16:10:28 +0200 Subject: [PATCH 023/208] Fix snyk.io badge in README due to switch to single maven module --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ad821780e..bcff4c978 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![cryptomator](cryptomator.png)](https://cryptomator.org/) [![Build](https://github.com/cryptomator/cryptomator/workflows/Build/badge.svg)](https://github.com/cryptomator/cryptomator/actions?query=workflow%3ABuild) -[![Known Vulnerabilities](https://snyk.io/test/github/cryptomator/cryptomator/badge.svg?targetFile=main%2Fpom.xml)](https://snyk.io/test/github/cryptomator/cryptomator?targetFile=main%2Fpom.xml) +[![Known Vulnerabilities](https://snyk.io/test/github/cryptomator/cryptomator/badge.svg)](https://snyk.io/test/github/cryptomator/cryptomator) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/2a0adf3cec6a4143b91035d3924178f1)](https://www.codacy.com/gh/cryptomator/cryptomator/dashboard) [![Twitter](https://img.shields.io/badge/twitter-@Cryptomator-blue.svg?style=flat)](http://twitter.com/Cryptomator) [![Crowdin](https://badges.crowdin.net/cryptomator/localized.svg)](https://translate.cryptomator.org/) From 4f3cd2f47cb5424813f5926d6cc99fbb87c1c87f Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 18 Jun 2021 15:16:57 +0200 Subject: [PATCH 024/208] replace JSR-305 Nullable annotation --- src/main/java/module-info.java | 1 - src/main/java/org/cryptomator/common/Nullable.java | 8 ++++++++ .../org/cryptomator/common/settings/VaultSettings.java | 2 +- .../org/cryptomator/common/vaults/VaultComponent.java | 2 +- .../java/org/cryptomator/common/vaults/VaultModule.java | 2 +- .../java/org/cryptomator/ui/common/ErrorComponent.java | 2 +- .../java/org/cryptomator/ui/common/ErrorController.java | 3 ++- 7 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/cryptomator/common/Nullable.java diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 5825e5b15..f0d61b987 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -25,7 +25,6 @@ module org.cryptomator.desktop { /* TODO: filename-based modules: */ requires dagger; requires static javax.inject; /* ugly dagger/guava crap */ - requires static jsr305; /* 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 zxcvbn; diff --git a/src/main/java/org/cryptomator/common/Nullable.java b/src/main/java/org/cryptomator/common/Nullable.java new file mode 100644 index 000000000..cb0d9e887 --- /dev/null +++ b/src/main/java/org/cryptomator/common/Nullable.java @@ -0,0 +1,8 @@ +package org.cryptomator.common; + +/** + * Replacement for JSR-305 to avoid runtime dependencies. Used in Dagger components. + */ +public @interface Nullable { + +} diff --git a/src/main/java/org/cryptomator/common/settings/VaultSettings.java b/src/main/java/org/cryptomator/common/settings/VaultSettings.java index 10a023806..b3d4bb674 100644 --- a/src/main/java/org/cryptomator/common/settings/VaultSettings.java +++ b/src/main/java/org/cryptomator/common/settings/VaultSettings.java @@ -43,7 +43,7 @@ public class VaultSettings { private static final Random RNG = new Random(); private final String id; - private final ObjectProperty path = new SimpleObjectProperty(); + private final ObjectProperty path = new SimpleObjectProperty<>(); private final StringProperty displayName = new SimpleStringProperty(); private final StringProperty winDriveLetter = new SimpleStringProperty(); private final BooleanProperty unlockAfterStartup = new SimpleBooleanProperty(DEFAULT_UNLOCK_AFTER_STARTUP); diff --git a/src/main/java/org/cryptomator/common/vaults/VaultComponent.java b/src/main/java/org/cryptomator/common/vaults/VaultComponent.java index 47be62520..588ff64cd 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultComponent.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultComponent.java @@ -7,10 +7,10 @@ package org.cryptomator.common.vaults; import dagger.BindsInstance; import dagger.Subcomponent; +import org.cryptomator.common.Nullable; import org.cryptomator.common.mountpoint.MountPointChooserModule; import org.cryptomator.common.settings.VaultSettings; -import javax.annotation.Nullable; import javax.inject.Named; @PerVault diff --git a/src/main/java/org/cryptomator/common/vaults/VaultModule.java b/src/main/java/org/cryptomator/common/vaults/VaultModule.java index 756fa5aa8..55ba2e020 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultModule.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultModule.java @@ -8,6 +8,7 @@ package org.cryptomator.common.vaults; import dagger.Module; import dagger.Provides; import org.apache.commons.lang3.SystemUtils; +import org.cryptomator.common.Nullable; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.VaultSettings; import org.cryptomator.common.settings.VolumeImpl; @@ -15,7 +16,6 @@ import org.cryptomator.cryptofs.CryptoFileSystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nullable; import javax.inject.Named; import javafx.beans.binding.Bindings; import javafx.beans.binding.StringBinding; diff --git a/src/main/java/org/cryptomator/ui/common/ErrorComponent.java b/src/main/java/org/cryptomator/ui/common/ErrorComponent.java index 285270b4c..92276f5bd 100644 --- a/src/main/java/org/cryptomator/ui/common/ErrorComponent.java +++ b/src/main/java/org/cryptomator/ui/common/ErrorComponent.java @@ -2,8 +2,8 @@ package org.cryptomator.ui.common; import dagger.BindsInstance; import dagger.Subcomponent; +import org.cryptomator.common.Nullable; -import javax.annotation.Nullable; import javafx.application.Platform; import javafx.scene.Scene; import javafx.stage.Stage; diff --git a/src/main/java/org/cryptomator/ui/common/ErrorController.java b/src/main/java/org/cryptomator/ui/common/ErrorController.java index c7f19a9e6..85b335b15 100644 --- a/src/main/java/org/cryptomator/ui/common/ErrorController.java +++ b/src/main/java/org/cryptomator/ui/common/ErrorController.java @@ -1,6 +1,7 @@ package org.cryptomator.ui.common; -import javax.annotation.Nullable; +import org.cryptomator.common.Nullable; + import javax.inject.Inject; import javax.inject.Named; import javafx.fxml.FXML; From 458a466c7f8ae24688481198b991fcd1a559e48e Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 18 Jun 2021 15:17:38 +0200 Subject: [PATCH 025/208] updated and excluded dependencies --- pom.xml | 31 ++++++++++++++++--- src/main/java/module-info.java | 6 ++-- src/main/resources/license/THIRD-PARTY.txt | 35 ++++------------------ 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/pom.xml b/pom.xml index 899d1b393..5ab5593eb 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 1.0.0-beta1 1.3.1 1.3.1 - 1.2.2 + 1.2.3 16 @@ -39,8 +39,9 @@ 3.15.0 2.2 30.1.1-jre - 2.35.1 + 2.37 2.8.6 + 1.5.2 1.7.30 1.2.3 @@ -136,7 +137,6 @@ 2.11.0 - com.tobiasdiez @@ -148,7 +148,7 @@ com.nulab-inc zxcvbn - 1.3.0 + ${zxcvbn.version} @@ -156,6 +156,29 @@ com.google.guava guava ${guava.version} + + + + com.google.guava + listenablefuture + + + com.google.code.findbugs + jsr305 + + + org.checkerframework + checker-qual + + + com.google.errorprone + error_prone_annotations + + + com.google.j2objc + j2objc-annotations + + com.google.dagger diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index f0d61b987..41b0056cb 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -18,16 +18,16 @@ module org.cryptomator.desktop { requires javafx.fxml; requires com.tobiasdiez.easybind; requires com.google.common; - requires com.google.gson; // really? + requires com.google.gson; + requires com.nulabinc.zxcvbn; requires org.slf4j; requires org.apache.commons.lang3; + requires dagger; /* TODO: filename-based modules: */ - requires dagger; 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 zxcvbn; requires logback.classic; requires logback.core; diff --git a/src/main/resources/license/THIRD-PARTY.txt b/src/main/resources/license/THIRD-PARTY.txt index 0e1c229df..1407c0713 100644 --- a/src/main/resources/license/THIRD-PARTY.txt +++ b/src/main/resources/license/THIRD-PARTY.txt @@ -11,20 +11,15 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. -Cryptomator uses 47 third-party dependencies under the following licenses: +Cryptomator uses 31 third-party dependencies under the following licenses: Apache License v2.0: - - jffi (com.github.jnr:jffi:1.2.23 - http://github.com/jnr/jffi) - - jnr-a64asm (com.github.jnr:jnr-a64asm:1.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-a64asm) - - jnr-constants (com.github.jnr:jnr-constants:0.9.15 - http://github.com/jnr/jnr-constants) - - jnr-ffi (com.github.jnr:jnr-ffi:2.1.12 - http://github.com/jnr/jnr-ffi) - - FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/) + - Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.11.0 - http://github.com/FasterXML/jackson) + - Jackson-core (com.fasterxml.jackson.core:jackson-core:2.11.0 - https://github.com/FasterXML/jackson-core) + - jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.11.0 - http://github.com/FasterXML/jackson) - Gson (com.google.code.gson:gson:2.8.6 - https://github.com/google/gson/gson) - - Dagger (com.google.dagger:dagger:2.35.1 - https://github.com/google/dagger) - - error-prone annotations (com.google.errorprone:error_prone_annotations:2.5.1 - http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations) + - Dagger (com.google.dagger:dagger:2.37 - https://github.com/google/dagger) - Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess) - Guava: Google Core Libraries for Java (com.google.guava:guava:30.1.1-jre - https://github.com/google/guava/guava) - - Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture) - - J2ObjC Annotations (com.google.j2objc:j2objc-annotations:1.3 - https://github.com/google/j2objc/) - Apache Commons CLI (commons-cli:commons-cli:1.4 - http://commons.apache.org/proper/commons-cli/) - javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/) - Java Native Access (net.java.dev.jna:jna:5.7.0 - https://github.com/java-native-access/jna) @@ -38,15 +33,7 @@ Cryptomator uses 47 third-party dependencies under the following licenses: - Jetty :: Server Core (org.eclipse.jetty:jetty-server:10.0.2 - https://eclipse.org/jetty/jetty-server) - Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:10.0.2 - https://eclipse.org/jetty/jetty-servlet) - Jetty :: Utilities (org.eclipse.jetty:jetty-util:10.0.2 - https://eclipse.org/jetty/jetty-util) - - Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:10.0.2 - https://eclipse.org/jetty/jetty-webapp) - - Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:10.0.2 - https://eclipse.org/jetty/jetty-xml) - Jetty :: Servlet API and Schemas for JPMS and OSGi (org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6 - https://eclipse.org/jetty/jetty-servlet-api) - BSD: - - asm (org.ow2.asm:asm:7.1 - http://asm.ow2.org/) - - asm-analysis (org.ow2.asm:asm-analysis:7.1 - http://asm.ow2.org/) - - asm-commons (org.ow2.asm:asm-commons:7.1 - http://asm.ow2.org/) - - asm-tree (org.ow2.asm:asm-tree:7.1 - http://asm.ow2.org/) - - asm-util (org.ow2.asm:asm-util:7.1 - http://asm.ow2.org/) Eclipse Public License - Version 1.0: - Jetty :: Servlet API and Schemas for JPMS and OSGi (org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6 - https://eclipse.org/jetty/jetty-servlet-api) Eclipse Public License - Version 2.0: @@ -56,33 +43,23 @@ Cryptomator uses 47 third-party dependencies under the following licenses: - Jetty :: Server Core (org.eclipse.jetty:jetty-server:10.0.2 - https://eclipse.org/jetty/jetty-server) - Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:10.0.2 - https://eclipse.org/jetty/jetty-servlet) - Jetty :: Utilities (org.eclipse.jetty:jetty-util:10.0.2 - https://eclipse.org/jetty/jetty-util) - - Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:10.0.2 - https://eclipse.org/jetty/jetty-webapp) - - Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:10.0.2 - https://eclipse.org/jetty/jetty-xml) Eclipse Public License - v 1.0: - Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic) - Logback Core Module (ch.qos.logback:logback-core:1.2.3 - http://logback.qos.ch/logback-core) - Eclipse Public License - v 2.0: - - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) GNU Lesser General Public License: - Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic) - Logback Core Module (ch.qos.logback:logback-core:1.2.3 - http://logback.qos.ch/logback-core) - GPLv2: - - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) GPLv2+CE: - javafx-base (org.openjfx:javafx-base:16 - https://openjdk.java.net/projects/openjfx/javafx-base/) - javafx-controls (org.openjfx:javafx-controls:16 - https://openjdk.java.net/projects/openjfx/javafx-controls/) - javafx-fxml (org.openjfx:javafx-fxml:16 - https://openjdk.java.net/projects/openjfx/javafx-fxml/) - javafx-graphics (org.openjfx:javafx-graphics:16 - https://openjdk.java.net/projects/openjfx/javafx-graphics/) LGPL 2.1: - - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) - Java Native Access (net.java.dev.jna:jna:5.7.0 - https://github.com/java-native-access/jna) - Java Native Access Platform (net.java.dev.jna:jna-platform:5.7.0 - https://github.com/java-native-access/jna) MIT License: - java jwt (com.auth0:java-jwt:3.15.0 - https://github.com/auth0/java-jwt) - - jnr-x86asm (com.github.jnr:jnr-x86asm:1.0.2 - http://github.com/jnr/jnr-x86asm) - - jnr-fuse (com.github.serceman:jnr-fuse:0.5.5 - https://github.com/SerCeMan/jnr-fuse) - - zxcvbn4j (com.nulab-inc:zxcvbn:1.3.0 - https://github.com/nulab/zxcvbn4j) - - Checker Qual (org.checkerframework:checker-qual:3.8.0 - https://checkerframework.org) + - zxcvbn4j (com.nulab-inc:zxcvbn:1.5.2 - https://github.com/nulab/zxcvbn4j) - SLF4J API Module (org.slf4j:slf4j-api:1.7.30 - http://www.slf4j.org) The BSD 2-Clause License: - EasyBind (com.tobiasdiez:easybind:2.2 - https://github.com/tobiasdiez/EasyBind) From 94e26da693d30c4a5615fd999c8455fa8dfcac33 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Tue, 22 Jun 2021 16:32:19 +0200 Subject: [PATCH 026/208] Re-enable FUSE This reverts commit 0e924e74293f594ec7d3efd02e2e12e0fdd60158. --- assembly-linux.xml | 9 ++++- assembly-mac.xml | 9 ++++- assembly-win.xml | 9 ++++- pom.xml | 36 +++++++++++++------ src/main/java/module-info.java | 2 +- .../{FuseVolume.java.txt => FuseVolume.java} | 0 .../common/vaults/VaultModule.java | 6 ++-- .../org/cryptomator/common/vaults/Volume.java | 2 +- src/main/resources/license/THIRD-PARTY.txt | 19 +++++++++- src/package/launcher-linux.sh | 3 +- src/package/launcher-mac.sh | 3 +- src/package/launcher-win.bat | 3 +- 12 files changed, 79 insertions(+), 22 deletions(-) rename src/main/java/org/cryptomator/common/vaults/{FuseVolume.java.txt => FuseVolume.java} (100%) diff --git a/assembly-linux.xml b/assembly-linux.xml index d8d224d67..1de114820 100644 --- a/assembly-linux.xml +++ b/assembly-linux.xml @@ -34,7 +34,14 @@ cryptomator-*.jar - libs + mods + + + target/mods + + *.jar + + mods target/libs diff --git a/assembly-mac.xml b/assembly-mac.xml index cf044be12..95b8adb21 100644 --- a/assembly-mac.xml +++ b/assembly-mac.xml @@ -34,7 +34,14 @@ cryptomator-*.jar - libs + mods + + + target/mods + + *.jar + + mods target/libs diff --git a/assembly-win.xml b/assembly-win.xml index e04495220..c64a34b05 100644 --- a/assembly-win.xml +++ b/assembly-win.xml @@ -34,7 +34,14 @@ cryptomator-*.jar - libs + mods + + + target/mods + + *.jar + + mods target/libs diff --git a/pom.xml b/pom.xml index 5ab5593eb..287f03f8a 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,9 @@ UTF-8 16 + + com.github.serceman,com.github.jnr,org.ow2.asm,net.java.dev.jna,org.apache.jackrabbit,org.apache.httpcomponents + 2.1.0-beta6 1.0.0-rc1 @@ -58,11 +61,11 @@ cryptofs ${cryptomator.cryptofs.version} - - - - - + + org.cryptomator + fuse-nio-adapter + ${cryptomator.fuse.version} + org.cryptomator dokany-nio-adapter @@ -240,7 +243,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.1.2 + 3.2.0 org.apache.maven.plugins @@ -339,6 +342,19 @@ org.apache.maven.plugins maven-dependency-plugin + + copy-mods + prepare-package + + copy-dependencies + + + runtime + ${project.build.directory}/mods + linux,mac,win + ${nonModularGroupIds} + + copy-libs prepare-package @@ -348,7 +364,7 @@ runtime ${project.build.directory}/libs - linux,mac,win + ${nonModularGroupIds} @@ -492,7 +508,7 @@ copy-dependencies - ${project.build.directory}/libs + ${project.build.directory}/mods org.openjfx mac @@ -554,7 +570,7 @@ copy-dependencies - ${project.build.directory}/libs + ${project.build.directory}/mods org.openjfx linux @@ -615,7 +631,7 @@ copy-dependencies - ${project.build.directory}/libs + ${project.build.directory}/mods org.openjfx win diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 41b0056cb..9bd600695 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -6,7 +6,7 @@ import org.cryptomator.integrations.uiappearance.UiAppearanceProvider; module org.cryptomator.desktop { requires org.cryptomator.cryptofs; requires org.cryptomator.frontend.dokany; - // requires org.cryptomator.frontend.fuse; + requires org.cryptomator.frontend.fuse; requires org.cryptomator.frontend.webdav; requires org.cryptomator.integrations.api; requires java.rmi; diff --git a/src/main/java/org/cryptomator/common/vaults/FuseVolume.java.txt b/src/main/java/org/cryptomator/common/vaults/FuseVolume.java similarity index 100% rename from src/main/java/org/cryptomator/common/vaults/FuseVolume.java.txt rename to src/main/java/org/cryptomator/common/vaults/FuseVolume.java diff --git a/src/main/java/org/cryptomator/common/vaults/VaultModule.java b/src/main/java/org/cryptomator/common/vaults/VaultModule.java index 55ba2e020..d254ec0dd 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultModule.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultModule.java @@ -48,12 +48,12 @@ public class VaultModule { } @Provides - public Volume provideVolume(Settings settings, WebDavVolume webDavVolume, DokanyVolume dokanyVolume) { + public Volume provideVolume(Settings settings, WebDavVolume webDavVolume, FuseVolume fuseVolume, DokanyVolume dokanyVolume) { VolumeImpl preferredImpl = settings.preferredVolumeImpl().get(); if (VolumeImpl.DOKANY == preferredImpl && dokanyVolume.isSupported()) { return dokanyVolume; -// } else if (VolumeImpl.FUSE == preferredImpl && fuseVolume.isSupported()) { -// return fuseVolume; + } else if (VolumeImpl.FUSE == preferredImpl && fuseVolume.isSupported()) { + return fuseVolume; } else { if (VolumeImpl.WEBDAV != preferredImpl) { LOG.warn("Using WebDAV, because {} is not supported.", preferredImpl.getDisplayName()); diff --git a/src/main/java/org/cryptomator/common/vaults/Volume.java b/src/main/java/org/cryptomator/common/vaults/Volume.java index f57f913e4..f608122bf 100644 --- a/src/main/java/org/cryptomator/common/vaults/Volume.java +++ b/src/main/java/org/cryptomator/common/vaults/Volume.java @@ -66,7 +66,7 @@ public interface Volume { return Stream.of(VolumeImpl.values()).filter(impl -> switch (impl) { case WEBDAV -> WebDavVolume.isSupportedStatic(); case DOKANY -> DokanyVolume.isSupportedStatic(); - case FUSE -> false; // FuseVolume.isSupportedStatic(); + case FUSE -> FuseVolume.isSupportedStatic(); }).toArray(VolumeImpl[]::new); } diff --git a/src/main/resources/license/THIRD-PARTY.txt b/src/main/resources/license/THIRD-PARTY.txt index 1407c0713..e97424589 100644 --- a/src/main/resources/license/THIRD-PARTY.txt +++ b/src/main/resources/license/THIRD-PARTY.txt @@ -11,11 +11,15 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. -Cryptomator uses 31 third-party dependencies under the following licenses: +Cryptomator uses 43 third-party dependencies under the following licenses: Apache License v2.0: - Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.11.0 - http://github.com/FasterXML/jackson) - Jackson-core (com.fasterxml.jackson.core:jackson-core:2.11.0 - https://github.com/FasterXML/jackson-core) - jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.11.0 - http://github.com/FasterXML/jackson) + - jffi (com.github.jnr:jffi:1.2.23 - http://github.com/jnr/jffi) + - jnr-a64asm (com.github.jnr:jnr-a64asm:1.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-a64asm) + - jnr-constants (com.github.jnr:jnr-constants:0.9.15 - http://github.com/jnr/jnr-constants) + - jnr-ffi (com.github.jnr:jnr-ffi:2.1.12 - http://github.com/jnr/jnr-ffi) - Gson (com.google.code.gson:gson:2.8.6 - https://github.com/google/gson/gson) - Dagger (com.google.dagger:dagger:2.37 - https://github.com/google/dagger) - Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess) @@ -34,6 +38,12 @@ Cryptomator uses 31 third-party dependencies under the following licenses: - Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:10.0.2 - https://eclipse.org/jetty/jetty-servlet) - Jetty :: Utilities (org.eclipse.jetty:jetty-util:10.0.2 - https://eclipse.org/jetty/jetty-util) - Jetty :: Servlet API and Schemas for JPMS and OSGi (org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6 - https://eclipse.org/jetty/jetty-servlet-api) + BSD: + - asm (org.ow2.asm:asm:7.1 - http://asm.ow2.org/) + - asm-analysis (org.ow2.asm:asm-analysis:7.1 - http://asm.ow2.org/) + - asm-commons (org.ow2.asm:asm-commons:7.1 - http://asm.ow2.org/) + - asm-tree (org.ow2.asm:asm-tree:7.1 - http://asm.ow2.org/) + - asm-util (org.ow2.asm:asm-util:7.1 - http://asm.ow2.org/) Eclipse Public License - Version 1.0: - Jetty :: Servlet API and Schemas for JPMS and OSGi (org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6 - https://eclipse.org/jetty/jetty-servlet-api) Eclipse Public License - Version 2.0: @@ -46,19 +56,26 @@ Cryptomator uses 31 third-party dependencies under the following licenses: Eclipse Public License - v 1.0: - Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic) - Logback Core Module (ch.qos.logback:logback-core:1.2.3 - http://logback.qos.ch/logback-core) + Eclipse Public License - v 2.0: + - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) GNU Lesser General Public License: - Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic) - Logback Core Module (ch.qos.logback:logback-core:1.2.3 - http://logback.qos.ch/logback-core) + GPLv2: + - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) GPLv2+CE: - javafx-base (org.openjfx:javafx-base:16 - https://openjdk.java.net/projects/openjfx/javafx-base/) - javafx-controls (org.openjfx:javafx-controls:16 - https://openjdk.java.net/projects/openjfx/javafx-controls/) - javafx-fxml (org.openjfx:javafx-fxml:16 - https://openjdk.java.net/projects/openjfx/javafx-fxml/) - javafx-graphics (org.openjfx:javafx-graphics:16 - https://openjdk.java.net/projects/openjfx/javafx-graphics/) LGPL 2.1: + - jnr-posix (com.github.jnr:jnr-posix:3.0.54 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix) - Java Native Access (net.java.dev.jna:jna:5.7.0 - https://github.com/java-native-access/jna) - Java Native Access Platform (net.java.dev.jna:jna-platform:5.7.0 - https://github.com/java-native-access/jna) MIT License: - java jwt (com.auth0:java-jwt:3.15.0 - https://github.com/auth0/java-jwt) + - jnr-x86asm (com.github.jnr:jnr-x86asm:1.0.2 - http://github.com/jnr/jnr-x86asm) + - jnr-fuse (com.github.serceman:jnr-fuse:0.5.5 - https://github.com/SerCeMan/jnr-fuse) - zxcvbn4j (com.nulab-inc:zxcvbn:1.5.2 - https://github.com/nulab/zxcvbn4j) - SLF4J API Module (org.slf4j:slf4j-api:1.7.30 - http://www.slf4j.org) The BSD 2-Clause License: diff --git a/src/package/launcher-linux.sh b/src/package/launcher-linux.sh index 4ce8e6670..a14ed7e24 100644 --- a/src/package/launcher-linux.sh +++ b/src/package/launcher-linux.sh @@ -1,7 +1,8 @@ #!/bin/sh cd $(dirname $0) java \ - -p "libs" \ + -p "mods" \ + -cp "libs/*" \ -Dcryptomator.settingsPath="~/.config/Cryptomator/settings.json" \ -Dcryptomator.ipcPortPath="~/.config/Cryptomator/ipcPort.bin" \ -Dcryptomator.logDir="~/.local/share/Cryptomator/logs" \ diff --git a/src/package/launcher-mac.sh b/src/package/launcher-mac.sh index 100c975b5..54bae32d5 100644 --- a/src/package/launcher-mac.sh +++ b/src/package/launcher-mac.sh @@ -1,7 +1,8 @@ #!/bin/sh cd $(dirname $0) java \ - -p "libs" \ + -p "mods" \ + -cp "libs/*" \ -Dcryptomator.settingsPath="~/Library/Application Support/Cryptomator/settings.json" \ -Dcryptomator.ipcPortPath="~/Library/Application Support/Cryptomator/ipcPort.bin" \ -Dcryptomator.logDir="~/Library/Logs/Cryptomator" \ diff --git a/src/package/launcher-win.bat b/src/package/launcher-win.bat index b809b3b04..385e01555 100644 --- a/src/package/launcher-win.bat +++ b/src/package/launcher-win.bat @@ -1,6 +1,7 @@ @echo off java ^ - -p "libs" ^ + -p "mods" ^ + -cp "libs/*" ^ -Dcryptomator.settingsPath="~/AppData/Roaming/Cryptomator/settings.json" ^ -Dcryptomator.ipcPortPath="~/AppData/Roaming/Cryptomator/ipcPort.bin" ^ -Dcryptomator.logDir="~/AppData/Roaming/Cryptomator" ^ From 903f55a24f9685bcd6e784ae7fe3ccacea4cca0c Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 22 Jun 2021 17:15:37 +0200 Subject: [PATCH 027/208] improve health check gui: * convert milliseconds to hours, minutes and seconds * spelling * adjust to dark theme --- .../ui/health/CheckDetailController.java | 35 ++++++++--- .../cryptomator/ui/health/CheckListCell.java | 61 +++++++++++++++++-- .../ui/health/CheckListController.java | 14 +---- src/main/resources/i18n/strings.properties | 7 ++- 4 files changed, 91 insertions(+), 26 deletions(-) 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 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..f72aa8481 100644 --- a/src/main/java/org/cryptomator/ui/health/CheckListController.java +++ b/src/main/java/org/cryptomator/ui/health/CheckListController.java @@ -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(); } diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index f0f550769..23e86c55a 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -153,19 +153,22 @@ health.start.configValid=Reading and parsing vault configuration file was succes health.start.configInvalid=Error while reading and parsing the vault configuration file. health.checkList.header=Available Health Checks health.checkList.selectAllBox=Select All -health.check.runBatchBtn=Run selected Checks +health.check.runBatchBtn=Run Selected Checks ## Detail view health.check.detail.noSelectedCheck=For results select a finished health check in the left list. health.check.detail.header=Results of %s health.check.detail.taskNotStarted=The check was not selected to run. health.check.detail.taskScheduled=The check is scheduled. health.check.detail.taskRunning=The check is currently running… -health.check.detail.taskSucceeded=The check finished successfully after %d milliseconds. +health.check.detail.taskSucceeded=The check finished successfully after %s. health.check.detail.taskFailed=The check exited due to an error. health.check.detail.taskCancelled=The check was cancelled. health.check.detail.problemCount=Found %d problems and %d unfixable errors. health.check.exportBtn=Export Report health.check.fixBtn=Fix +health.check.detail.hmsFormat= %d hours, %2d minutes and %2d seconds +health.check.detail.msFormat= %d minutes and %2d seconds +health.check.detail.sFormat= %d seconds ## Checks health.org.cryptomator.cryptofs.health.dirid.DirIdCheck=Directory Check From 135b61070dbda04eb64c755acefd09f3a05daf44 Mon Sep 17 00:00:00 2001 From: JaniruTEC Date: Wed, 23 Jun 2021 22:48:18 +0200 Subject: [PATCH 028/208] Fixed misspelled key --- src/main/resources/fxml/vault_options_masterkey.fxml | 2 +- src/main/resources/i18n/strings.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 @@ -