From 14eea20df2436d3abbe7e3d78abbc9a786825f7c Mon Sep 17 00:00:00 2001 From: uburoiubu Date: Thu, 7 Mar 2024 14:53:23 +0100 Subject: [PATCH] =?UTF-8?q?DROID-2261=20Multiplayer=20|=20Enhancement=20|?= =?UTF-8?q?=20UX=20for=20stopping=20sharing=20space=20=E2=80=94=20Hotfix?= =?UTF-8?q?=20(#985)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../di/feature/multiplayer/ShareSpaceInject.kt | 2 ++ .../anytype/domain/auth/interactor/GetAccount.kt | 3 ++- .../presentation/multiplayer/ShareSpaceViewModel.kt | 13 +++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/multiplayer/ShareSpaceInject.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/multiplayer/ShareSpaceInject.kt index 0de6e59bbb..85481bf6b3 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/multiplayer/ShareSpaceInject.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/multiplayer/ShareSpaceInject.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModelProvider import com.anytypeio.anytype.core_utils.di.scope.PerDialog import com.anytypeio.anytype.core_utils.di.scope.PerScreen import com.anytypeio.anytype.di.common.ComponentDependencies +import com.anytypeio.anytype.domain.auth.repo.AuthRepository import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.block.repo.BlockRepository import com.anytypeio.anytype.domain.config.ConfigStorage @@ -49,6 +50,7 @@ object ShareSpaceModule { interface ShareSpaceDependencies : ComponentDependencies { fun blockRepository(): BlockRepository + fun auth() : AuthRepository fun urlBuilder(): UrlBuilder fun spaceManager(): SpaceManager fun dispatchers(): AppCoroutineDispatchers diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/auth/interactor/GetAccount.kt b/domain/src/main/java/com/anytypeio/anytype/domain/auth/interactor/GetAccount.kt index f6ed9a51a1..aa0a427a80 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/auth/interactor/GetAccount.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/auth/interactor/GetAccount.kt @@ -4,8 +4,9 @@ import com.anytypeio.anytype.core_models.Account import com.anytypeio.anytype.domain.auth.repo.AuthRepository import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.base.ResultInteractor +import javax.inject.Inject -class GetAccount( +class GetAccount @Inject constructor( private val repo: AuthRepository, dispatcher: AppCoroutineDispatchers ) : ResultInteractor(dispatcher.io) { diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt index 80e4b70663..e6d010beaf 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt @@ -7,8 +7,10 @@ import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.multiplayer.ParticipantStatus import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions +import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions.OWNER import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.core_utils.ext.msg +import com.anytypeio.anytype.domain.auth.interactor.GetAccount import com.anytypeio.anytype.domain.base.fold import com.anytypeio.anytype.domain.config.ConfigStorage import com.anytypeio.anytype.domain.library.StoreSearchParams @@ -36,7 +38,7 @@ class ShareSpaceViewModel( private val changeSpaceMemberPermissions: ChangeSpaceMemberPermissions, private val stopSharingSpace: StopSharingSpace, private val container: StorelessSubscriptionContainer, - private val configStorage: ConfigStorage, + private val getAccount: GetAccount, private val urlBuilder: UrlBuilder ) : BaseViewModel() { @@ -69,10 +71,12 @@ class ShareSpaceViewModel( ) } }.onEach { results -> + val account = getAccount.async(Unit).getOrNull()?.id canStopSharing.value = results.any { result -> val member = result.obj - member.identity == configStorage.getOrNull()?.profile - && member.permissions == SpaceMemberPermissions.OWNER + member.identity == account && member.permissions == OWNER + }.also { isOwnerFound -> + if (!isOwnerFound) Timber.w("Owner not found") } }.collect { members.value = it @@ -252,6 +256,7 @@ class ShareSpaceViewModel( private val generateSpaceInviteLink: GenerateSpaceInviteLink, private val changeSpaceMemberPermissions: ChangeSpaceMemberPermissions, private val stopSharingSpace: StopSharingSpace, + private val getAccount: GetAccount, private val removeSpaceMembers: RemoveSpaceMembers, private val configStorage: ConfigStorage, private val container: StorelessSubscriptionContainer, @@ -266,7 +271,7 @@ class ShareSpaceViewModel( stopSharingSpace = stopSharingSpace, container = container, urlBuilder = urlBuilder, - configStorage = configStorage + getAccount = getAccount ) as T }