Просмотр исходного кода

Merge branch 'develop' into release/1.6.0

# Conflicts:
#	main/buildkit/pom.xml
#	main/commons/pom.xml
#	main/launcher/pom.xml
#	main/pom.xml
#	main/ui/pom.xml
Sebastian Stenzel 4 лет назад
Родитель
Сommit
fef5be95ec
100 измененных файлов с 777 добавлено и 1144 удалено
  1. 2 2
      .crowdin.yml
  2. 13 16
      .github/workflows/build.yml
  3. 1 1
      .idea/misc.xml
  4. 0 8
      .idea/modules.xml
  5. 1 1
      .idea/runConfigurations/Cryptomator_Linux.xml
  6. 1 1
      .idea/runConfigurations/Cryptomator_Linux_Dev.xml
  7. 1 1
      .idea/runConfigurations/Cryptomator_Windows.xml
  8. 1 1
      .idea/runConfigurations/Cryptomator_Windows_Dev.xml
  9. 1 1
      .idea/runConfigurations/Cryptomator_macOS.xml
  10. 1 1
      .idea/runConfigurations/Cryptomator_macOS_Dev.xml
  11. 5 4
      README.md
  12. 7 0
      main/buildkit/assembly-linux.xml
  13. 7 0
      main/buildkit/assembly-mac.xml
  14. 7 0
      main/buildkit/assembly-win.xml
  15. 0 216
      main/buildkit/pom.xml
  16. 0 86
      main/commons/pom.xml
  17. 0 48
      main/launcher/pom.xml
  18. 0 445
      main/pom.xml
  19. 0 14
      main/suppression.xml
  20. 0 115
      main/ui/pom.xml
  21. 0 167
      main/ui/src/main/resources/i18n/strings_id.properties
  22. 601 0
      pom.xml
  23. 0 0
      src/license/THIRD-PARTY.properties
  24. 0 0
      src/license/template.ftl
  25. 2 7
      main/commons/src/main/java/org/cryptomator/common/CommonsModule.java
  26. 0 0
      src/main/java/org/cryptomator/common/Constants.java
  27. 0 0
      src/main/java/org/cryptomator/common/ConsumerThrowingException.java
  28. 0 0
      src/main/java/org/cryptomator/common/Environment.java
  29. 0 0
      src/main/java/org/cryptomator/common/LicenseChecker.java
  30. 0 0
      src/main/java/org/cryptomator/common/LicenseHolder.java
  31. 0 0
      src/main/java/org/cryptomator/common/RunnableThrowingException.java
  32. 0 0
      src/main/java/org/cryptomator/common/SemVerComparator.java
  33. 0 0
      src/main/java/org/cryptomator/common/ShutdownHook.java
  34. 0 0
      src/main/java/org/cryptomator/common/SupplierThrowingException.java
  35. 0 0
      src/main/java/org/cryptomator/common/keychain/KeychainManager.java
  36. 0 0
      src/main/java/org/cryptomator/common/keychain/KeychainModule.java
  37. 0 0
      src/main/java/org/cryptomator/common/keychain/NoKeychainAccessProviderException.java
  38. 0 0
      src/main/java/org/cryptomator/common/mountpoint/AvailableDriveLetterChooser.java
  39. 0 0
      src/main/java/org/cryptomator/common/mountpoint/CustomDriveLetterChooser.java
  40. 0 0
      src/main/java/org/cryptomator/common/mountpoint/CustomMountPointChooser.java
  41. 0 0
      src/main/java/org/cryptomator/common/mountpoint/InvalidMountPointException.java
  42. 0 0
      src/main/java/org/cryptomator/common/mountpoint/MacVolumeMountChooser.java
  43. 0 0
      src/main/java/org/cryptomator/common/mountpoint/MountPointChooser.java
  44. 0 0
      src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java
  45. 0 0
      src/main/java/org/cryptomator/common/mountpoint/MountPointHelper.java
  46. 0 0
      src/main/java/org/cryptomator/common/mountpoint/TemporaryMountPointChooser.java
  47. 0 0
      src/main/java/org/cryptomator/common/settings/KeychainBackend.java
  48. 0 0
      src/main/java/org/cryptomator/common/settings/Settings.java
  49. 0 0
      src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java
  50. 0 0
      src/main/java/org/cryptomator/common/settings/SettingsProvider.java
  51. 0 0
      src/main/java/org/cryptomator/common/settings/UiTheme.java
  52. 13 2
      main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java
  53. 8 0
      main/commons/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java
  54. 0 0
      src/main/java/org/cryptomator/common/settings/VolumeImpl.java
  55. 0 0
      src/main/java/org/cryptomator/common/settings/WebDavUrlScheme.java
  56. 0 0
      src/main/java/org/cryptomator/common/settings/WhenUnlocked.java
  57. 0 0
      src/main/java/org/cryptomator/common/vaults/AbstractVolume.java
  58. 60 0
      src/main/java/org/cryptomator/common/vaults/AutoLocker.java
  59. 0 0
      src/main/java/org/cryptomator/common/vaults/DefaultMountFlags.java
  60. 0 0
      src/main/java/org/cryptomator/common/vaults/DokanyVolume.java
  61. 0 0
      src/main/java/org/cryptomator/common/vaults/FuseVolume.java
  62. 0 0
      src/main/java/org/cryptomator/common/vaults/LockNotCompletedException.java
  63. 0 0
      src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java
  64. 0 0
      src/main/java/org/cryptomator/common/vaults/PerVault.java
  65. 0 0
      src/main/java/org/cryptomator/common/vaults/Vault.java
  66. 0 0
      src/main/java/org/cryptomator/common/vaults/VaultComponent.java
  67. 0 0
      src/main/java/org/cryptomator/common/vaults/VaultListChangeListener.java
  68. 5 6
      main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java
  69. 19 0
      src/main/java/org/cryptomator/common/vaults/VaultListModule.java
  70. 0 0
      src/main/java/org/cryptomator/common/vaults/VaultModule.java
  71. 0 0
      src/main/java/org/cryptomator/common/vaults/VaultState.java
  72. 21 1
      main/commons/src/main/java/org/cryptomator/common/vaults/VaultStats.java
  73. 0 0
      src/main/java/org/cryptomator/common/vaults/Volume.java
  74. 0 0
      src/main/java/org/cryptomator/common/vaults/WebDavVolume.java
  75. 0 0
      src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java
  76. 0 0
      src/main/java/org/cryptomator/launcher/Cryptomator.java
  77. 0 0
      src/main/java/org/cryptomator/launcher/CryptomatorComponent.java
  78. 0 0
      src/main/java/org/cryptomator/launcher/CryptomatorModule.java
  79. 0 0
      src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java
  80. 0 0
      src/main/java/org/cryptomator/launcher/IpcFactory.java
  81. 0 0
      src/main/java/org/cryptomator/launcher/IpcProtocol.java
  82. 0 0
      src/main/java/org/cryptomator/launcher/IpcProtocolImpl.java
  83. 0 0
      src/main/java/org/cryptomator/logging/DebugMode.java
  84. 0 0
      src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java
  85. 0 0
      src/main/java/org/cryptomator/logging/LaunchBasedTriggeringPolicy.java
  86. 0 0
      src/main/java/org/cryptomator/logging/LoggerConfiguration.java
  87. 0 0
      src/main/java/org/cryptomator/logging/LoggerModule.java
  88. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java
  89. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultSuccessController.java
  90. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWelcomeController.java
  91. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardComponent.java
  92. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardScoped.java
  93. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardWindow.java
  94. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java
  95. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java
  96. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultNameController.java
  97. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java
  98. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultRecoveryKeyController.java
  99. 0 0
      src/main/java/org/cryptomator/ui/addvaultwizard/LocationPresets.java
  100. 0 0
      main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ReadmeGenerator.java

+ 2 - 2
.crowdin.yml

@@ -1,5 +1,5 @@
 commit_message: "[ci skip]"
 escape_special_characters: 0
 files:
-  - source: /main/ui/src/main/resources/i18n/strings.properties
-    translation: /main/ui/src/main/resources/i18n/strings_%two_letters_code%.properties
+  - source: /src/main/resources/i18n/strings.properties
+    translation: /src/main/resources/i18n/strings_%two_letters_code%.properties

+ 13 - 16
.github/workflows/build.yml

@@ -20,41 +20,38 @@ jobs:
           restore-keys: |
             ${{ runner.os }}-maven-
       - name: Ensure to use tagged version
