#168 set vault position while creating, adding and deleting vaults

This commit is contained in:
Julian Raufelder 2021-02-04 23:34:48 +01:00
parent 2ef3824b79
commit 9b63b7c525
No known key found for this signature in database
GPG Key ID: 17EE71F6634E381D
4 changed files with 49 additions and 15 deletions

View File

@ -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());
}
}

View File

@ -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<Vault> reorderVaults = MoveVaultHelper.Companion.reorderVaults(vaultRepository);
MoveVaultHelper.Companion.updateVaultsInDatabase(reorderVaults, vaultRepository);
return vaultId;
}
}

View File

@ -29,6 +29,19 @@ class MoveVaultHelper {
return vaults
}
private fun reorderVaults(vaults: MutableList<Vault>) : List<Vault> {
for (i in 0 until vaults.size) {
vaults[i] = Vault.aCopyOf(vaults[i]).withPosition(i + 1).build()
}
return vaults;
}
fun reorderVaults(vaultRepository: VaultRepository) : List<Vault> {
val vaults = vaultRepository.vaults()
vaults.sortWith(VaultComparator())
return reorderVaults(vaults)
}
fun updateVaultsInDatabase(vaults: List<Vault>, vaultRepository: VaultRepository): List<Vault> {
vaults.forEach { vault -> vaultRepository.store(vault) }
return vaultRepository.vaults()

View File

@ -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<AddExistingVaultWorkflow.State> {
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<AddExistingVaultWorkflow.
@Inject
public AddExistingVaultWorkflow( //
Context context, //
SaveVaultUseCase saveVaultUseCase, //
SaveVaultUseCase saveVaultUseCase,
GetVaultListUseCase getVaultListUseCase, //
GetRootFolderUseCase getRootFolderUseCase, //
CloudModelMapper cloudModelMapper, //
AuthenticationExceptionHandler authenticationExceptionHandler) {
super(new State());
this.context = context;
this.saveVaultUseCase = saveVaultUseCase;
this.getVaultListUseCase = getVaultListUseCase;
this.getRootFolderUseCase = getRootFolderUseCase;
this.cloudModelMapper = cloudModelMapper;
this.authenticationExceptionHandler = authenticationExceptionHandler;
@ -117,17 +122,23 @@ public class AddExistingVaultWorkflow extends Workflow<AddExistingVaultWorkflow.
@Override
void completed() {
presenter().getView().showProgress(ProgressModel.GENERIC);
saveVaultUseCase//
.withVault(aVault() //
.withNamePathAndCloudFrom(state().masterkeyFile.getParent()) //
.thatIsNew() //
.build()) //
.run(presenter().new ProgressCompletingResultHandler<Vault>() {
@Override
public void onSuccess(Vault vault) {
((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault);
}
});
getVaultListUseCase.run(presenter().new ProgressCompletingResultHandler<List<Vault>>() {
@Override
public void onSuccess(List<Vault> vaults) {
saveVaultUseCase//
.withVault(aVault() //
.withNamePathAndCloudFrom(state().masterkeyFile.getParent()) //
.withPosition(vaults.size() + 1) //
.thatIsNew() //
.build()) //
.run(presenter().new ProgressCompletingResultHandler<Vault>() {
@Override
public void onSuccess(Vault vault) {
((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault);
}
});
}
});
}
public static class State implements Serializable {