diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/vault/CreateVault.java b/domain/src/main/java/org/cryptomator/domain/usecases/vault/CreateVault.java index 9b73b5f2..ee61b6a9 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/vault/CreateVault.java +++ b/domain/src/main/java/org/cryptomator/domain/usecases/vault/CreateVault.java @@ -35,7 +35,10 @@ class CreateVault { CloudFolder vaultFolder = cloudContentRepository.folder(folder, vaultName); vaultFolder = cloudContentRepository.create(vaultFolder); cloudRepository.create(vaultFolder, password); - return vaultRepository.store(aVault().thatIsNew().withNamePathAndCloudFrom(vaultFolder).build()); + return vaultRepository.store(aVault() // + .thatIsNew() // + .withNamePathAndCloudFrom(vaultFolder) // + .withPosition(vaultRepository.vaults().size() + 1) // + .build()); } - } diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/vault/DeleteVault.java b/domain/src/main/java/org/cryptomator/domain/usecases/vault/DeleteVault.java index 7ff6cb17..7a807060 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/vault/DeleteVault.java +++ b/domain/src/main/java/org/cryptomator/domain/usecases/vault/DeleteVault.java @@ -6,6 +6,8 @@ import org.cryptomator.domain.repository.VaultRepository; import org.cryptomator.generator.Parameter; import org.cryptomator.generator.UseCase; +import java.util.List; + @UseCase class DeleteVault { @@ -18,7 +20,12 @@ class DeleteVault { } public Long execute() throws BackendException { - return vaultRepository.delete(vault); + Long vaultId = vaultRepository.delete(vault); + + List reorderVaults = MoveVaultHelper.Companion.reorderVaults(vaultRepository); + MoveVaultHelper.Companion.updateVaultsInDatabase(reorderVaults, vaultRepository); + + return vaultId; } } diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/vault/MoveVaultHelper.kt b/domain/src/main/java/org/cryptomator/domain/usecases/vault/MoveVaultHelper.kt index b405550d..40985b64 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/vault/MoveVaultHelper.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/vault/MoveVaultHelper.kt @@ -29,6 +29,19 @@ class MoveVaultHelper { return vaults } + private fun reorderVaults(vaults: MutableList) : List { + for (i in 0 until vaults.size) { + vaults[i] = Vault.aCopyOf(vaults[i]).withPosition(i + 1).build() + } + return vaults; + } + + fun reorderVaults(vaultRepository: VaultRepository) : List { + val vaults = vaultRepository.vaults() + vaults.sortWith(VaultComparator()) + return reorderVaults(vaults) + } + fun updateVaultsInDatabase(vaults: List, vaultRepository: VaultRepository): List { vaults.forEach { vault -> vaultRepository.store(vault) } return vaultRepository.vaults() diff --git a/presentation/src/main/java/org/cryptomator/presentation/workflow/AddExistingVaultWorkflow.java b/presentation/src/main/java/org/cryptomator/presentation/workflow/AddExistingVaultWorkflow.java index 1ec41190..937e07ae 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/workflow/AddExistingVaultWorkflow.java +++ b/presentation/src/main/java/org/cryptomator/presentation/workflow/AddExistingVaultWorkflow.java @@ -7,6 +7,7 @@ import org.cryptomator.domain.CloudFolder; import org.cryptomator.domain.Vault; import org.cryptomator.domain.di.PerView; import org.cryptomator.domain.usecases.cloud.GetRootFolderUseCase; +import org.cryptomator.domain.usecases.vault.GetVaultListUseCase; import org.cryptomator.domain.usecases.vault.SaveVaultUseCase; import org.cryptomator.generator.Callback; import org.cryptomator.presentation.R; @@ -18,6 +19,7 @@ import org.cryptomator.presentation.model.mappers.CloudModelMapper; import org.cryptomator.presentation.presenter.VaultListPresenter; import java.io.Serializable; +import java.util.List; import javax.inject.Inject; @@ -30,6 +32,7 @@ import static org.cryptomator.presentation.intent.Intents.chooseCloudServiceInte public class AddExistingVaultWorkflow extends Workflow { private final SaveVaultUseCase saveVaultUseCase; + private final GetVaultListUseCase getVaultListUseCase; private final GetRootFolderUseCase getRootFolderUseCase; private final CloudModelMapper cloudModelMapper; private final AuthenticationExceptionHandler authenticationExceptionHandler; @@ -38,13 +41,15 @@ public class AddExistingVaultWorkflow extends Workflow() { - @Override - public void onSuccess(Vault vault) { - ((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault); - } - }); + getVaultListUseCase.run(presenter().new ProgressCompletingResultHandler>() { + @Override + public void onSuccess(List vaults) { + saveVaultUseCase// + .withVault(aVault() // + .withNamePathAndCloudFrom(state().masterkeyFile.getParent()) // + .withPosition(vaults.size() + 1) // + .thatIsNew() // + .build()) // + .run(presenter().new ProgressCompletingResultHandler() { + @Override + public void onSuccess(Vault vault) { + ((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault); + } + }); + } + }); } public static class State implements Serializable {