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 7a807060..7ff6cb17 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,8 +6,6 @@ import org.cryptomator.domain.repository.VaultRepository; import org.cryptomator.generator.Parameter; import org.cryptomator.generator.UseCase; -import java.util.List; - @UseCase class DeleteVault { @@ -20,12 +18,7 @@ class DeleteVault { } public Long execute() throws BackendException { - Long vaultId = vaultRepository.delete(vault); - - List reorderVaults = MoveVaultHelper.Companion.reorderVaults(vaultRepository); - MoveVaultHelper.Companion.updateVaultsInDatabase(reorderVaults, vaultRepository); - - return vaultId; + return vaultRepository.delete(vault); } } diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/vault/DeleteVaults.java b/domain/src/main/java/org/cryptomator/domain/usecases/vault/DeleteVaults.java new file mode 100644 index 00000000..3ad3738c --- /dev/null +++ b/domain/src/main/java/org/cryptomator/domain/usecases/vault/DeleteVaults.java @@ -0,0 +1,30 @@ +package org.cryptomator.domain.usecases.vault; + +import org.cryptomator.domain.Vault; +import org.cryptomator.domain.exception.BackendException; +import org.cryptomator.domain.repository.VaultRepository; +import org.cryptomator.generator.Parameter; +import org.cryptomator.generator.UseCase; + +import java.util.ArrayList; +import java.util.List; + +@UseCase +class DeleteVaults { + + private final VaultRepository vaultRepository; + private final List vaults; + + public DeleteVaults(VaultRepository vaultRepository, @Parameter List vaults) { + this.vaultRepository = vaultRepository; + this.vaults = vaults; + } + + public List execute() throws BackendException { + List ids = new ArrayList<>(); + for (Vault vault : vaults) { + ids.add(vaultRepository.delete(vault)); + } + return ids; + } +} 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 1495e19c..3e5977e6 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 @@ -3,7 +3,6 @@ package org.cryptomator.domain.usecases.vault; import org.cryptomator.domain.Vault import org.cryptomator.domain.repository.VaultRepository import java.util.Collections -import java.util.Comparator class MoveVaultHelper { @@ -40,7 +39,9 @@ class MoveVaultHelper { } fun updateVaultsInDatabase(vaults: List, vaultRepository: VaultRepository): List { - vaults.forEach { vault -> vaultRepository.store(vault) } + for(vault in vaults) { + vaultRepository.store(vault) + } return vaultRepository.vaults() } } diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/CloudConnectionListPresenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/CloudConnectionListPresenter.kt index 1beb659f..bc7c5df8 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/CloudConnectionListPresenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/CloudConnectionListPresenter.kt @@ -21,7 +21,7 @@ import org.cryptomator.domain.usecases.cloud.AddOrChangeCloudConnectionUseCase import org.cryptomator.domain.usecases.cloud.GetCloudsUseCase import org.cryptomator.domain.usecases.cloud.GetUsernameUseCase import org.cryptomator.domain.usecases.cloud.RemoveCloudUseCase -import org.cryptomator.domain.usecases.vault.DeleteVaultUseCase +import org.cryptomator.domain.usecases.vault.DeleteVaultsUseCase import org.cryptomator.domain.usecases.vault.GetVaultListUseCase import org.cryptomator.generator.Callback import org.cryptomator.presentation.R @@ -48,7 +48,7 @@ class CloudConnectionListPresenter @Inject constructor( // private val removeCloudUseCase: RemoveCloudUseCase, // private val addOrChangeCloudConnectionUseCase: AddOrChangeCloudConnectionUseCase, // private val getVaultListUseCase: GetVaultListUseCase, // - private val deleteVaultUseCase: DeleteVaultUseCase, // + private val deleteVaultsUseCase: DeleteVaultsUseCase, // private val cloudModelMapper: CloudModelMapper, // exceptionMappings: ExceptionHandlers ) : Presenter(exceptionMappings) { @@ -97,14 +97,21 @@ class CloudConnectionListPresenter @Inject constructor( // } fun onDeleteCloudConnectionAndVaults(cloudModel: CloudModel, vaultsOfCloud: ArrayList) { - vaultsOfCloud.forEach { vault -> - deleteVault(vault) - } - deleteCloud(cloudModel) - } + if (vaultsOfCloud.isEmpty()) { + deleteCloud(cloudModel) + } else { + deleteVaultsUseCase + .withVaults(vaultsOfCloud) + .run(object : DefaultResultHandler>() { + override fun onFinished() { + deleteCloud(cloudModel) + } - private fun deleteVault(vault: Vault) { - deleteVaultUseCase.withVault(vault).run(DefaultResultHandler()) + override fun onError(e: Throwable) { + Timber.tag("CloudConnectionListPresenter").e(e, "Failed to remove all vaults") + } + }) + } } private fun deleteCloud(cloudModel: CloudModel) { @@ -345,6 +352,6 @@ class CloudConnectionListPresenter @Inject constructor( // } init { - unsubscribeOnDestroy(getCloudsUseCase, removeCloudUseCase, addOrChangeCloudConnectionUseCase, getVaultListUseCase, deleteVaultUseCase) + unsubscribeOnDestroy(getCloudsUseCase, removeCloudUseCase, addOrChangeCloudConnectionUseCase, getVaultListUseCase, deleteVaultsUseCase) } }