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/foss/java/org/cryptomator/presentation/presenter/AuthenticateCloudPresenter.kt b/presentation/src/foss/java/org/cryptomator/presentation/presenter/AuthenticateCloudPresenter.kt index 564192ed..a7871af4 100644 --- a/presentation/src/foss/java/org/cryptomator/presentation/presenter/AuthenticateCloudPresenter.kt +++ b/presentation/src/foss/java/org/cryptomator/presentation/presenter/AuthenticateCloudPresenter.kt @@ -233,6 +233,8 @@ class AuthenticateCloudPresenter @Inject constructor( // private fun startAuthentication(cloud: CloudModel) { authenticationStarted = true + Toast.makeText(context(), R.string.notification_authenticating, Toast.LENGTH_SHORT).show() + PublicClientApplication.createMultipleAccountPublicClientApplication( context(), R.raw.auth_config_onedrive, 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 23890000..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) { @@ -93,18 +93,25 @@ class CloudConnectionListPresenter @Inject constructor( // } private fun vaultsFor(cloudModel: CloudModel, allVaults: List): ArrayList { - return allVaults.filterTo(ArrayList()) { it.cloud.type() == cloudModel.toCloud().type() } + return allVaults.filterTo(ArrayList()) { it.cloud.id() == cloudModel.toCloud().id() } } 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) } } diff --git a/presentation/src/main/res/values-bn-rBD/strings.xml b/presentation/src/main/res/values-bn-rBD/strings.xml index e2a57558..0a49197f 100644 --- a/presentation/src/main/res/values-bn-rBD/strings.xml +++ b/presentation/src/main/res/values-bn-rBD/strings.xml @@ -119,13 +119,20 @@ পাসওয়ার্ড খালি থাকতে পারবে না। নাম প্রদর্শন করুন + বিদ্যমান বাকেট + এন্ডপয়েন্ট + অঞ্চল নাম খালি হতে পারব না + ভোল্ট এর নাম + তৈরি করুন পাসওয়ার্ড সেট করুন পাসওয়ার্ড মেলেনা, আবার লিখুন। সম্পন্ন হয়েছে + সতর্কতা: আপনি যদি আপনার পাসওয়ার্ড ভুলে যান, তাহলে পাসওয়ার্ডটি পুনরুদ্ধার করার কোনো উপায় থাকবে না। পুনরায় পাসওয়ার্ডটি লিখুন + ভোল্টটি তৈরির জন্য পাসওয়ার্ডটি অত্যন্ত দুর্বল দুর্বল ভালো শক্তিশালী @@ -135,15 +142,70 @@ ক্লাউড পরিষেবাসমূহ বায়োমেট্রিক সনাক্তকরণ বায়োমেট্রিক সনাক্তকরণ সক্রিয় করুন + ফেইস আনলক নিশ্চিত করুন (যদি থাকে) + অন্যান্য আ্যপকে ক্রিপ্টোমেটর ব্যবহারে বাধা দিন স্ক্রিনশট নিতে বাধা দিন খুঁজুন + যখন স্ক্রিন বন্ধ থাকে + স্বয়ংক্রিয় ছবি আপলোড + আপলোডের জন্য ভোল্ট নির্বাচন করুন + সক্রিয় করুন + ব্যাকগ্রাউন্ডে ছবি তুলুন এবং যখন নির্বাচিত ভোল্টটি আনলক করা হবে, আপলোড করুন + ভোল্ট আনলোক থাকলে সরাসরি আপলোড করুন + শুধু WiFi ব্যবহার করে আপলোড করুন + ভিডিও আপলোড করুন + … তে অটো আপলোড ফাইলগুলি সংরক্ষণ করুন + ক্রিপ্টোমেটরের ওয়েবসাইট + টুইটারে আমাদের অনুসরণ করুন + ফেসবুকে আমাদের লাইক দিন + আইনি + লাইসেন্স + লাইসেন্স এর শর্তাবলি + সহায়তা + সাহায্য জিজ্ঞাসা + ডিবাগ মোড + লগ ফাইলটি পাঠান + পাঠাতে ব্যর্থ হয়েছে + সংস্করণ + অ্যাডভান্স সেটিংস + আনলক রাখুন + ফাইল সম্পাদনার সময় ভোল্ট আনলক রাখুন + OneDrive সংযোগ + WebDAV সংযোগ + pCloud সংযোগ + S3 সংযোগ + লোকাল স্টোরেজ এর ঠিকানা + লগ ইন + সাইন আউট + বাতিল করুন + আনলক করুন + পুরাতন পাসওয়ার্ড + নতুন পাসওয়ার্ড + পাসওয়ার্ড পরিবর্তন করুন + পুরনো পাসওয়ার্ড অংশ খালি থাকতে পারবে না। + নতুন পাসওয়ার্ড অংশ খালি থাকতে পারবে না। + নতুন পাসওয়ার্ডটি পুনরায় টাইপ করা পাসওয়ার্ডের সাথে মেলে না। + %1$s ভোল্টটি পাওয়া যায়নি + ভোল্টটির হয়তো নাম পরিবর্তন, স্থানান্তর বা মুছে ফেলা হয়েছে। তালিকা থেকে ভোল্টটি সরান এবং চালিয়ে যেতে পুনরায় যোগ করুন। ভোল্টটি সরাবেন? বাতিল + ফাইলটি ইতিমধ্যে রয়েছে + প্রতিস্থাপন করুন + %1$s নামে একটি ফাইল ইতিমধ্যে রয়েছে. + বিদ্যমান ফাইলটি এড়িয়ে যান + সবগুলো প্রতিস্থাপন করুন + বিদ্যমানটি প্রতিস্থাপন করুন + প্রতিস্থাপন করুন + %1$s নামে একটি ফাইল ইতিমধ্যে রয়েছে। আপনি কি এটা প্রতিস্থাপন করতে চান? + সব ফাইলগুলি ইতিমধ্যে রয়েছে। আপনি কি তাদের প্রতিস্থাপন করতে চান? + লক করুন + বন্ধ করুন + পিছনে