-        run: mvn versions:set --file main/pom.xml -DnewVersion=${GITHUB_REF##*/} # use shell parameter expansion to strip of 'refs/tags'
+        run: mvn versions:set -DnewVersion=${GITHUB_REF##*/} # use shell parameter expansion to strip of 'refs/tags'
         if: startsWith(github.ref, 'refs/tags/')
       - name: Build and Test
-        run: mvn -B install --file main/pom.xml -Pcoverage
-      - name: Run Codacy Coverage Reporter
-        if: github.repository == 'cryptomator/cryptomator'
-        run: |
-          curl -o ~/codacy-coverage-reporter.jar https://repo.maven.apache.org/maven2/com/codacy/codacy-coverage-reporter/7.1.0/codacy-coverage-reporter-7.1.0-assembly.jar
-          $JAVA_HOME/bin/java --illegal-access=permit -jar ~/codacy-coverage-reporter.jar report -l Java -r main/commons/target/site/jacoco/jacoco.xml --partial
-          $JAVA_HOME/bin/java --illegal-access=permit -jar ~/codacy-coverage-reporter.jar report -l Java -r main/ui/target/site/jacoco/jacoco.xml --partial
-          $JAVA_HOME/bin/java --illegal-access=permit -jar ~/codacy-coverage-reporter.jar report -l Java -r main/launcher/target/site/jacoco/jacoco.xml --partial
-          $JAVA_HOME/bin/java --illegal-access=permit -jar ~/codacy-coverage-reporter.jar final
+        run: mvn -B clean install jacoco:report -Pcoverage,dependency-check
+      - name: Upload code coverage report
+        id: codacyCoverageReporter
+        run: bash <(curl -Ls https://coverage.codacy.com/get.sh)
         env:
           CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
+        continue-on-error: true
+### TODO: move to matrix build:
       - name: Assemble buildkit-linux.zip
-        run: mvn -B clean package -DskipTests --file main/pom.xml --resume-from=buildkit -Prelease,linux
+        run: mvn -B clean package -DskipTests -Plinux
       - name: Upload buildkit-linux.zip
         uses: actions/upload-artifact@v1
         with:
           name: buildkit-linux.zip
-          path: main/buildkit/target/buildkit-linux.zip
+          path: target/buildkit-linux.zip
       - name: Assemble buildkit-mac.zip
-        run: mvn -B clean package -DskipTests --file main/pom.xml --resume-from=buildkit -Prelease,mac
+        run: mvn -B clean package -DskipTests -Pmac
       - name: Upload buildkit-mac.zip
         uses: actions/upload-artifact@v1
         with:
           name: buildkit-mac.zip
-          path: main/buildkit/target/buildkit-mac.zip
+          path: target/buildkit-mac.zip
       - name: Assemble buildkit-win.zip
-        run: mvn -B clean package -DskipTests --file main/pom.xml --resume-from=buildkit -Prelease,windows
+        run: mvn -B clean package -DskipTests -Pwindows
       - name: Upload buildkit-win.zip
         uses: actions/upload-artifact@v1
         with:
           name: buildkit-win.zip
-          path: main/buildkit/target/buildkit-win.zip
+          path: target/buildkit-win.zip
           
   release:
     name: Draft a Release on GitHub Releases

+ 1 - 1
.idea/misc.xml

@@ -4,7 +4,7 @@
   <component name="MavenProjectsManager">
     <option name="originalFiles">
       <list>
-        <option value="$PROJECT_DIR$/main/pom.xml" />
+        <option value="$PROJECT_DIR$/pom.xml" />
       </list>
     </option>
   </component>

+ 0 - 8
.idea/modules.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/Desktop.iml" filepath="$PROJECT_DIR$/.idea/Desktop.iml" />
-    </modules>
-  </component>
-</project>

+ 1 - 1
.idea/runConfigurations/Cryptomator_Linux.xml

@@ -1,7 +1,7 @@
 <component name="ProjectRunConfigurationManager">
   <configuration default="false" name="Cryptomator Linux" type="Application" factoryName="Application">
     <option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
-    <module name="launcher" />
+    <module name="cryptomator" />
     <option name="VM_PARAMETERS" value="-Djdk.gtk.version=2 -Duser.language=en -Dcryptomator.settingsPath=&quot;~/.config/Cryptomator/settings.json&quot; -Dcryptomator.ipcPortPath=&quot;~/.config/Cryptomator/ipcPort.bin&quot; -Dcryptomator.logDir=&quot;~/.local/share/Cryptomator/logs&quot; -Dcryptomator.mountPointsDir=&quot;~/.local/share/Cryptomator/mnt&quot; -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m" />
     <method v="2">
       <option name="Make" enabled="true" />

+ 1 - 1
.idea/runConfigurations/Cryptomator_Linux_Dev.xml

@@ -1,7 +1,7 @@
 <component name="ProjectRunConfigurationManager">
   <configuration default="false" name="Cryptomator Linux Dev" type="Application" factoryName="Application">
     <option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
-    <module name="launcher" />
+    <module name="cryptomator" />
     <option name="VM_PARAMETERS" value="-Djdk.gtk.version=2 -Duser.language=en -Dcryptomator.settingsPath=&quot;~/.config/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcPortPath=&quot;~/.config/Cryptomator-Dev/ipcPort.bin&quot; -Dcryptomator.logDir=&quot;~/.local/share/Cryptomator-Dev/logs&quot; -Dcryptomator.mountPointsDir=&quot;~/.local/share/Cryptomator-Dev/mnt&quot; -Dcryptomator.showTrayIcon=true -Dfuse.experimental=&quot;true&quot; -Xss20m -Xmx512m" />
     <method v="2">
       <option name="Make" enabled="true" />

+ 1 - 1
.idea/runConfigurations/Cryptomator_Windows.xml

@@ -1,7 +1,7 @@
 <component name="ProjectRunConfigurationManager">
   <configuration default="false" name="Cryptomator Windows" type="Application" factoryName="Application">
     <option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
-    <module name="launcher" />
+    <module name="cryptomator" />
     <option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/AppData/Roaming/Cryptomator/settings.json&quot; -Dcryptomator.ipcPortPath=&quot;~/AppData/Roaming/Cryptomator/ipcPort.bin&quot; -Dcryptomator.logDir=&quot;~/AppData/Roaming/Cryptomator&quot; -Dcryptomator.keychainPath=&quot;~/AppData/Roaming/Cryptomator/keychain.json&quot; -Dcryptomator.mountPointsDir=&quot;~/Cryptomator&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m" />
     <method v="2">
       <option name="Make" enabled="true" />

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
.idea/runConfigurations/Cryptomator_Windows_Dev.xml


+ 1 - 1
.idea/runConfigurations/Cryptomator_macOS.xml

@@ -4,7 +4,7 @@
       <env name="LD_LIBRARY_PATH" value="/usr/local/lib" />
     </envs>
     <option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
-    <module name="launcher" />
+    <module name="cryptomator" />
     <option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/Library/Application Support/Cryptomator/settings.json&quot; -Dcryptomator.ipcPortPath=&quot;~/Library/Application Support/Cryptomator/ipcPort.bin&quot; -Dcryptomator.logDir=&quot;~/Library/Logs/Cryptomator&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m -ea" />
     <method v="2">
       <option name="Make" enabled="true" />

+ 1 - 1
.idea/runConfigurations/Cryptomator_macOS_Dev.xml

@@ -4,7 +4,7 @@
       <env name="LD_LIBRARY_PATH" value="/usr/local/lib" />
     </envs>
     <option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
-    <module name="launcher" />
+    <module name="cryptomator" />
     <option name="VM_PARAMETERS" value="-Duser.language=en -Dcryptomator.settingsPath=&quot;~/Library/Application Support/Cryptomator-Dev/settings.json&quot; -Dcryptomator.ipcPortPath=&quot;~/Library/Application Support/Cryptomator-Dev/ipcPort.bin&quot; -Dcryptomator.logDir=&quot;~/Library/Logs/Cryptomator-Dev&quot; -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m -ea" />
     <method v="2">
       <option name="Make" enabled="true" />

+ 5 - 4
README.md

@@ -88,12 +88,13 @@ For more information on the security details visit [cryptomator.org](https://doc
 
 ```
 cd main
-mvn clean install -Prelease,windows
-# or mvn clean install -Prelease,mac
-# or mvn clean install -Prelease,linux
+mvn clean install
+# or mvn clean install -Pwindows
+# or mvn clean install -Pmac
+# or mvn clean install -Plinux
 ```
 
-This will build all the jars and bundle them together with their OS-specific dependencies under `main/buildkit/target`. This can now be used to build native packages.
+This will build all the jars and bundle them together with their OS-specific dependencies under `target`. This can now be used to build native packages.
 
 ### Start Cryptomator
 

+ 7 - 0
main/buildkit/assembly-linux.xml

@@ -29,6 +29,13 @@
 			<outputDirectory></outputDirectory>
 			<fileMode>0755</fileMode>
 		</fileSet>
+		<fileSet>
+			<directory>target/</directory>
+			<includes>
+				<include>cryptomator-*.jar</include>
+			</includes>
+			<outputDirectory>libs</outputDirectory>
+		</fileSet>
 		<fileSet>
 			<directory>target/libs</directory>
 			<includes>

+ 7 - 0
main/buildkit/assembly-mac.xml

@@ -29,6 +29,13 @@
 			<outputDirectory></outputDirectory>
 			<fileMode>0755</fileMode>
 		</fileSet>
+		<fileSet>
+			<directory>target/</directory>
+			<includes>
+				<include>cryptomator-*.jar</include>
+			</includes>
+			<outputDirectory>libs</outputDirectory>
+		</fileSet>
 		<fileSet>
 			<directory>target/libs</directory>
 			<includes>

+ 7 - 0
main/buildkit/assembly-win.xml

@@ -29,6 +29,13 @@
 			<outputDirectory></outputDirectory>
 			<fileMode>0755</fileMode>
 		</fileSet>
+		<fileSet>
+			<directory>target/</directory>
+			<includes>
+				<include>cryptomator-*.jar</include>
+			</includes>
+			<outputDirectory>libs</outputDirectory>
+		</fileSet>
 		<fileSet>
 			<directory>target/libs</directory>
 			<includes>

+ 0 - 216
main/buildkit/pom.xml

@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.cryptomator</groupId>
-		<artifactId>main</artifactId>
-		<version>1.6.0</version>
-	</parent>
-	<artifactId>buildkit</artifactId>
-	<packaging>pom</packaging>
-	<name>Cryptomator Build Kit</name>
-	<description>Builds a package that can be built with Ant locally</description>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>launcher</artifactId>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<plugins>
-			<!-- copy resources -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-resources-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>copy-resources</id>
-						<phase>prepare-package</phase>
-						<goals>
-							<goal>copy-resources</goal>
-						</goals>
-						<configuration>
-							<outputDirectory>${project.build.directory}</outputDirectory>
-							<resources>
-								<resource>
-									<directory>${project.basedir}/src/main/resources</directory>
-									<includes>
-										<include>version.txt</include>
-										<include>ffi-version.txt</include>
-										<include>launcher-mac.sh</include>
-										<include>launcher-linux.sh</include>
-										<include>launcher-win.bat</include>
-										<include>LICENSE.txt</include>
-									</includes>
-									<filtering>true</filtering>
-								</resource>
-							</resources>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-
-			<!-- copy libraries to target/libs/: -->
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-dependency-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>copy-libs</id>
-						<phase>prepare-package</phase>
-						<goals>
-							<goal>copy-dependencies</goal>
-						</goals>
-						<configuration>
-							<includeScope>runtime</includeScope>
-							<outputDirectory>${project.build.directory}/libs</outputDirectory>
-							<excludeClassifiers>linux,mac,win</excludeClassifiers>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-	<profiles>
-		<profile>
-			<id>linux</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-assembly-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>assemble-linux</id>
-								<phase>package</phase>
-								<goals>
-									<goal>single</goal>
-								</goals>
-								<configuration>
-									<descriptors>
-										<descriptor>assembly-linux.xml</descriptor>
-									</descriptors>
-									<appendAssemblyId>false</appendAssemblyId>
-									<finalName>buildkit-linux</finalName>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-dependency-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>copy-linux-libs</id>
-								<phase>prepare-package</phase>
-								<goals>
-									<goal>copy-dependencies</goal>
-								</goals>
-								<configuration>
-									<outputDirectory>${project.build.directory}/libs</outputDirectory>
-									<includeGroupIds>org.openjfx</includeGroupIds>
-									<classifier>linux</classifier>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-
-		<profile>
-			<id>mac</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-assembly-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>assemble-mac</id>
-								<phase>package</phase>
-								<goals>
-									<goal>single</goal>
-								</goals>
-								<configuration>
-									<descriptors>
-										<descriptor>assembly-mac.xml</descriptor>
-									</descriptors>
-									<appendAssemblyId>false</appendAssemblyId>
-									<finalName>buildkit-mac</finalName>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-dependency-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>copy-mac-libs</id>
-								<phase>prepare-package</phase>
-								<goals>
-									<goal>copy-dependencies</goal>
-								</goals>
-								<configuration>
-									<outputDirectory>${project.build.directory}/libs</outputDirectory>
-									<includeGroupIds>org.openjfx</includeGroupIds>
-									<classifier>mac</classifier>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-
-		<profile>
-			<id>windows</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-assembly-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>assemble-win</id>
-								<phase>package</phase>
-								<goals>
-									<goal>single</goal>
-								</goals>
-								<configuration>
-									<descriptors>
-										<descriptor>assembly-win.xml</descriptor>
-									</descriptors>
-									<appendAssemblyId>false</appendAssemblyId>
-									<finalName>buildkit-win</finalName>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-dependency-plugin</artifactId>
-						<executions>
-							<execution>
-								<id>copy-win-libs</id>
-								<phase>prepare-package</phase>
-								<goals>
-									<goal>copy-dependencies</goal>
-								</goals>
-								<configuration>
-									<outputDirectory>${project.build.directory}/libs</outputDirectory>
-									<includeGroupIds>org.openjfx</includeGroupIds>
-									<classifier>win</classifier>
-								</configuration>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-</project>

+ 0 - 86
main/commons/pom.xml

@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.cryptomator</groupId>
-		<artifactId>main</artifactId>
-		<version>1.6.0</version>
-	</parent>
-	<artifactId>commons</artifactId>
-	<name>Cryptomator Commons</name>
-	<description>Shared utilities</description>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>cryptofs</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>fuse-nio-adapter</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>dokany-nio-adapter</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>webdav-nio-adapter</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>integrations-api</artifactId>
-		</dependency>
-
-		<!-- JavaFx -->
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-base</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-graphics</artifactId>
-		</dependency>
-
-		<!-- EasyBind -->
-		<dependency>
-			<groupId>com.tobiasdiez</groupId>
-			<artifactId>easybind</artifactId>
-		</dependency>
-
-		<!-- JWT -->
-		<dependency>
-			<groupId>com.auth0</groupId>
-			<artifactId>java-jwt</artifactId>
-		</dependency>
-
-		<!-- Google -->
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-		</dependency>
-
-		<!-- Apache Commons -->
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-		</dependency>
-
-		<!-- DI -->
-		<dependency>
-			<groupId>com.google.dagger</groupId>
-			<artifactId>dagger</artifactId>
-		</dependency>
-
-		<!-- Logging -->
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-simple</artifactId>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-</project>

+ 0 - 48
main/launcher/pom.xml

@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.cryptomator</groupId>
-		<artifactId>main</artifactId>
-		<version>1.6.0</version>
-	</parent>
-	<artifactId>launcher</artifactId>
-	<name>Cryptomator Launcher</name>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>commons</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>ui</artifactId>
-		</dependency>
-
-		<!-- Libs -->
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-		</dependency>
-
-		<!-- DI -->
-		<dependency>
-			<groupId>com.google.dagger</groupId>
-			<artifactId>dagger</artifactId>
-		</dependency>
-
-		<!-- Logging -->
-		<dependency>
-			<groupId>ch.qos.logback</groupId>
-			<artifactId>logback-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>ch.qos.logback</groupId>
-			<artifactId>logback-classic</artifactId>
-		</dependency>
-	</dependencies>
-</project>

+ 0 - 445
main/pom.xml

@@ -1,445 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>org.cryptomator</groupId>
-	<artifactId>main</artifactId>
-	<version>1.6.0</version>
-	<packaging>pom</packaging>
-	<name>Cryptomator</name>
-
-	<organization>
-		<name>cryptomator.org</name>
-		<url>https://cryptomator.org</url>
-	</organization>
-
-	<developers>
-		<developer>
-			<name>Sebastian Stenzel</name>
-			<email>sebastian.stenzel@gmail.com</email>
-			<timezone>+1</timezone>
-		</developer>
-	</developers>
-
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.jdk.version>16</project.jdk.version>
-
-		<!-- cryptomator dependencies -->
-		<cryptomator.cryptofs.version>2.1.0-beta5</cryptomator.cryptofs.version>
-		<cryptomator.integrations.version>1.0.0-beta2</cryptomator.integrations.version>
-		<cryptomator.integrations.win.version>1.0.0-beta2</cryptomator.integrations.win.version>
-		<cryptomator.integrations.mac.version>1.0.0-beta2</cryptomator.integrations.mac.version>
-		<cryptomator.integrations.linux.version>1.0.0-beta1</cryptomator.integrations.linux.version>
-		<cryptomator.fuse.version>1.3.1</cryptomator.fuse.version>
-		<cryptomator.dokany.version>1.3.1</cryptomator.dokany.version>
-		<cryptomator.webdav.version>1.2.2</cryptomator.webdav.version>
-
-		<!-- 3rd party dependencies -->
-		<javafx.version>16</javafx.version>
-		<commons-lang3.version>3.11</commons-lang3.version>
-		<jwt.version>3.15.0</jwt.version>
-		<easybind.version>2.1.0</easybind.version>
-		<guava.version>30.1.1-jre</guava.version>
-		<dagger.version>2.35.1</dagger.version>
-		<gson.version>2.8.6</gson.version>
-		<slf4j.version>1.7.30</slf4j.version>
-		<logback.version>1.2.3</logback.version>
-
-		<!-- test dependencies -->
-		<junit.jupiter.version>5.7.1</junit.jupiter.version>
-		<mockito.version>3.9.0</mockito.version>
-		<hamcrest.version>2.2</hamcrest.version>
-	</properties>
-
-	<dependencyManagement>
-		<dependencies>
-			<!-- modules -->
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>commons</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>ui</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>launcher</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-
-			<!-- Cryptomator Libs -->
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>cryptofs</artifactId>
-				<version>${cryptomator.cryptofs.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>fuse-nio-adapter</artifactId>
-				<version>${cryptomator.fuse.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>dokany-nio-adapter</artifactId>
-				<version>${cryptomator.dokany.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>webdav-nio-adapter</artifactId>
-				<version>${cryptomator.webdav.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>integrations-api</artifactId>
-				<version>${cryptomator.integrations.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>integrations-win</artifactId>
-				<version>${cryptomator.integrations.win.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>integrations-mac</artifactId>
-				<version>${cryptomator.integrations.mac.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.cryptomator</groupId>
-				<artifactId>integrations-linux</artifactId>
-				<version>${cryptomator.integrations.linux.version}</version>
-			</dependency>
-
-			<!-- JavaFX -->
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-base</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-graphics</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-controls</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-fxml</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<!-- Logging -->
-			<dependency>
-				<groupId>org.slf4j</groupId>
-				<artifactId>slf4j-api</artifactId>
-				<version>${slf4j.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.slf4j</groupId>
-				<artifactId>slf4j-simple</artifactId>
-				<version>${slf4j.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>ch.qos.logback</groupId>
-				<artifactId>logback-core</artifactId>
-				<version>${logback.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>ch.qos.logback</groupId>
-				<artifactId>logback-classic</artifactId>
-				<version>${logback.version}</version>
-			</dependency>
-
-			<!-- Apache Commons -->
-			<dependency>
-				<groupId>org.apache.commons</groupId>
-				<artifactId>commons-lang3</artifactId>
-				<version>${commons-lang3.version}</version>
-			</dependency>
-
-			<!-- JWT -->
-			<dependency>
-				<groupId>com.auth0</groupId>
-				<artifactId>java-jwt</artifactId>
-				<version>${jwt.version}</version>
-			</dependency>
-
-			<!-- EasyBind -->
-			<dependency>
-				<groupId>com.tobiasdiez</groupId>
-				<artifactId>easybind</artifactId>
-				<version>${easybind.version}</version>
-			</dependency>
-
-			<!-- Google -->
-			<dependency>
-				<groupId>com.google.guava</groupId>
-				<artifactId>guava</artifactId>
-				<version>${guava.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>com.google.dagger</groupId>
-				<artifactId>dagger</artifactId>
-				<version>${dagger.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>com.google.code.gson</groupId>
-				<artifactId>gson</artifactId>
-				<version>${gson.version}</version>
-			</dependency>
-
-			<!-- JUnit / Mockito / Hamcrest -->
-			<dependency>
-				<groupId>org.junit.jupiter</groupId>
-				<artifactId>junit-jupiter</artifactId>
-				<version>${junit.jupiter.version}</version>
-				<scope>test</scope>
-			</dependency>
-			<dependency>
-				<groupId>org.mockito</groupId>
-				<artifactId>mockito-core</artifactId>
-				<version>${mockito.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.hamcrest</groupId>
-				<artifactId>hamcrest</artifactId>
-				<version>${hamcrest.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-swing</artifactId>
-				<version>${javafx.version}</version>
-				<scope>test</scope>
-			</dependency>
-
-		</dependencies>
-	</dependencyManagement>
-
-	<dependencies>
-		<!-- common dependencies for all modules -->
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.hamcrest</groupId>
-			<artifactId>hamcrest</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.mockito</groupId>
-			<artifactId>mockito-core</artifactId>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-	<modules>
-		<module>commons</module>
-		<module>ui</module>
-		<module>launcher</module>
-	</modules>
-
-	<profiles>
-		<profile>
-			<id>release</id>
-			<modules>
-				<module>buildkit</module>
-			</modules>
-		</profile>
-		<profile>
-			<id>coverage</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.jacoco</groupId>
-						<artifactId>jacoco-maven-plugin</artifactId>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-		<profile>
-			<id>mac</id>
-			<activation>
-				<os>
-					<family>mac</family>
-				</os>
-				<property>
-					<name>idea.version</name>
-				</property>
-			</activation>
-			<dependencies>
-				<dependency>
-					<groupId>org.cryptomator</groupId>
-					<artifactId>integrations-mac</artifactId>
-				</dependency>
-			</dependencies>
-		</profile>
-		<profile>
-			<id>linux</id>
-			<activation>
-				<os>
-					<family>unix</family>
-					<name>Linux</name>
-				</os>
-				<property>
-					<name>idea.version</name>
-				</property>
-			</activation>
-			<dependencies>
-				<dependency>
-					<groupId>org.cryptomator</groupId>
-					<artifactId>integrations-linux</artifactId>
-				</dependency>
-			</dependencies>
-		</profile>
-		<profile>
-			<id>windows</id>
-			<activation>
-				<os>
-					<family>windows</family>
-				</os>
-				<property>
-					<name>idea.version</name>
-				</property>
-			</activation>
-			<dependencies>
-				<dependency>
-					<groupId>org.cryptomator</groupId>
-					<artifactId>integrations-win</artifactId>
-				</dependency>
-			</dependencies>
-		</profile>
-		<profile>
-			<id>dependency-check</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.owasp</groupId>
-						<artifactId>dependency-check-maven</artifactId>
-						<version>6.0.3</version>
-						<configuration>
-							<cveValidForHours>24</cveValidForHours>
-							<failBuildOnCVSS>0</failBuildOnCVSS>
-							<skipTestScope>true</skipTestScope>
-							<detail>true</detail>
-							<suppressionFile>suppression.xml</suppressionFile>
-						</configuration>
-						<executions>
-							<execution>
-								<goals>
-									<goal>check</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-
-	<build>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-compiler-plugin</artifactId>
-					<version>3.8.1</version>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-resources-plugin</artifactId>
-					<version>3.2.0</version>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-dependency-plugin</artifactId>
-					<version>3.1.2</version>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-assembly-plugin</artifactId>
-					<version>3.3.0</version>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-surefire-plugin</artifactId>
-					<version>2.22.2</version>
-				</plugin>
-				<plugin>
-					<groupId>org.codehaus.mojo</groupId>
-					<artifactId>license-maven-plugin</artifactId>
-					<version>2.0.0</version>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-jar-plugin</artifactId>
-					<version>3.2.0</version>
-					<configuration>
-						<archive>
-							<manifest>
-								<!-- adds Implementation-Version which can be read during runtime -->
-								<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-							</manifest>
-						</archive>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.jacoco</groupId>
-					<artifactId>jacoco-maven-plugin</artifactId>
-					<version>0.8.6</version>
-					<executions>
-						<execution>
-							<id>prepare-agent</id>
-							<goals>
-								<goal>prepare-agent</goal>
-							</goals>
-						</execution>
-						<execution>
-							<id>report</id>
-							<goals>
-								<goal>report</goal>
-							</goals>
-						</execution>
-					</executions>
-					<configuration>
-						<excludes>
-							<exclude>**/*_*</exclude>
-							<exclude>**/Dagger*</exclude>
-						</excludes>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-		<plugins>
-			<plugin>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<release>${project.jdk.version}</release>
-					<annotationProcessorPaths>
-						<path>
-							<groupId>com.google.dagger</groupId>
-							<artifactId>dagger-compiler</artifactId>
-							<version>${dagger.version}</version>
-						</path>
-					</annotationProcessorPaths>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-			</plugin>
-		</plugins>
-	</build>
-
-</project>

+ 0 - 14
main/suppression.xml

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- This file lists false positives found by org.owasp:dependency-check-maven build plugin -->
-<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.2.xsd">
-	<suppress>
-		<notes><![CDATA[ Suppress known vulnerabilities in FUSE libraries for fuse-nio-adapter. For more info, see suppression.xml of https://github.com/cryptomator/fuse-nio-adapter ]]></notes>
-		<gav regex="true">^org\.cryptomator:fuse-nio-adapter:.*$</gav>
-		<cvssBelow>9</cvssBelow>
-	</suppress>
-	<suppress>
-		<notes><![CDATA[ Suppress known vulnerabilities in FUSE libraries for jnr-fuse (dependency of fuse-nio-adapter). ]]></notes>
-		<gav regex="true">^com\.github\.serceman:jnr-fuse:.*$</gav>
-		<cvssBelow>9</cvssBelow>
-	</suppress>
-</suppressions>

+ 0 - 115
main/ui/pom.xml

@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.cryptomator</groupId>
-		<artifactId>main</artifactId>
-		<version>1.6.0</version>
-	</parent>
-	<artifactId>ui</artifactId>
-	<name>Cryptomator GUI</name>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.cryptomator</groupId>
-			<artifactId>commons</artifactId>
-		</dependency>
-
-		<!-- JavaFx -->
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-controls</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-fxml</artifactId>
-		</dependency>
-
-		<!-- EasyBind -->
-		<dependency>
-			<groupId>com.tobiasdiez</groupId>
-			<artifactId>easybind</artifactId>
-		</dependency>
-
-		<!-- Google -->
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-		</dependency>
-
-		<!-- Apache Commons -->
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-		</dependency>
-
-		<!-- DI -->
-		<dependency>
-			<groupId>com.google.dagger</groupId>
-			<artifactId>dagger</artifactId>
-		</dependency>
-
-		<!-- Zxcvbn -->
-		<dependency>
-			<groupId>com.nulab-inc</groupId>
-			<artifactId>zxcvbn</artifactId>
-			<version>1.3.0</version>
-		</dependency>
-
-		<!-- Logging -->
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-simple</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-		<!-- Testing -->
-		<dependency>
-			<groupId>com.google.jimfs</groupId>
-			<artifactId>jimfs</artifactId>
-			<version>1.1</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-swing</artifactId>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>license-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>add-third-party</id>
-						<goals>
-							<goal>add-third-party</goal>
-						</goals>
-						<phase>generate-resources</phase>
-						<configuration>
-							<outputDirectory>${project.basedir}/src/main/resources/license</outputDirectory>
-							<thirdPartyFilename>THIRD-PARTY.txt</thirdPartyFilename>
-							<includedScopes>compile</includedScopes>
-							<excludedGroups>org\.cryptomator</excludedGroups>
-							<licenseMerges>
-								<licenseMerge>Apache License v2.0|Apache License, Version 2.0|The Apache Software License, Version 2.0|Apache 2.0|Apache Software License - Version 2.0</licenseMerge>
-								<licenseMerge>MIT License|The MIT License (MIT)|The MIT License|MIT license</licenseMerge>
-								<licenseMerge>LGPL 2.1|LGPL, version 2.1|GNU Lesser/Library General Public License version 2|GNU Lesser General Public License Version 2.1</licenseMerge>
-								<licenseMerge>GPLv2|GNU General Public License Version 2</licenseMerge>
-								<licenseMerge>GPLv2+CE|CDDL + GPLv2 with classpath exception</licenseMerge>
-							</licenseMerges>
-							<fileTemplate>${project.basedir}/src/license/template.ftl</fileTemplate>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-</project>

+ 0 - 167
main/ui/src/main/resources/i18n/strings_id.properties

@@ -1,167 +0,0 @@
-# Locale Specific CSS files such as CJK, RTL,...
-
-# Generics
-## Button
-generic.button.apply=Terapkan
-generic.button.back=Kembali
-generic.button.cancel=Batalkan
-generic.button.change=Ganti
-generic.button.close=Tutup
-generic.button.copy=Salin
-generic.button.copied=Tersalin!
-generic.button.done=Selesai
-generic.button.next=Lanjut
-generic.button.print=Cetak
-## Error
-generic.error.title=Telah terjadi kesalahan tak terduga
-generic.error.instruction=Ini harusnya tidak terjadi. Harap laporkan pesan kesalahan dibawah dan tulis deskripsi kenapa ini bisa terjadi.
-
-# Defaults
-defaults.vault.vaultName=Brankas
-
-# Tray Menu
-traymenu.showMainWindow=Tampilkan
-traymenu.showPreferencesWindow=Preferensi
-traymenu.lockAllVaults=Gembok Semua
-traymenu.quitApplication=Keluar
-traymenu.vault.unlock=Buka Gembok
-traymenu.vault.lock=Gembok
-traymenu.vault.reveal=Perlihatkan
-
-# Add Vault Wizard
-addvaultwizard.title=Tambah Brankas
-## Welcome
-addvaultwizard.welcome.newButton=Buat Brankas Baru
-addvaultwizard.welcome.existingButton=Buka Brankas yg Sudah Ada
-## New
-### Name
-addvaultwizard.new.nameInstruction=Buat sebuah nama untuk brankas
-addvaultwizard.new.namePrompt=Nama Brankas
-### Location
-addvaultwizard.new.locationInstruction=Dimana Cryptomator seharusnya menyimpan brankas berkas terenkripsi kamu?
-addvaultwizard.new.locationLabel=Lokasi penyimpanan
-addvaultwizard.new.locationPrompt=…
-addvaultwizard.new.directoryPickerLabel=Sesuaikan Lokasi
-addvaultwizard.new.directoryPickerButton=Pilih…
-addvaultwizard.new.directoryPickerTitle=Pilih Folder
-addvaultwizard.new.fileAlreadyExists=Sudah ada file atau direktori dengan nama yang sama
-addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak ada atau tidak dapat diakses
-addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
-addvaultwizard.new.invalidName=Nama brankas salah. Harap pilih nama folder yang umum.
-### Password
-addvaultwizard.new.createVaultBtn=Buat Brankas
-addvaultwizard.new.generateRecoveryKeyChoice=Kamu tidak dapat mengakses data tanpa kata sandi kamu. Apa kamu ingin sebuah kunci pemulihan buat jaga-jaga?
-addvaultwizard.new.generateRecoveryKeyChoice.yes=Ya, sedia payung sebelum hujan
-addvaultwizard.new.generateRecoveryKeyChoice.no=Tidak, terima kasih, Saya tidak akan kehilangan kata sandi saya
-### Information
-addvault.new.readme.storageLocation.fileName=PENTING.rtf
-addvault.new.readme.storageLocation.1=⚠️  BERKAS BRANKAS  ⚠️
-addvault.new.readme.storageLocation.2=Ini adalah lokasi penyimpanan brankas kamu.
-addvault.new.readme.storageLocation.3=JANGAN
-addvault.new.readme.storageLocation.4=•  mengubah file dalam direktori ini, atau
-addvault.new.readme.storageLocation.5=•  menempelkan file untuk dienkripsi ke dalam direktori ini.
-addvault.new.readme.storageLocation.6=Jika kamu ingin mengenkripsi berkas dan melihat isi brankas, lakukan hal berikut:
-addvault.new.readme.storageLocation.7=1. Tambahkan brankas ini ke Cryptomator.
-addvault.new.readme.storageLocation.8=2. Buka gembok brankas di Cryptomator.
-addvault.new.readme.storageLocation.9=3. Buka akses lokasi dengan mengklik tombol "Perlihatkan".
-addvault.new.readme.storageLocation.10=Jika kamu butuh bantuan, kunjungi dokumentasi: %s
-addvault.new.readme.accessLocation.fileName=SELAMAT_DATANG.rtf
-addvault.new.readme.accessLocation.1=🔐️  ISI TERENKRIPSI  🔐️
-addvault.new.readme.accessLocation.2=Ini adalah lokasi akses brankas kamu.
-addvault.new.readme.accessLocation.3=File yang ditambahkan ke volume ini akan dienkripsi oleh Cryptomator. Anda dapat mempergunakan isi vault seperti dalam folder lain. Saat ini Anda sedang mengakses tampilan versi dekripsi, file Anda selalu terenkripsi di dalam cakram keras Anda.
-addvault.new.readme.accessLocation.4=Anda dapat menghapus file ini.
-## Existing
-addvaultwizard.existing.instruction=Pilih file "masterkey.cryptomator" dalam vault Anda.
-addvaultwizard.existing.chooseBtn=Pilih…
-addvaultwizard.existing.filePickerTitle=Pilih File Kunci Induk
-## Success
-addvaultwizard.success.nextStepsInstructions=Vault "%s" telah dibuat.\nAnda harus membuka kunci vault ini untuk mengakses atau menambahkan konten. Anda juga dapat membuka kunci vault ini kapan saja di kemudian hari.
-addvaultwizard.success.unlockNow=Buka Kunci Sekarang
-
-# Remove Vault
-removeVault.title=Hapus Vault
-removeVault.information=Cryptomator hanya akan melupakan vault ini. Anda dapat menambahkan vault ini lagi nantinya. File yang telah dienkripsi tidak akan dihapus dari cakram keras Anda.
-removeVault.confirmBtn=Hapus Vault
-
-# Change Password
-changepassword.title=Ubah Kata Sandi
-changepassword.enterOldPassword=Masukkan kata sandi untuk "%s" saat ini
-changepassword.finalConfirmation=Saya mengerti bahwa saya tidak akan dapat mengakses data saya apabila saya lupa kata sandi saya
-
-# Forget Password
-forgetPassword.title=Lupa Kata Sandi
-forgetPassword.confirmBtn=Lupa Kata Sandi
-
-# Unlock
-unlock.unlockBtn=Buka Gembok
-##
-unlock.chooseMasterkey.filePickerTitle=Pilih File Kunci Induk
-## Success
-## Failure
-### Invalid Mount Point
-
-# Lock
-## Force
-## Failure
-
-# Migration
-## Start
-## Run
-## Sucess
-migration.success.unlockNow=Buka Kunci Sekarang
-## Missing file system capabilities
-## Impossible
-
-# Preferences
-preferences.title=Preferensi
-## General
-## Volume
-## Updates
-## Contribution
-#<-- Add entries for donations and code/translation/documentation contribution -->
-
-## About
-
-# Vault Statistics
-## Read
-## Write
-
-# Main Window
-main.closeBtn.tooltip=Tutup
-main.preferencesBtn.tooltip=Preferensi
-## Drag 'n' Drop
-## Vault List
-main.vaultlist.contextMenu.lock=Gembok
-main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
-main.vaultlist.addVaultBtn=Tambah Brankas
-## Vault Detail
-### Welcome
-### Locked
-main.vaultDetail.unlockNowBtn=Buka Kunci Sekarang
-### Unlocked
-main.vaultDetail.lockBtn=Gembok
-### Missing
-### Needs Migration
-
-# Wrong File Alert
-
-# Vault Options
-## General
-vaultOptions.general.vaultName=Nama Brankas
-## Mount
-vaultOptions.mount.mountPoint.directoryPickerButton=Pilih…
-## Master Key
-vaultOptions.masterkey.changePasswordBtn=Ubah Kata Sandi
-
-# Recovery Key
-
-# New Password
-passwordStrength.messageLabel.0=Sangat lemah
-passwordStrength.messageLabel.1=Lemah
-passwordStrength.messageLabel.2=Cukup
-passwordStrength.messageLabel.3=Kuat
-passwordStrength.messageLabel.4=Sangat kuat
-
-# Quit
-quit.prompt=Keluar aplikasi? Terdapat brankas yg belum digembok.
-quit.lockAndQuit=Gembok dan Keluar

+ 601 - 0
pom.xml

@@ -0,0 +1,601 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.cryptomator</groupId>
+	<artifactId>cryptomator</artifactId>
+	<version>1.6.0-SNAPSHOT</version>
+	<name>Cryptomator Desktop App</name>
+
+	<organization>
+		<name>cryptomator.org</name>
+		<url>https://cryptomator.org</url>
+	</organization>
+
+	<developers>
+		<developer>
+			<name>Sebastian Stenzel</name>
+			<email>sebastian.stenzel@gmail.com</email>
+			<timezone>+1</timezone>
+		</developer>
+	</developers>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.jdk.version>16</project.jdk.version>
+
+		<!-- cryptomator dependencies -->
+		<cryptomator.cryptofs.version>2.1.0-beta5</cryptomator.cryptofs.version>
+		<cryptomator.integrations.version>1.0.0-beta2</cryptomator.integrations.version>
+		<cryptomator.integrations.win.version>1.0.0-beta2</cryptomator.integrations.win.version>
+		<cryptomator.integrations.mac.version>1.0.0-beta2</cryptomator.integrations.mac.version>
+		<cryptomator.integrations.linux.version>1.0.0-beta1</cryptomator.integrations.linux.version>
+		<cryptomator.fuse.version>1.3.1</cryptomator.fuse.version>
+		<cryptomator.dokany.version>1.3.1</cryptomator.dokany.version>
+		<cryptomator.webdav.version>1.2.2</cryptomator.webdav.version>
+
+		<!-- 3rd party dependencies -->
+		<javafx.version>16</javafx.version>
+		<commons-lang3.version>3.11</commons-lang3.version>
+		<jwt.version>3.15.0</jwt.version>
+		<easybind.version>2.1.0</easybind.version>
+		<guava.version>30.1.1-jre</guava.version>
+		<dagger.version>2.35.1</dagger.version>
+		<gson.version>2.8.6</gson.version>
+		<slf4j.version>1.7.30</slf4j.version>
+		<logback.version>1.2.3</logback.version>
+
+		<!-- test dependencies -->
+		<junit.jupiter.version>5.7.1</junit.jupiter.version>
+		<mockito.version>3.9.0</mockito.version>
+		<hamcrest.version>2.2</hamcrest.version>
+	</properties>
+
+	<dependencies>
+		<!-- Cryptomator Libs -->
+		<dependency>
+			<groupId>org.cryptomator</groupId>
+			<artifactId>cryptofs</artifactId>
+			<version>${cryptomator.cryptofs.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.cryptomator</groupId>
+			<artifactId>fuse-nio-adapter</artifactId>
+			<version>${cryptomator.fuse.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.cryptomator</groupId>
+			<artifactId>dokany-nio-adapter</artifactId>
+			<version>${cryptomator.dokany.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.cryptomator</groupId>
+			<artifactId>webdav-nio-adapter</artifactId>
+			<version>${cryptomator.webdav.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.cryptomator</groupId>
+			<artifactId>integrations-api</artifactId>
+			<version>${cryptomator.integrations.version}</version>
+		</dependency>
+
+		<!-- JavaFX -->
+		<dependency>
+			<groupId>org.openjfx</groupId>
+			<artifactId>javafx-base</artifactId>
+			<version>${javafx.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openjfx</groupId>
+			<artifactId>javafx-graphics</artifactId>
+			<version>${javafx.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openjfx</groupId>
+			<artifactId>javafx-controls</artifactId>
+			<version>${javafx.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openjfx</groupId>
+			<artifactId>javafx-fxml</artifactId>
+			<version>${javafx.version}</version>
+		</dependency>
+
+		<!-- Logging -->
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+			<version>${slf4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-core</artifactId>
+			<version>${logback.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+			<version>${logback.version}</version>
+		</dependency>
+
+		<!-- Apache Commons -->
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+			<version>${commons-lang3.version}</version>
+		</dependency>
+
+		<!-- JWT -->
+		<dependency>
+			<groupId>com.auth0</groupId>
+			<artifactId>java-jwt</artifactId>
+			<version>${jwt.version}</version>
+		</dependency>
+
+		<!-- EasyBind -->
+		<dependency>
+			<groupId>com.tobiasdiez</groupId>
+			<artifactId>easybind</artifactId>
+			<version>${easybind.version}</version>
+		</dependency>
+
+		<!-- Zxcvbn -->
+		<dependency>
+			<groupId>com.nulab-inc</groupId>
+			<artifactId>zxcvbn</artifactId>
+			<version>1.3.0</version>
+		</dependency>
+
+		<!-- Google -->
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+			<version>${guava.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.dagger</groupId>
+			<artifactId>dagger</artifactId>
+			<version>${dagger.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+			<version>${gson.version}</version>
+		</dependency>
+
+		<!-- JUnit / Mockito / Hamcrest -->
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter</artifactId>
+			<version>${junit.jupiter.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<version>${mockito.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.hamcrest</groupId>
+			<artifactId>hamcrest</artifactId>
+			<version>${hamcrest.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.openjfx</groupId>
+			<artifactId>javafx-swing</artifactId>
+			<version>${javafx.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.google.jimfs</groupId>
+			<artifactId>jimfs</artifactId>
+			<version>1.1</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>3.8.1</version>
+				</plugin>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-resources-plugin</artifactId>
+					<version>3.2.0</version>
+				</plugin>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-dependency-plugin</artifactId>
+					<version>3.1.2</version>
+				</plugin>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-assembly-plugin</artifactId>
+					<version>3.3.0</version>
+				</plugin>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-surefire-plugin</artifactId>
+					<version>2.22.2</version>
+				</plugin>
+				<plugin>
+					<groupId>org.codehaus.mojo</groupId>
+					<artifactId>license-maven-plugin</artifactId>
+					<version>2.0.0</version>
+				</plugin>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-jar-plugin</artifactId>
+					<version>3.2.0</version>
+				</plugin>
+				<plugin>
+					<groupId>org.jacoco</groupId>
+					<artifactId>jacoco-maven-plugin</artifactId>
+					<version>0.8.6</version>
+				</plugin>
+				<plugin>
+					<groupId>org.owasp</groupId>
+					<artifactId>dependency-check-maven</artifactId>
+					<version>6.0.3</version>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<release>${project.jdk.version}</release>
+					<annotationProcessorPaths>
+						<path>
+							<groupId>com.google.dagger</groupId>
+							<artifactId>dagger-compiler</artifactId>
+							<version>${dagger.version}</version>
+						</path>
+					</annotationProcessorPaths>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<!-- adds Implementation-Version which can be read during runtime -->
+							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+						</manifest>
+					</archive>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy-resources</id>
+						<phase>prepare-package</phase>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>${project.build.directory}</outputDirectory>
+							<resources>
+								<resource>
+									<directory>${project.basedir}/src/package</directory>
+									<includes>
+										<include>version.txt</include>
+										<include>ffi-version.txt</include>
+										<include>launcher-mac.sh</include>
+										<include>launcher-linux.sh</include>
+										<include>launcher-win.bat</include>
+										<include>LICENSE.txt</include>
+									</includes>
+									<filtering>true</filtering>
+								</resource>
+							</resources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy-libs</id>
+						<phase>prepare-package</phase>
+						<goals>
+							<goal>copy-dependencies</goal>
+						</goals>
+						<configuration>
+							<includeScope>runtime</includeScope>
+							<outputDirectory>${project.build.directory}/libs</outputDirectory>
+							<excludeClassifiers>linux,mac,win</excludeClassifiers>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>license-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>add-third-party</id>
+						<goals>
+							<goal>add-third-party</goal>
+						</goals>
+						<phase>generate-resources</phase>
+						<configuration>
+							<outputDirectory>${project.basedir}/src/main/resources/license</outputDirectory>
+							<thirdPartyFilename>THIRD-PARTY.txt</thirdPartyFilename>
+							<includedScopes>compile</includedScopes>
+							<excludedGroups>org\.cryptomator</excludedGroups>
+							<licenseMerges>
+								<licenseMerge>Apache License v2.0|Apache License, Version 2.0|The Apache Software License, Version 2.0|Apache 2.0|Apache Software License - Version 2.0</licenseMerge>
+								<licenseMerge>MIT License|The MIT License (MIT)|The MIT License|MIT license</licenseMerge>
+								<licenseMerge>LGPL 2.1|LGPL, version 2.1|GNU Lesser/Library General Public License version 2|GNU Lesser General Public License Version 2.1</licenseMerge>
+								<licenseMerge>GPLv2|GNU General Public License Version 2</licenseMerge>
+								<licenseMerge>GPLv2+CE|CDDL + GPLv2 with classpath exception</licenseMerge>
+							</licenseMerges>
+							<fileTemplate>${project.basedir}/src/license/template.ftl</fileTemplate>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<profiles>
+		<profile>
+			<id>coverage</id>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.jacoco</groupId>
+						<artifactId>jacoco-maven-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>prepare-agent</id>
+								<goals>
+									<goal>prepare-agent</goal>
+								</goals>
+							</execution>
+							<execution>
+								<id>report</id>
+								<goals>
+									<goal>report</goal>
+								</goals>
+							</execution>
+						</executions>
+						<configuration>
+							<excludes>
+								<exclude>**/*_*</exclude>
+								<exclude>**/Dagger*</exclude>
+							</excludes>
+						</configuration>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+
+		<profile>
+			<id>dependency-check</id>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.owasp</groupId>
+						<artifactId>dependency-check-maven</artifactId>
+						<configuration>
+							<cveValidForHours>24</cveValidForHours>
+							<failBuildOnCVSS>0</failBuildOnCVSS>
+							<skipTestScope>true</skipTestScope>
+							<detail>true</detail>
+							<suppressionFile>suppression.xml</suppressionFile>
+						</configuration>
+						<executions>
+							<execution>
+								<goals>
+									<goal>check</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+
+		<profile>
+			<id>mac</id>
+			<activation>
+				<os>
+					<family>mac</family>
+				</os>
+				<property>
+					<name>idea.version</name>
+				</property>
+			</activation>
+			<dependencies>
+				<dependency>
+					<groupId>org.cryptomator</groupId>
+					<artifactId>integrations-mac</artifactId>
+					<version>${cryptomator.integrations.mac.version}</version>
+				</dependency>
+			</dependencies>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-assembly-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>assemble-mac</id>
+								<phase>package</phase>
+								<goals>
+									<goal>single</goal>
+								</goals>
+								<configuration>
+									<descriptors>
+										<descriptor>assembly-mac.xml</descriptor>
+									</descriptors>
+									<appendAssemblyId>false</appendAssemblyId>
+									<finalName>buildkit-mac</finalName>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-dependency-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>copy-mac-libs</id>
+								<phase>prepare-package</phase>
+								<goals>
+									<goal>copy-dependencies</goal>
+								</goals>
+								<configuration>
+									<outputDirectory>${project.build.directory}/libs</outputDirectory>
+									<includeGroupIds>org.openjfx</includeGroupIds>
+									<classifier>mac</classifier>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+
+		<profile>
+			<id>linux</id>
+			<activation>
+				<os>
+					<family>unix</family>
+					<name>Linux</name>
+				</os>
+				<property>
+					<name>idea.version</name>
+				</property>
+			</activation>
+			<dependencies>
+				<dependency>
+					<groupId>org.cryptomator</groupId>
+					<artifactId>integrations-linux</artifactId>
+					<version>${cryptomator.integrations.linux.version}</version>
+				</dependency>
+			</dependencies>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-assembly-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>assemble-linux</id>
+								<phase>package</phase>
+								<goals>
+									<goal>single</goal>
+								</goals>
+								<configuration>
+									<descriptors>
+										<descriptor>assembly-linux.xml</descriptor>
+									</descriptors>
+									<appendAssemblyId>false</appendAssemblyId>
+									<finalName>buildkit-linux</finalName>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-dependency-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>copy-linux-libs</id>
+								<phase>prepare-package</phase>
+								<goals>
+									<goal>copy-dependencies</goal>
+								</goals>
+								<configuration>
+									<outputDirectory>${project.build.directory}/libs</outputDirectory>
+									<includeGroupIds>org.openjfx</includeGroupIds>
+									<classifier>linux</classifier>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+
+		<profile>
+			<id>windows</id>
+			<activation>
+				<os>
+					<family>windows</family>
+				</os>
+				<property>
+					<name>idea.version</name>
+				</property>
+			</activation>
+			<dependencies>
+				<dependency>
+					<groupId>org.cryptomator</groupId>
+					<artifactId>integrations-win</artifactId>
+					<version>${cryptomator.integrations.win.version}</version>
+				</dependency>
+			</dependencies>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-assembly-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>assemble-win</id>
+								<phase>package</phase>
+								<goals>
+									<goal>single</goal>
+								</goals>
+								<configuration>
+									<descriptors>
+										<descriptor>assembly-win.xml</descriptor>
+									</descriptors>
+									<appendAssemblyId>false</appendAssemblyId>
+									<finalName>buildkit-win</finalName>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-dependency-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>copy-win-libs</id>
+								<phase>prepare-package</phase>
+								<goals>
+									<goal>copy-dependencies</goal>
+								</goals>
+								<configuration>
+									<outputDirectory>${project.build.directory}/libs</outputDirectory>
+									<includeGroupIds>org.openjfx</includeGroupIds>
+									<classifier>win</classifier>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+
+</project>

main/ui/src/license/THIRD-PARTY.properties → src/license/THIRD-PARTY.properties


main/ui/src/license/template.ftl → src/license/template.ftl


+ 2 - 7
main/commons/src/main/java/org/cryptomator/common/CommonsModule.java

@@ -15,6 +15,7 @@ import org.cryptomator.common.settings.SettingsProvider;
 import org.cryptomator.common.vaults.Vault;
 import org.cryptomator.common.vaults.VaultComponent;
 import org.cryptomator.common.vaults.VaultListManager;
+import org.cryptomator.common.vaults.VaultListModule;
 import org.cryptomator.cryptolib.common.MasterkeyFileAccess;
 import org.cryptomator.frontend.webdav.WebDavServer;
 import org.slf4j.Logger;
@@ -37,7 +38,7 @@ import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
-@Module(subcomponents = {VaultComponent.class}, includes = {KeychainModule.class})
+@Module(subcomponents = {VaultComponent.class}, includes = {VaultListModule.class, KeychainModule.class})
 public abstract class CommonsModule {
 
 	private static final Logger LOG = LoggerFactory.getLogger(CommonsModule.class);
@@ -87,12 +88,6 @@ public abstract class CommonsModule {
 		return settingsProvider.get();
 	}
 
-	@Provides
-	@Singleton
-	static ObservableList<Vault> provideVaultList(VaultListManager vaultListManager) {
-		return vaultListManager.getVaultList();
-	}
-
 	@Provides
 	@Singleton
 	static ScheduledExecutorService provideScheduledExecutorService(ShutdownHook shutdownHook) {

main/commons/src/main/java/org/cryptomator/common/Constants.java → src/main/java/org/cryptomator/common/Constants.java


main/commons/src/main/java/org/cryptomator/common/ConsumerThrowingException.java → src/main/java/org/cryptomator/common/ConsumerThrowingException.java


main/commons/src/main/java/org/cryptomator/common/Environment.java → src/main/java/org/cryptomator/common/Environment.java


main/commons/src/main/java/org/cryptomator/common/LicenseChecker.java → src/main/java/org/cryptomator/common/LicenseChecker.java


main/commons/src/main/java/org/cryptomator/common/LicenseHolder.java → src/main/java/org/cryptomator/common/LicenseHolder.java


main/commons/src/main/java/org/cryptomator/common/RunnableThrowingException.java → src/main/java/org/cryptomator/common/RunnableThrowingException.java


main/commons/src/main/java/org/cryptomator/common/SemVerComparator.java → src/main/java/org/cryptomator/common/SemVerComparator.java


main/commons/src/main/java/org/cryptomator/common/ShutdownHook.java → src/main/java/org/cryptomator/common/ShutdownHook.java


main/commons/src/main/java/org/cryptomator/common/SupplierThrowingException.java → src/main/java/org/cryptomator/common/SupplierThrowingException.java


main/commons/src/main/java/org/cryptomator/common/keychain/KeychainManager.java → src/main/java/org/cryptomator/common/keychain/KeychainManager.java


main/commons/src/main/java/org/cryptomator/common/keychain/KeychainModule.java → src/main/java/org/cryptomator/common/keychain/KeychainModule.java


main/commons/src/main/java/org/cryptomator/common/keychain/NoKeychainAccessProviderException.java → src/main/java/org/cryptomator/common/keychain/NoKeychainAccessProviderException.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/AvailableDriveLetterChooser.java → src/main/java/org/cryptomator/common/mountpoint/AvailableDriveLetterChooser.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/CustomDriveLetterChooser.java → src/main/java/org/cryptomator/common/mountpoint/CustomDriveLetterChooser.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/CustomMountPointChooser.java → src/main/java/org/cryptomator/common/mountpoint/CustomMountPointChooser.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/InvalidMountPointException.java → src/main/java/org/cryptomator/common/mountpoint/InvalidMountPointException.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/MacVolumeMountChooser.java → src/main/java/org/cryptomator/common/mountpoint/MacVolumeMountChooser.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointChooser.java → src/main/java/org/cryptomator/common/mountpoint/MountPointChooser.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java → src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointHelper.java → src/main/java/org/cryptomator/common/mountpoint/MountPointHelper.java


main/commons/src/main/java/org/cryptomator/common/mountpoint/TemporaryMountPointChooser.java → src/main/java/org/cryptomator/common/mountpoint/TemporaryMountPointChooser.java


main/commons/src/main/java/org/cryptomator/common/settings/KeychainBackend.java → src/main/java/org/cryptomator/common/settings/KeychainBackend.java


main/commons/src/main/java/org/cryptomator/common/settings/Settings.java → src/main/java/org/cryptomator/common/settings/Settings.java


main/commons/src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java → src/main/java/org/cryptomator/common/settings/SettingsJsonAdapter.java


main/commons/src/main/java/org/cryptomator/common/settings/SettingsProvider.java → src/main/java/org/cryptomator/common/settings/SettingsProvider.java


main/commons/src/main/java/org/cryptomator/common/settings/UiTheme.java → src/main/java/org/cryptomator/common/settings/UiTheme.java


+ 13 - 2
main/commons/src/main/java/org/cryptomator/common/settings/VaultSettings.java

@@ -37,6 +37,8 @@ public class VaultSettings {
 	public static final String DEFAULT_MOUNT_FLAGS = "";
 	public static final int DEFAULT_MAX_CLEARTEXT_FILENAME_LENGTH = -1;
 	public static final WhenUnlocked DEFAULT_ACTION_AFTER_UNLOCK = WhenUnlocked.ASK;
+	public static final boolean DEFAULT_AUTOLOCK_WHEN_IDLE = false;
+	public static final int DEFAULT_AUTOLOCK_IDLE_SECONDS = 30 * 60;
 
 	private static final Random RNG = new Random();
 
@@ -52,7 +54,8 @@ public class VaultSettings {
 	private final StringProperty mountFlags = new SimpleStringProperty(DEFAULT_MOUNT_FLAGS);
 	private final IntegerProperty maxCleartextFilenameLength = new SimpleIntegerProperty(DEFAULT_MAX_CLEARTEXT_FILENAME_LENGTH);
 	private final ObjectProperty<WhenUnlocked> actionAfterUnlock = new SimpleObjectProperty<>(DEFAULT_ACTION_AFTER_UNLOCK);
-
+	private final BooleanProperty autoLockWhenIdle = new SimpleBooleanProperty(DEFAULT_AUTOLOCK_WHEN_IDLE);
+	private final IntegerProperty autoLockIdleSeconds = new SimpleIntegerProperty(DEFAULT_AUTOLOCK_IDLE_SECONDS);
 	private final StringBinding mountName;
 
 	public VaultSettings(String id) {
@@ -61,7 +64,7 @@ public class VaultSettings {
 	}
 
 	Observable[] observables() {
-		return new Observable[]{path, displayName, winDriveLetter, unlockAfterStartup, revealAfterMount, useCustomMountPath, customMountPath, usesReadOnlyMode, mountFlags, maxCleartextFilenameLength, actionAfterUnlock};
+		return new Observable[]{path, displayName, winDriveLetter, unlockAfterStartup, revealAfterMount, useCustomMountPath, customMountPath, usesReadOnlyMode, mountFlags, maxCleartextFilenameLength, actionAfterUnlock, autoLockWhenIdle, autoLockIdleSeconds};
 	}
 
 	public static VaultSettings withRandomId() {
@@ -162,6 +165,14 @@ public class VaultSettings {
 		return actionAfterUnlock.get();
 	}
 
+	public BooleanProperty autoLockWhenIdle() {
+		return autoLockWhenIdle;
+	}
+
+	public IntegerProperty autoLockIdleSeconds() {
+		return autoLockIdleSeconds;
+	}
+
 	/* Hashcode/Equals */
 
 	@Override

+ 8 - 0
main/commons/src/main/java/org/cryptomator/common/settings/VaultSettingsJsonAdapter.java

@@ -31,6 +31,8 @@ class VaultSettingsJsonAdapter {
 		out.name("mountFlags").value(value.mountFlags().get());
 		out.name("maxCleartextFilenameLength").value(value.maxCleartextFilenameLength().get());
 		out.name("actionAfterUnlock").value(value.actionAfterUnlock().get().name());
+		out.name("autoLockWhenIdle").value(value.autoLockWhenIdle().get());
+		out.name("autoLockIdleSeconds").value(value.autoLockIdleSeconds().get());
 		out.endObject();
 	}
 
@@ -48,6 +50,8 @@ class VaultSettingsJsonAdapter {
 		String mountFlags = VaultSettings.DEFAULT_MOUNT_FLAGS;
 		int maxCleartextFilenameLength = VaultSettings.DEFAULT_MAX_CLEARTEXT_FILENAME_LENGTH;
 		WhenUnlocked actionAfterUnlock = VaultSettings.DEFAULT_ACTION_AFTER_UNLOCK;
+		boolean autoLockWhenIdle = VaultSettings.DEFAULT_AUTOLOCK_WHEN_IDLE;
+		int autoLockIdleSeconds = VaultSettings.DEFAULT_AUTOLOCK_IDLE_SECONDS;
 
 		in.beginObject();
 		while (in.hasNext()) {
@@ -66,6 +70,8 @@ class VaultSettingsJsonAdapter {
 				case "mountFlags" -> mountFlags = in.nextString();
 				case "maxCleartextFilenameLength" -> maxCleartextFilenameLength = in.nextInt();
 				case "actionAfterUnlock" -> actionAfterUnlock = parseActionAfterUnlock(in.nextString());
+				case "autoLockWhenIdle" -> autoLockWhenIdle = in.nextBoolean();
+				case "autoLockIdleSeconds" -> autoLockIdleSeconds = in.nextInt();
 				default -> {
 					LOG.warn("Unsupported vault setting found in JSON: " + name);
 					in.skipValue();
@@ -90,6 +96,8 @@ class VaultSettingsJsonAdapter {
 		vaultSettings.mountFlags().set(mountFlags);
 		vaultSettings.maxCleartextFilenameLength().set(maxCleartextFilenameLength);
 		vaultSettings.actionAfterUnlock().set(actionAfterUnlock);
+		vaultSettings.autoLockWhenIdle().set(autoLockWhenIdle);
+		vaultSettings.autoLockIdleSeconds().set(autoLockIdleSeconds);
 		return vaultSettings;
 	}
 

main/commons/src/main/java/org/cryptomator/common/settings/VolumeImpl.java → src/main/java/org/cryptomator/common/settings/VolumeImpl.java


main/commons/src/main/java/org/cryptomator/common/settings/WebDavUrlScheme.java → src/main/java/org/cryptomator/common/settings/WebDavUrlScheme.java


main/commons/src/main/java/org/cryptomator/common/settings/WhenUnlocked.java → src/main/java/org/cryptomator/common/settings/WhenUnlocked.java


main/commons/src/main/java/org/cryptomator/common/vaults/AbstractVolume.java → src/main/java/org/cryptomator/common/vaults/AbstractVolume.java


+ 60 - 0
src/main/java/org/cryptomator/common/vaults/AutoLocker.java

@@ -0,0 +1,60 @@
+package org.cryptomator.common.vaults;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import javafx.collections.ObservableList;
+import java.time.Instant;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@Singleton
+public class AutoLocker {
+
+	private static final Logger LOG = LoggerFactory.getLogger(AutoLocker.class);
+
+	private final ScheduledExecutorService scheduler;
+	private final ObservableList<Vault> vaultList;
+
+	@Inject
+	public AutoLocker(ScheduledExecutorService scheduler, ObservableList<Vault> vaultList) {
+		this.scheduler = scheduler;
+		this.vaultList = vaultList;
+	}
+
+	public void init() {
+		scheduler.scheduleAtFixedRate(this::tick, 0, 1, TimeUnit.MINUTES);
+	}
+
+	private void tick() {
+		vaultList.stream() // all vaults
+				.filter(Vault::isUnlocked) // unlocked vaults
+				.filter(this::exceedsIdleTime) // idle vaults
+				.forEach(this::autolock);
+	}
+
+	private void autolock(Vault vault) {
+		try {
+			vault.lock(false);
+			LOG.info("Autolocked {} after idle timeout", vault.getDisplayName());
+		} catch (Volume.VolumeException | LockNotCompletedException e) {
+			LOG.error("Autolocking failed.", e);
+		}
+	}
+
+	private boolean exceedsIdleTime(Vault vault) {
+		assert vault.isUnlocked();
+		// TODO: shouldn't we read these properties from within FX Application Thread?
+		if (vault.getVaultSettings().autoLockWhenIdle().get()) {
+			int maxIdleSeconds = vault.getVaultSettings().autoLockIdleSeconds().get();
+			var deadline = vault.getStats().getLastActivity().plusSeconds(maxIdleSeconds);
+			return deadline.isBefore(Instant.now());
+		} else {
+			return false;
+		}
+	}
+
+
+}

main/commons/src/main/java/org/cryptomator/common/vaults/DefaultMountFlags.java → src/main/java/org/cryptomator/common/vaults/DefaultMountFlags.java


main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java → src/main/java/org/cryptomator/common/vaults/DokanyVolume.java


main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java → src/main/java/org/cryptomator/common/vaults/FuseVolume.java


main/commons/src/main/java/org/cryptomator/common/vaults/LockNotCompletedException.java → src/main/java/org/cryptomator/common/vaults/LockNotCompletedException.java


main/commons/src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java → src/main/java/org/cryptomator/common/vaults/MountPointRequirement.java


main/commons/src/main/java/org/cryptomator/common/vaults/PerVault.java → src/main/java/org/cryptomator/common/vaults/PerVault.java


main/commons/src/main/java/org/cryptomator/common/vaults/Vault.java → src/main/java/org/cryptomator/common/vaults/Vault.java


main/commons/src/main/java/org/cryptomator/common/vaults/VaultComponent.java → src/main/java/org/cryptomator/common/vaults/VaultComponent.java


main/commons/src/main/java/org/cryptomator/common/vaults/VaultListChangeListener.java → src/main/java/org/cryptomator/common/vaults/VaultListChangeListener.java


+ 5 - 6
main/commons/src/main/java/org/cryptomator/common/vaults/VaultListManager.java

@@ -37,22 +37,21 @@ public class VaultListManager {
 
 	private static final Logger LOG = LoggerFactory.getLogger(VaultListManager.class);
 
+	private final AutoLocker autoLocker;
 	private final VaultComponent.Builder vaultComponentBuilder;
 	private final ObservableList<Vault> vaultList;
 	private final String defaultVaultName;
 
 	@Inject
-	public VaultListManager(VaultComponent.Builder vaultComponentBuilder, ResourceBundle resourceBundle, Settings settings) {
+	public VaultListManager(ObservableList<Vault> vaultList, AutoLocker autoLocker, VaultComponent.Builder vaultComponentBuilder, ResourceBundle resourceBundle, Settings settings) {
+		this.vaultList = vaultList;
+		this.autoLocker = autoLocker;
 		this.vaultComponentBuilder = vaultComponentBuilder;
 		this.defaultVaultName = resourceBundle.getString("defaults.vault.vaultName");
-		this.vaultList = FXCollections.observableArrayList(Vault::observables);
 
 		addAll(settings.getDirectories());
 		vaultList.addListener(new VaultListChangeListener(settings.getDirectories()));
-	}
-
-	public ObservableList<Vault> getVaultList() {
-		return vaultList;
+		autoLocker.init();
 	}
 
 	public Vault add(Path pathToVault) throws IOException {

+ 19 - 0
src/main/java/org/cryptomator/common/vaults/VaultListModule.java

@@ -0,0 +1,19 @@
+package org.cryptomator.common.vaults;
+
+import dagger.Module;
+import dagger.Provides;
+
+import javax.inject.Singleton;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+@Module
+public class VaultListModule {
+
+	@Provides
+	@Singleton
+	public ObservableList<Vault> provideVaultList() {
+		return FXCollections.observableArrayList(Vault::observables);
+	}
+
+}

main/commons/src/main/java/org/cryptomator/common/vaults/VaultModule.java → src/main/java/org/cryptomator/common/vaults/VaultModule.java


main/commons/src/main/java/org/cryptomator/common/vaults/VaultState.java → src/main/java/org/cryptomator/common/vaults/VaultState.java


+ 21 - 1
main/commons/src/main/java/org/cryptomator/common/vaults/VaultStats.java

@@ -13,9 +13,11 @@ import javafx.beans.property.LongProperty;
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.SimpleDoubleProperty;
 import javafx.beans.property.SimpleLongProperty;
+import javafx.beans.property.SimpleObjectProperty;
 import javafx.concurrent.ScheduledService;
 import javafx.concurrent.Task;
 import javafx.util.Duration;
+import java.time.Instant;
 import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicReference;
@@ -39,6 +41,7 @@ public class VaultStats {
 	private final LongProperty totalBytesDecrypted = new SimpleLongProperty();
 	private final LongProperty filesRead = new SimpleLongProperty();
 	private final LongProperty filesWritten = new SimpleLongProperty();
+	private final ObjectProperty<Instant> lastActivity = new SimpleObjectProperty<>();
 
 	@Inject
 	VaultStats(AtomicReference<CryptoFileSystem> fs, VaultState state, ExecutorService executor) {
@@ -55,7 +58,10 @@ public class VaultStats {
 		if (VaultState.Value.UNLOCKED == state.get()) {
 			assert fs.get() != null;
 			LOG.debug("start recording stats");
-			Platform.runLater(() -> updateService.restart());
+			Platform.runLater(() -> {
+				lastActivity.set(Instant.now());
+				updateService.restart();
+			});
 		} else {
 			LOG.debug("stop recording stats");
 			Platform.runLater(() -> updateService.cancel());
@@ -73,9 +79,15 @@ public class VaultStats {
 		toalBytesWritten.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();
 		filesRead.set(stats.map(CryptoFileSystemStats::pollAmountOfAccessesRead).orElse(0L));
 		filesWritten.set(stats.map(CryptoFileSystemStats::pollAmountOfAccessesWritten).orElse(0L));
+		var newAccessCount = filesRead.get() + filesWritten.get();
 
+		// check for any I/O activity
+		if (newAccessCount > oldAccessCount) {
+			lastActivity.set(Instant.now());
+		}
 	}
 
 	private double getCacheHitRate(CryptoFileSystemStats stats) {
@@ -175,4 +187,12 @@ public class VaultStats {
 	public LongProperty filesWritten() {return filesWritten;}
 
 	public long getFilesWritten() {return filesWritten.get();}
+
+	public ObjectProperty<Instant> lastActivityProperty() {
+		return lastActivity;
+	}
+
+	public Instant getLastActivity() {
+		return lastActivity.get();
+	}
 }

main/commons/src/main/java/org/cryptomator/common/vaults/Volume.java → src/main/java/org/cryptomator/common/vaults/Volume.java


main/commons/src/main/java/org/cryptomator/common/vaults/WebDavVolume.java → src/main/java/org/cryptomator/common/vaults/WebDavVolume.java


main/commons/src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java → src/main/java/org/cryptomator/common/vaults/WindowsDriveLetters.java


main/launcher/src/main/java/org/cryptomator/launcher/Cryptomator.java → src/main/java/org/cryptomator/launcher/Cryptomator.java


main/launcher/src/main/java/org/cryptomator/launcher/CryptomatorComponent.java → src/main/java/org/cryptomator/launcher/CryptomatorComponent.java


main/launcher/src/main/java/org/cryptomator/launcher/CryptomatorModule.java → src/main/java/org/cryptomator/launcher/CryptomatorModule.java


main/launcher/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java → src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java


main/launcher/src/main/java/org/cryptomator/launcher/IpcFactory.java → src/main/java/org/cryptomator/launcher/IpcFactory.java


main/launcher/src/main/java/org/cryptomator/launcher/IpcProtocol.java → src/main/java/org/cryptomator/launcher/IpcProtocol.java


main/launcher/src/main/java/org/cryptomator/launcher/IpcProtocolImpl.java → src/main/java/org/cryptomator/launcher/IpcProtocolImpl.java


main/launcher/src/main/java/org/cryptomator/logging/DebugMode.java → src/main/java/org/cryptomator/logging/DebugMode.java


main/launcher/src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java → src/main/java/org/cryptomator/logging/LaunchAndSizeBasedTriggerinPolicy.java


main/launcher/src/main/java/org/cryptomator/logging/LaunchBasedTriggeringPolicy.java → src/main/java/org/cryptomator/logging/LaunchBasedTriggeringPolicy.java


main/launcher/src/main/java/org/cryptomator/logging/LoggerConfiguration.java → src/main/java/org/cryptomator/logging/LoggerConfiguration.java


main/launcher/src/main/java/org/cryptomator/logging/LoggerModule.java → src/main/java/org/cryptomator/logging/LoggerModule.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java → src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultSuccessController.java → src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultSuccessController.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWelcomeController.java → src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWelcomeController.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardComponent.java → src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardComponent.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardScoped.java → src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardScoped.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardWindow.java → src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultWizardWindow.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java → src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java → src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultLocationController.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultNameController.java → src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultNameController.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java → src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultPasswordController.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultRecoveryKeyController.java → src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultRecoveryKeyController.java


main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/LocationPresets.java → src/main/java/org/cryptomator/ui/addvaultwizard/LocationPresets.java


+ 0 - 0
main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/ReadmeGenerator.java


Некоторые файлы не были показаны из-за большого количества измененных файлов