diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/sets/dv/TestObjectSetSetup.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/sets/dv/TestObjectSetSetup.kt index 4d4e9a6676..febd9daded 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/sets/dv/TestObjectSetSetup.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/sets/dv/TestObjectSetSetup.kt @@ -332,7 +332,7 @@ abstract class TestObjectSetSetup { relations: List = emptyList() ) { repo.stub { - onBlocking { openObjectSet(ctx) } doReturn Result.Success( + onBlocking { openObjectSet(ctx, SpaceId(defaultSpace)) } doReturn Result.Success( Payload( context = ctx, events = listOf( @@ -355,7 +355,7 @@ abstract class TestObjectSetSetup { relations: List = emptyList() ) { repo.stub { - onBlocking { openObjectSet(ctx) } doReturn Result.Success( + onBlocking { openObjectSet(ctx, SpaceId(defaultSpace)) } doReturn Result.Success( Payload( context = ctx, events = listOf( diff --git a/app/src/main/java/com/anytypeio/anytype/ui/templates/TemplateFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/templates/TemplateFragment.kt index 804b2391f8..7d3db07f57 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/templates/TemplateFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/templates/TemplateFragment.kt @@ -12,10 +12,12 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Url +import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.core_ui.features.editor.BlockAdapter import com.anytypeio.anytype.core_ui.features.editor.DragAndDropAdapterDelegate import com.anytypeio.anytype.core_ui.tools.ClipboardInterceptor import com.anytypeio.anytype.core_utils.ext.arg +import com.anytypeio.anytype.core_utils.ext.argOrNull import com.anytypeio.anytype.core_utils.ext.subscribe import com.anytypeio.anytype.core_utils.ui.BaseFragment import com.anytypeio.anytype.databinding.FragmentTemplateBinding @@ -27,7 +29,8 @@ import javax.inject.Inject class TemplateFragment : BaseFragment(R.layout.fragment_template), ClipboardInterceptor, View.OnDragListener { - private val ctx: String get() = arg(CTX_KEY) + private val ctx: Id get() = arg(CTX_KEY) + private val space: Id get() = arg(SPACE_KEY) @Inject lateinit var factory: TemplateViewModel.Factory @@ -80,7 +83,7 @@ class TemplateFragment : BaseFragment(R.layout.fragment override fun onStart() { super.onStart() - vm.onStart(ctx) + vm.onStart(ctx = ctx, space = SpaceId(space)) } override fun onResume() { @@ -110,10 +113,14 @@ class TemplateFragment : BaseFragment(R.layout.fragment override fun onDrag(v: View?, event: DragEvent?) = false companion object { - fun new(ctx: Id) = TemplateFragment().apply { - arguments = bundleOf(CTX_KEY to ctx) + fun new(ctx: Id, space: SpaceId) = TemplateFragment().apply { + arguments = bundleOf( + CTX_KEY to ctx, + SPACE_KEY to space.id + ) } - const val CTX_KEY = "arg.template.ctx" + private const val CTX_KEY = "arg.template.ctx" + private const val SPACE_KEY = "arg.template.space" } } \ No newline at end of file diff --git a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockDataRepository.kt b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockDataRepository.kt index f27108f7b5..41754022ba 100644 --- a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockDataRepository.kt +++ b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockDataRepository.kt @@ -36,6 +36,7 @@ import com.anytypeio.anytype.core_models.membership.MembershipTierData import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteLink import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteView import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions +import com.anytypeio.anytype.core_models.primitives.Space import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.data.auth.exception.AnytypeNeedsUpgradeException import com.anytypeio.anytype.data.auth.exception.NotFoundObjectException @@ -55,40 +56,41 @@ class BlockDataRepository( private val logger: Logger ) : BlockRepository { - override suspend fun openObject(id: Id): ObjectView = remote.openObject(id = id) - override suspend fun getObject(id: Id): ObjectView = remote.getObject(id = id) + override suspend fun openObject(id: Id, space: SpaceId): ObjectView = remote.openObject(id = id, space = space) + override suspend fun getObject(id: Id, space: SpaceId): ObjectView = remote.getObject(id = id, space = space) - override suspend fun openObjectPreview(id: Id): Result = try { - Result.Success(remote.openObjectPreview(id)) + override suspend fun openObjectPreview(id: Id, space: SpaceId): Result = try { + Result.Success(remote.openObjectPreview(id = id, space = space)) } catch (e: AnytypeNeedsUpgradeException) { Result.Failure(Error.BackwardCompatibility) } catch (e: NotFoundObjectException) { Result.Failure(Error.NotFoundObject) } - override suspend fun openPage(id: String): Result = try { - Result.Success(remote.openPage(id)) + override suspend fun openPage(id: String, space: SpaceId): Result = try { + Result.Success( + remote.openPage( + id = id, + space = space + ) + ) } catch (e: AnytypeNeedsUpgradeException) { Result.Failure(Error.BackwardCompatibility) } catch (e: NotFoundObjectException) { Result.Failure(Error.NotFoundObject) } - override suspend fun openProfile(id: String): Payload = - remote.openProfile(id) + override suspend fun openProfile(id: String, space: SpaceId): Payload = + remote.openProfile(id = id, space = space) - override suspend fun openObjectSet(id: String): Result = try { - Result.Success(remote.openObjectSet(id)) + override suspend fun openObjectSet(id: String, space: SpaceId): Result = try { + Result.Success(remote.openObjectSet(id = id, space = space)) } catch (e: AnytypeNeedsUpgradeException) { Result.Failure(Error.BackwardCompatibility) } catch (e: NotFoundObjectException) { Result.Failure(Error.NotFoundObject) } - override suspend fun closeDashboard(id: String) { - remote.closeDashboard(id) - } - override suspend fun updateAlignment( command: Command.UpdateAlignment ): Payload = remote.updateAlignment(command) @@ -103,8 +105,8 @@ class BlockDataRepository( command: Command.CreateBlockLinkWithObject ): CreateBlockLinkWithObjectResult = remote.createBlockLinkWithObject(command) - override suspend fun closePage(id: String) { - remote.closePage(id) + override suspend fun closePage(id: String, space: Space) { + remote.closePage(id = id, space = space) } override suspend fun updateDocumentTitle( diff --git a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockRemote.kt b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockRemote.kt index abad4b7756..b3b4915453 100644 --- a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockRemote.kt +++ b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/block/BlockRemote.kt @@ -36,6 +36,7 @@ import com.anytypeio.anytype.core_models.membership.MembershipTierData import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteLink import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteView import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions +import com.anytypeio.anytype.core_models.primitives.Space import com.anytypeio.anytype.core_models.primitives.SpaceId interface BlockRemote { @@ -64,15 +65,14 @@ interface BlockRemote { command: Command.CreateBlockLinkWithObject ): CreateBlockLinkWithObjectResult - suspend fun openObject(id: Id): ObjectView - suspend fun getObject(id: Id): ObjectView + suspend fun openObject(id: Id, space: SpaceId): ObjectView + suspend fun getObject(id: Id, space: SpaceId): ObjectView - suspend fun openPage(id: String): Payload - suspend fun openProfile(id: String): Payload - suspend fun openObjectSet(id: String): Payload - suspend fun openObjectPreview(id: Id): Payload - suspend fun closePage(id: String) - suspend fun closeDashboard(id: String) + suspend fun openPage(id: String, space: SpaceId): Payload + suspend fun openProfile(id: String, space: SpaceId): Payload + suspend fun openObjectSet(id: String, space: SpaceId): Payload + suspend fun openObjectPreview(id: Id, space: SpaceId): Payload + suspend fun closePage(id: String, space: Space) suspend fun setDocumentEmojiIcon(command: Command.SetDocumentEmojiIcon): Payload suspend fun setDocumentImageIcon(command: Command.SetDocumentImageIcon): Payload suspend fun setDocumentCoverColor(ctx: String, color: String): Payload diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/block/repo/BlockRepository.kt b/domain/src/main/java/com/anytypeio/anytype/domain/block/repo/BlockRepository.kt index aa5f3f466d..cf5040c0ca 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/block/repo/BlockRepository.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/block/repo/BlockRepository.kt @@ -36,6 +36,7 @@ import com.anytypeio.anytype.core_models.membership.MembershipTierData import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteLink import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteView import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions +import com.anytypeio.anytype.core_models.primitives.Space import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.base.Result import com.anytypeio.anytype.domain.block.interactor.sets.CreateObjectSet @@ -104,20 +105,19 @@ interface BlockRepository { suspend fun setRelationKey(command: Command.SetRelationKey): Payload - suspend fun openObject(id: Id) : ObjectView - suspend fun getObject(id: Id) : ObjectView + suspend fun openObject(id: Id, space: SpaceId) : ObjectView + suspend fun getObject(id: Id, space: SpaceId) : ObjectView @Deprecated("To be deleted") - suspend fun openObjectPreview(id: Id): Result + suspend fun openObjectPreview(id: Id, space: SpaceId): Result @Deprecated("To be deleted") - suspend fun openPage(id: String): Result + suspend fun openPage(id: String, space: SpaceId): Result @Deprecated("To be deleted") - suspend fun openProfile(id: String): Payload + suspend fun openProfile(id: String, space: SpaceId): Payload @Deprecated("To be deleted") - suspend fun openObjectSet(id: String): Result + suspend fun openObjectSet(id: String, space: SpaceId): Result - suspend fun closePage(id: String) - suspend fun closeDashboard(id: String) + suspend fun closePage(id: String, space: Space) /** * Upload media or file block by path or url. diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/object/GetObject.kt b/domain/src/main/java/com/anytypeio/anytype/domain/object/GetObject.kt index 94d5fd248f..edb9889d1e 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/object/GetObject.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/object/GetObject.kt @@ -2,6 +2,7 @@ package com.anytypeio.anytype.domain.`object` import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectView +import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.base.ResultInteractor import com.anytypeio.anytype.domain.block.repo.BlockRepository @@ -13,6 +14,14 @@ import com.anytypeio.anytype.domain.block.repo.BlockRepository class GetObject( private val repo: BlockRepository, dispatchers: AppCoroutineDispatchers -) : ResultInteractor(dispatchers.io) { - override suspend fun doWork(params: Id): ObjectView = repo.getObject(params) +) : ResultInteractor(dispatchers.io) { + override suspend fun doWork(params: Params): ObjectView = repo.getObject( + id = params.target, + space = params.space + ) + + data class Params( + val target: Id, + val space: SpaceId + ) } \ No newline at end of file diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/object/OpenObject.kt b/domain/src/main/java/com/anytypeio/anytype/domain/object/OpenObject.kt index b18fd937c9..0cff4f6657 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/object/OpenObject.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/object/OpenObject.kt @@ -16,7 +16,10 @@ class OpenObject @Inject constructor( dispatchers: AppCoroutineDispatchers ) : ResultInteractor(dispatchers.io) { - override suspend fun doWork(params: Params) = repo.openObject(params.obj).also { + override suspend fun doWork(params: Params) = repo.openObject( + id = params.obj, + space = params.spaceId + ).also { if (params.saveAsLastOpened) { val obj = ObjectWrapper.Basic(it.details[params.obj].orEmpty()) val space = obj.spaceId @@ -29,7 +32,7 @@ class OpenObject @Inject constructor( } else { val givenSpace = params.spaceId - if (givenSpace != null && givenSpace.id.isNotEmpty()) { + if (givenSpace.id.isNotEmpty()) { settings.clearLastOpenedObject( SpaceId(givenSpace.id) ) @@ -40,6 +43,6 @@ class OpenObject @Inject constructor( data class Params( val obj: Id, val saveAsLastOpened: Boolean = true, - val spaceId: SpaceId? = null + val spaceId: SpaceId ) } \ No newline at end of file diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/objects/ObjectWatcher.kt b/domain/src/main/java/com/anytypeio/anytype/domain/objects/ObjectWatcher.kt index d4567d651e..d301cd0fc6 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/objects/ObjectWatcher.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/objects/ObjectWatcher.kt @@ -3,6 +3,7 @@ package com.anytypeio.anytype.domain.objects import com.anytypeio.anytype.core_models.Event import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectView +import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.block.repo.BlockRepository import com.anytypeio.anytype.domain.event.interactor.EventChannel import javax.inject.Inject @@ -16,17 +17,17 @@ class ObjectWatcher @Inject constructor( private val events: EventChannel, private val reducer: Reducer ) { - fun watch(target: Id): Flow = flow { + fun watch(target: Id, space: SpaceId): Flow = flow { emitAll( events.observeEvents(context = target).scan( - initial = repo.openObject(target), + initial = repo.openObject(id = target, space = space), operation = reducer ) ) } - suspend fun unwatch(target: Id) { - repo.closePage(target) + suspend fun unwatch(target: Id, space: SpaceId) { + repo.closePage(id = target, space = space) } interface Reducer : (ObjectView, List) -> ObjectView diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/page/AddBackLinkToObject.kt b/domain/src/main/java/com/anytypeio/anytype/domain/page/AddBackLinkToObject.kt index b00f06086c..b57cc3a78b 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/page/AddBackLinkToObject.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/page/AddBackLinkToObject.kt @@ -55,7 +55,7 @@ class AddBackLinkToObject( ) ) - closeBlock.run(params.objectToPlaceLink) + closeBlock.run(CloseBlock.Params(params.objectToPlaceLink, params.spaceId)) return ObjectWrapper.Basic(objectDetails) } diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/page/CloseBlock.kt b/domain/src/main/java/com/anytypeio/anytype/domain/page/CloseBlock.kt index 6501efb48c..120d50a517 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/page/CloseBlock.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/page/CloseBlock.kt @@ -1,19 +1,29 @@ package com.anytypeio.anytype.domain.page import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.base.ResultInteractor import com.anytypeio.anytype.domain.block.repo.BlockRepository +import javax.inject.Inject /** * Use-case for closing a smart block by id. */ -open class CloseBlock( +open class CloseBlock @Inject constructor( private val repo: BlockRepository, dispatchers: AppCoroutineDispatchers -) : ResultInteractor(dispatchers.io) { +) : ResultInteractor(dispatchers.io) { - override suspend fun doWork(params: Id) { - repo.closePage(params) + override suspend fun doWork(params: Params) { + repo.closePage( + id = params.target, + space = params.space + ) } + + data class Params( + val target: Id, + val space: SpaceId + ) } \ No newline at end of file diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/page/OpenPage.kt b/domain/src/main/java/com/anytypeio/anytype/domain/page/OpenPage.kt index 8e70d9034e..8d48e17ed7 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/page/OpenPage.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/page/OpenPage.kt @@ -18,7 +18,10 @@ open class OpenPage @Inject constructor( ) : ResultInteractor>(dispatchers.io) { override suspend fun doWork(params: Params): Result { - return repo.openPage(params.obj).also { + return repo.openPage( + id = params.obj, + space = params.space + ).also { if (params.saveAsLastOpened) { settings.setLastOpenedObject( id = params.obj, diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/sets/OpenObjectSet.kt b/domain/src/main/java/com/anytypeio/anytype/domain/sets/OpenObjectSet.kt index cecec445ab..43f4f60ac5 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/sets/OpenObjectSet.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/sets/OpenObjectSet.kt @@ -15,7 +15,10 @@ class OpenObjectSet( ) : BaseUseCase, OpenObjectSet.Params>() { override suspend fun run(params: Params) = safe { - repo.openObjectSet(params.obj).also { + repo.openObjectSet( + id = params.obj, + space = params.space + ).also { settings.setLastOpenedObject( id = params.obj, space = params.space diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/templates/OpenTemplate.kt b/domain/src/main/java/com/anytypeio/anytype/domain/templates/OpenTemplate.kt index 5dde0828b0..9e145168be 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/templates/OpenTemplate.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/templates/OpenTemplate.kt @@ -2,6 +2,7 @@ package com.anytypeio.anytype.domain.templates import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Payload +import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.base.Result import com.anytypeio.anytype.domain.base.ResultInteractor @@ -20,11 +21,16 @@ class OpenTemplate( ) : ResultInteractor>(dispatchers.io) { override suspend fun doWork(params: Params): Result { - return withContext(dispatchers.io) { repo.openObjectPreview(params.id) } + return withContext(dispatchers.io) { + repo.openObjectPreview( + id = params.id, + space = params.space + ) + } } /** * @property [id] id of the template object. */ - class Params(val id: Id) + class Params(val id: Id, val space: SpaceId) } \ No newline at end of file diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/workspace/WorkspaceManager.kt b/domain/src/main/java/com/anytypeio/anytype/domain/workspace/WorkspaceManager.kt index b81cd50181..7c61d0ddf6 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/workspace/WorkspaceManager.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/workspace/WorkspaceManager.kt @@ -24,6 +24,7 @@ interface SpaceManager { fun getConfig(): Config? fun getConfig(space: SpaceId) : Config? fun observe() : Flow + fun observe(space: SpaceId): Flow fun state(): Flow fun clear() @@ -80,6 +81,12 @@ interface SpaceManager { } } + override fun observe(space: SpaceId): Flow { + return currentSpace.mapNotNull { + info[space.id] + } + } + override fun state(): Flow { return currentSpace.map { space -> if (space == NO_SPACE) { diff --git a/middleware/src/main/java/com/anytypeio/anytype/middleware/block/BlockMiddleware.kt b/middleware/src/main/java/com/anytypeio/anytype/middleware/block/BlockMiddleware.kt index f6271d56e5..207296b1c7 100644 --- a/middleware/src/main/java/com/anytypeio/anytype/middleware/block/BlockMiddleware.kt +++ b/middleware/src/main/java/com/anytypeio/anytype/middleware/block/BlockMiddleware.kt @@ -37,6 +37,7 @@ import com.anytypeio.anytype.core_models.membership.MembershipTierData import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteLink import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteView import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions +import com.anytypeio.anytype.core_models.primitives.Space import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.data.auth.repo.block.BlockRemote import com.anytypeio.anytype.middleware.interactor.Middleware @@ -46,20 +47,28 @@ class BlockMiddleware( private val middleware: Middleware ) : BlockRemote { - override suspend fun closeDashboard(id: String) { - middleware.objectClose(id) - } + override suspend fun openObject(id: Id, space: SpaceId): ObjectView = middleware.objectOpen(id = id, space = space) + override suspend fun getObject(id: Id, space: SpaceId): ObjectView = middleware.objectShow(id = id, space = space) - override suspend fun openObject(id: Id): ObjectView = middleware.objectOpen(id = id) - override suspend fun getObject(id: Id): ObjectView = middleware.objectShow(id = id) + override suspend fun openPage(id: String, space: SpaceId): Payload = middleware.objectOpenOld( + id = id, + space = space + ) + override suspend fun openProfile(id: String, space: SpaceId): Payload = middleware.objectOpenOld( + id = id, + space = space + ) + override suspend fun openObjectSet(id: String, space: SpaceId): Payload = middleware.objectOpenOld( + id = id, + space = space + ) + override suspend fun openObjectPreview(id: Id, space: SpaceId): Payload = middleware.objectShowOld( + id = id, + space = space + ) - override suspend fun openPage(id: String): Payload = middleware.objectOpenOld(id) - override suspend fun openProfile(id: String): Payload = middleware.objectOpenOld(id) - override suspend fun openObjectSet(id: String): Payload = middleware.objectOpenOld(id) - override suspend fun openObjectPreview(id: Id): Payload = middleware.objectShowOld(id) - - override suspend fun closePage(id: String) { - middleware.objectClose(id) + override suspend fun closePage(id: String, space: Space) { + middleware.objectClose(id = id, space = space) } override suspend fun updateDocumentTitle(command: Command.UpdateTitle) { diff --git a/middleware/src/main/java/com/anytypeio/anytype/middleware/interactor/Middleware.kt b/middleware/src/main/java/com/anytypeio/anytype/middleware/interactor/Middleware.kt index aee3ae272b..7c5d39bb6a 100644 --- a/middleware/src/main/java/com/anytypeio/anytype/middleware/interactor/Middleware.kt +++ b/middleware/src/main/java/com/anytypeio/anytype/middleware/interactor/Middleware.kt @@ -43,6 +43,7 @@ import com.anytypeio.anytype.core_models.membership.MembershipTierData import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteLink import com.anytypeio.anytype.core_models.multiplayer.SpaceInviteView import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions +import com.anytypeio.anytype.core_models.primitives.Space import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.core_utils.tools.ThreadInfo import com.anytypeio.anytype.middleware.BuildConfig @@ -848,8 +849,8 @@ class Middleware @Inject constructor( } @Throws(Exception::class) - fun objectClose(id: String) { - val request = Rpc.Object.Close.Request(objectId = id) + fun objectClose(id: String, space: Space) { + val request = Rpc.Object.Close.Request(objectId = id, spaceId = space.id) logRequestIfDebug(request) val (response, time) = measureTimedValue { service.objectClose(request) } logResponseIfDebug(response, time) @@ -1091,8 +1092,8 @@ class Middleware @Inject constructor( } @Throws(Exception::class) - fun objectOpenOld(id: String): Payload { - val request = Rpc.Object.Open.Request(objectId = id) + fun objectOpenOld(id: String, space: SpaceId): Payload { + val request = Rpc.Object.Open.Request(objectId = id, spaceId = space.id) logRequestIfDebug(request) val (response, time) = measureTimedValue { service.objectOpen(request) } logResponseIfDebug(response, time) @@ -1102,8 +1103,8 @@ class Middleware @Inject constructor( } @Throws(Exception::class) - fun objectOpen(id: String): ObjectView { - val request = Rpc.Object.Open.Request(objectId = id) + fun objectOpen(id: String, space: SpaceId): ObjectView { + val request = Rpc.Object.Open.Request(objectId = id, spaceId = space.id) logRequestIfDebug(request) val (response, time) = measureTimedValue { service.objectOpen(request) } logResponseIfDebug(response, time) @@ -1531,8 +1532,8 @@ class Middleware @Inject constructor( } @Throws(Exception::class) - fun objectShowOld(id: String): Payload { - val request = Rpc.Object.Show.Request(objectId = id) + fun objectShowOld(id: String, space: SpaceId): Payload { + val request = Rpc.Object.Show.Request(objectId = id, spaceId = space.id) logRequestIfDebug(request) val (response, time) = measureTimedValue { service.objectShow(request) } logResponseIfDebug(response, time) @@ -1541,8 +1542,8 @@ class Middleware @Inject constructor( } @Throws(Exception::class) - fun objectShow(id: String): ObjectView { - val request = Rpc.Object.Show.Request(objectId = id) + fun objectShow(id: String, space: SpaceId): ObjectView { + val request = Rpc.Object.Show.Request(objectId = id, spaceId = space.id) logRequestIfDebug(request) val (response, time) = measureTimedValue { service.objectShow(request) } logResponseIfDebug(response, time) diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt index af1252e874..368efca553 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt @@ -1228,7 +1228,12 @@ class EditorViewModel( Session.IDLE -> navigate(EventWrapper(AppNavigation.Command.Exit)) Session.OPEN -> { viewModelScope.launch { - closePage.async(context).fold( + closePage.async( + CloseBlock.Params( + vmParams.ctx, + vmParams.space + ) + ).fold( onSuccess = { navigate(EventWrapper(AppNavigation.Command.Exit)) }, onFailure = { Timber.e(it, "Error while closing document: $context") @@ -1247,7 +1252,12 @@ class EditorViewModel( private fun exitDashboard() { viewModelScope.launch { clearLastOpenedObject(ClearLastOpenedObject.Params(vmParams.space)) - closePage.async(context).fold( + closePage.async( + CloseBlock.Params( + vmParams.ctx, + vmParams.space + ) + ).fold( onSuccess = { navigateToDesktop() }, onFailure = { Timber.e(it, "Error while closing this page: $context") @@ -4386,7 +4396,12 @@ class EditorViewModel( fun proceedWithOpeningObject(target: Id) { viewModelScope.launch { - closePage.async(context).fold( + closePage.async( + CloseBlock.Params( + vmParams.ctx, + vmParams.space + ) + ).fold( onFailure = { Timber.e(it, "Error while closing object") navigate(EventWrapper( @@ -4404,7 +4419,12 @@ class EditorViewModel( private fun proceedWithCloseCurrentAndOpenObject(obj: ObjectWrapper.Basic) { jobs += viewModelScope.launch { - closePage.async(context).fold( + closePage.async( + CloseBlock.Params( + vmParams.ctx, + vmParams.space + ) + ).fold( onSuccess = { proceedWithOpeningObject(obj) }, onFailure = { Timber.e(it, "Error while closing object: $context") @@ -4454,7 +4474,12 @@ class EditorViewModel( isPopUpToDashboard: Boolean = false ) { viewModelScope.launch { - closePage.async(vmParams.ctx).fold( + closePage.async( + CloseBlock.Params( + vmParams.ctx, + vmParams.space + ) + ).fold( onFailure = { Timber.e(it, "Error while closing object") navigate( diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt index a679d75360..8103c8821a 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt @@ -27,6 +27,7 @@ import com.anytypeio.anytype.core_models.WidgetSession import com.anytypeio.anytype.core_models.ext.process import com.anytypeio.anytype.core_models.isDataView import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions +import com.anytypeio.anytype.core_models.primitives.Space import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.core_models.primitives.TypeKey import com.anytypeio.anytype.core_utils.ext.cancel @@ -238,7 +239,7 @@ class HomeScreenViewModel( private val widgetObjectPipelineJobs = mutableListOf() - private val openWidgetObjectsHistory : MutableSet = LinkedHashSet() + private val openWidgetObjectsHistory : MutableSet = LinkedHashSet() private val userPermissions = MutableStateFlow(null) @@ -265,14 +266,24 @@ class HomeScreenViewModel( unsubscribe(subscriptions) } mutex.withLock { - val closed = mutableSetOf() - openWidgetObjectsHistory.forEach { previouslyOpenedWidgetObject -> + val closed = mutableSetOf() + openWidgetObjectsHistory.forEach { (previouslyOpenedWidgetObject, space) -> if (previouslyOpenedWidgetObject != newConfig.widgets) { closeObject - .async(params = previouslyOpenedWidgetObject) + .async( + CloseBlock.Params( + target = previouslyOpenedWidgetObject, + space = space + ) + ) .fold( onSuccess = { - closed.add(previouslyOpenedWidgetObject) + closed.add( + OpenObjectHistoryItem( + obj = previouslyOpenedWidgetObject, + space = space + ) + ) }, onFailure = { Timber.e(it, "Error while closing object from history: $previouslyOpenedWidgetObject") @@ -299,7 +310,14 @@ class HomeScreenViewModel( onSuccess = { objectView -> onSessionStarted().also { viewModelScope.launch { - mutex.withLock { openWidgetObjectsHistory.add(objectView.root) } + mutex.withLock { + openWidgetObjectsHistory.add( + OpenObjectHistoryItem( + obj = objectView.root, + space = SpaceId(config.space) + ) + ) + } } } }, @@ -591,7 +609,10 @@ class HomeScreenViewModel( } } - private suspend fun proceedWithClosingWidgetObject(widgetObject: Id) { + private suspend fun proceedWithClosingWidgetObject( + widgetObject: Id, + space: SpaceId + ) { saveWidgetSession.async( SaveWidgetSession.Params( WidgetSession( @@ -613,7 +634,12 @@ class HomeScreenViewModel( } if (subscriptions.isNotEmpty()) unsubscribe(subscriptions) - closeObject.stream(widgetObject).collect { status -> + closeObject.stream( + CloseBlock.Params( + target = widgetObject, + space = space + ) + ).collect { status -> status.fold( onFailure = { Timber.e(it, "Error while closing widget object") @@ -1691,9 +1717,14 @@ class HomeScreenViewModel( fun onBackClicked() { viewModelScope.launch { - openWidgetObjectsHistory.forEach { obj -> + openWidgetObjectsHistory.forEach { (obj, space) -> closeObject - .async(obj) + .async( + CloseBlock.Params( + target = obj, + space = space + ) + ) .onSuccess { Timber.d("Closed object from widget object session history: $obj") } @@ -1726,7 +1757,10 @@ class HomeScreenViewModel( unsubscriber.unsubscribe(listOf(HOME_SCREEN_PROFILE_OBJECT_SUBSCRIPTION)) val config = spaceManager.getConfig() if (config != null) { - proceedWithClosingWidgetObject(widgetObject = config.widgets) + proceedWithClosingWidgetObject( + widgetObject = config.widgets, + space = SpaceId(config.space) + ) } jobs.cancel() widgetObjectPipelineJobs.cancel() @@ -1897,7 +1931,12 @@ class HomeScreenViewModel( if (target != null) { val widgetSource = target.source if (widgetSource is Widget.Source.Default) { - getObject.async(params = target.source.id).fold( + getObject.async( + params = GetObject.Params( + target = target.source.id, + space = SpaceId(target.config.space) + ) + ).fold( onSuccess = { obj -> val dv = obj.blocks.find { it.content is DV }?.content as? DV val viewer = if (view.isNullOrEmpty()) @@ -2211,6 +2250,11 @@ sealed class InteractionMode { data object ReadOnly: InteractionMode() } +data class OpenObjectHistoryItem( + val obj: Id, + val space: Space +) + sealed class Command { /** diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt index 65f3188fbd..0d1e17fbe1 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt @@ -808,7 +808,12 @@ class ObjectSetViewModel( private fun proceedWithClosingAndExit() { viewModelScope.launch { - closeBlock.async(context).fold( + closeBlock.async( + CloseBlock.Params( + target = vmParams.ctx, + space = vmParams.space + ) + ).fold( onSuccess = { dispatch(AppNavigation.Command.Exit) }, onFailure = { Timber.e(it, "Error while closing object set: $context").also { @@ -1416,7 +1421,12 @@ class ObjectSetViewModel( target = target, space = space ) - closeBlock.async(context).fold( + closeBlock.async( + CloseBlock.Params( + target = vmParams.ctx, + space = vmParams.space + ) + ).fold( onSuccess = { navigate(EventWrapper(navigateCommand)) }, onFailure = { Timber.e(it, "Error while closing object set: $context") @@ -1447,7 +1457,12 @@ class ObjectSetViewModel( } isCustomizeViewPanelVisible.value = false jobs += viewModelScope.launch { - closeBlock.async(context).fold( + closeBlock.async( + CloseBlock.Params( + target = vmParams.ctx, + space = vmParams.space + ) + ).fold( onSuccess = { navigate( EventWrapper( @@ -1503,7 +1518,12 @@ class ObjectSetViewModel( space = space ) ObjectType.Layout.SET, ObjectType.Layout.COLLECTION -> { - closeBlock.async(context).fold( + closeBlock.async( + CloseBlock.Params( + target = vmParams.ctx, + space = vmParams.space + ) + ).fold( onSuccess = { navigate( EventWrapper( @@ -1575,7 +1595,12 @@ class ObjectSetViewModel( fun onHomeButtonClicked() { viewModelScope.launch { clearLastOpenedObject(ClearLastOpenedObject.Params(vmParams.space)) - closeBlock.async(context).fold( + closeBlock.async( + CloseBlock.Params( + target = vmParams.ctx, + space = vmParams.space + ) + ).fold( onSuccess = { dispatch(AppNavigation.Command.ExitToVault) }, onFailure = { Timber.e(it, "Error while closing object set: $context").also { diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/templates/TemplateViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/templates/TemplateViewModel.kt index 94cbb1208b..bd77333d1e 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/templates/TemplateViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/templates/TemplateViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.core_models.Event import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ext.asMap +import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.base.Result import com.anytypeio.anytype.domain.templates.OpenTemplate @@ -31,9 +32,9 @@ class TemplateViewModel( val state = MutableStateFlow>(emptyList()) - fun onStart(ctx: Id) { + fun onStart(ctx: Id, space: SpaceId) { viewModelScope.launch { - state.value = openTemplate.asFlow(OpenTemplate.Params(ctx)) + state.value = openTemplate.asFlow(OpenTemplate.Params(id = ctx, space = space)) .map { result -> when(result) { is Result.Failure -> { diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/DataViewListWidgetContainer.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/DataViewListWidgetContainer.kt index c0d23167d1..91d08879a1 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/DataViewListWidgetContainer.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/DataViewListWidgetContainer.kt @@ -135,7 +135,12 @@ class DataViewListWidgetContainer( if (source.obj.layout == ObjectType.Layout.SET && source.obj.setOf.isEmpty()) { flowOf(defaultEmptyState()) } else { - val obj = getObject.run(widget.source.id) + val obj = getObject.run( + GetObject.Params( + target = widget.source.id, + space = SpaceId(widget.config.space) + ) + ) val dv = obj.blocks.find { it.content is DV }?.content val target = if (dv is DV) { dv.viewers.find { it.id == view } ?: dv.viewers.firstOrNull() diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/ListWidgetContainer.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/ListWidgetContainer.kt index e54382b1d2..b9c7f7957a 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/ListWidgetContainer.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/ListWidgetContainer.kt @@ -82,7 +82,7 @@ class ListWidgetContainer( BundledWidgetSourceIds.FAVORITE -> { // Objects from favorites have custom sorting logic. objectWatcher - .watch(widget.config.home) + .watch(target = widget.config.home, space = SpaceId(widget.config.space)) .map { obj -> obj.orderOfRootObjects(obj.root) } .catch { Timber.e(it) diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TreeWidgetContainer.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TreeWidgetContainer.kt index 862cc24618..006ba57448 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TreeWidgetContainer.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TreeWidgetContainer.kt @@ -163,7 +163,10 @@ class TreeWidgetContainer( return when (widget.source.id) { BundledWidgetSourceIds.FAVORITE -> { objectWatcher - .watch(widget.config.home) + .watch( + target = widget.config.home, + space = SpaceId(widget.config.space) + ) .map { obj -> obj.orderOfRootObjects(obj.root) } .catch { emit(emptyMap()) } .flatMapLatest { order -> diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt index 76dd187611..40da8a331c 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt @@ -360,11 +360,19 @@ class CollectionViewModel( container.subscribe(buildSearchParams()), queryFlow(), objectTypes(), - spaceManager.observe().flatMapLatest { config -> - openObject - .asFlow(OpenObject.Params(config.home, false)) - .flatMapLatest { obj -> payloads.scan(obj) { s, p -> reduce(s, p) } } - } + spaceManager + .observe(vmParams.spaceId) + .flatMapLatest { config -> + openObject + .asFlow( + OpenObject.Params( + obj = config.home, + spaceId = vmParams.spaceId, + saveAsLastOpened = false + ) + ) + .flatMapLatest { obj -> payloads.scan(obj) { s, p -> reduce(s, p) } } + } ) { objs, query, types, favorotiesObj -> val result = prepareFavorites(favorotiesObj, objs, query, types) if (result.isEmpty() && query.isNotEmpty()) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt index f2af218e33..7591f54665 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/collections/ObjectCreateTest.kt @@ -9,6 +9,7 @@ import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.core_models.primitives.TypeKey import com.anytypeio.anytype.domain.base.Resultat import com.anytypeio.anytype.domain.dataview.interactor.CreateDataViewObject +import com.anytypeio.anytype.domain.page.CloseBlock import com.anytypeio.anytype.presentation.sets.ObjectSetViewModel import com.anytypeio.anytype.presentation.sets.main.ObjectSetViewModelTestSetup import com.anytypeio.anytype.presentation.sets.state.ObjectState @@ -98,7 +99,9 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { prefilled = emptyMap() ) ) - doReturn(Resultat.success(Unit)).`when`(closeBlock).async(mockObjectSet.root) + doReturn(Resultat.success(Unit)).`when`(closeBlock).async( + CloseBlock.Params(mockObjectSet.root, SpaceId(defaultSpace)) + ) // TESTING proceedWithStartingViewModel() @@ -120,7 +123,9 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { ) } - verifyBlocking(closeBlock, times(1)) { async(mockObjectSet.root) } + verifyBlocking(closeBlock, times(1)) { + async(CloseBlock.Params(mockObjectSet.root, SpaceId(defaultSpace))) + } } @Test @@ -168,7 +173,9 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { prefilled = emptyMap() ) ) - doReturn(Resultat.success(Unit)).`when`(closeBlock).async(mockObjectSet.root) + doReturn(Resultat.success(Unit)).`when`(closeBlock).async( + CloseBlock.Params(mockObjectSet.root, SpaceId(defaultSpace)) + ) // TESTING proceedWithStartingViewModel() @@ -261,7 +268,9 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { prefilled = emptyMap() ) ) - doReturn(Resultat.success(Unit)).`when`(closeBlock).async(mockObjectSet.root) + doReturn(Resultat.success(Unit)).`when`(closeBlock).async( + CloseBlock.Params(mockObjectSet.root, SpaceId(defaultSpace)) + ) // TESTING proceedWithStartingViewModel() @@ -344,7 +353,9 @@ class ObjectCreateTest : ObjectSetViewModelTestSetup() { prefilled = emptyMap() ) ) - doReturn(Resultat.success(Unit)).`when`(closeBlock).async(objectCollection.root) + doReturn(Resultat.success(Unit)).`when`(closeBlock).async( + CloseBlock.Params(objectCollection.root, SpaceId(defaultSpace)) + ) // TESTING proceedWithStartingViewModel() diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt index 9803e26969..9544d57c82 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt @@ -2831,7 +2831,7 @@ open class EditorViewModelTest { vm.proceedWithExitingBack() verify(closePage, times(1)).async( - params = eq(root) + params = eq(CloseBlock.Params(root, SpaceId(defaultSpace))) ) } @@ -3662,7 +3662,7 @@ open class EditorViewModelTest { ) { closePage.stub { - onBlocking { if (context == null) async(any()) else async(root) } doReturn Resultat.success( + onBlocking { if (context == null) async(any()) else async(CloseBlock.Params(root, SpaceId(defaultSpace))) } doReturn Resultat.success( Unit ) } diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorBackButtonTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorBackButtonTest.kt index 6620a3d283..6ba565be3a 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorBackButtonTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorBackButtonTest.kt @@ -1,6 +1,8 @@ package com.anytypeio.anytype.presentation.editor.editor import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import com.anytypeio.anytype.core_models.primitives.SpaceId +import com.anytypeio.anytype.domain.page.CloseBlock import com.anytypeio.anytype.presentation.MockTypicalDocumentFactory import com.anytypeio.anytype.presentation.util.DefaultCoroutineTestRule import kotlin.test.assertFalse @@ -64,6 +66,6 @@ class EditorBackButtonTest : EditorPresentationTestSetup() { assertTrue(stateBackPressed?.styleTextToolbar?.isVisible == false) - verifyBlocking(closePage, times(1)) { async(root) } + verifyBlocking(closePage, times(1)) { async(CloseBlock.Params(root, SpaceId(defaultSpace))) } } } \ No newline at end of file diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorTextUpdateTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorTextUpdateTest.kt index 8e7506350c..48d6b97e49 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorTextUpdateTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorTextUpdateTest.kt @@ -3,7 +3,9 @@ package com.anytypeio.anytype.presentation.editor.editor import androidx.arch.core.executor.testing.InstantTaskExecutorRule import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.ext.content +import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.block.interactor.UpdateText +import com.anytypeio.anytype.domain.page.CloseBlock import com.anytypeio.anytype.presentation.editor.EditorViewModel import com.anytypeio.anytype.presentation.editor.editor.model.BlockView import com.anytypeio.anytype.presentation.util.DefaultCoroutineTestRule @@ -123,7 +125,7 @@ class EditorTextUpdateTest : EditorPresentationTestSetup() { target = block.id ) ) - inOrder.verify(closePage, times(1)).async(root) + inOrder.verify(closePage, times(1)).async(CloseBlock.Params(root, SpaceId(defaultSpace))) } // RELEASING PENDING COROUTINES @@ -198,7 +200,7 @@ class EditorTextUpdateTest : EditorPresentationTestSetup() { vm.onHomeButtonClicked() verifyBlocking(closePage, times(1)) { - async(root) + async(CloseBlock.Params(root, SpaceId(defaultSpace))) } verifyNoMoreInteractions(updateText) @@ -269,7 +271,7 @@ class EditorTextUpdateTest : EditorPresentationTestSetup() { ) ) inOrder.verify(closePage, times(1)).async( - root + CloseBlock.Params(root, SpaceId(defaultSpace)) ) } @@ -345,7 +347,7 @@ class EditorTextUpdateTest : EditorPresentationTestSetup() { vm.onSystemBackPressed(false) verifyBlocking(closePage, times(1)) { - async(root) + async(CloseBlock.Params(root, SpaceId(defaultSpace))) } verifyNoMoreInteractions(updateText) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModelTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModelTest.kt index 93f8106dbd..4297c3a30a 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModelTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModelTest.kt @@ -1638,7 +1638,7 @@ class HomeScreenViewModelTest { } doReturn Unit } - given(objectWatcher.watch(any())).willReturn(flowOf()) + given(objectWatcher.watch(defaultSpaceConfig.home, SpaceId(defaultSpaceConfig.space))).willReturn(flowOf()) given(storelessSubscriptionContainer.subscribe(any())).willReturn(flowOf()) given(storelessSubscriptionContainer.subscribe(any())).willReturn( flowOf() @@ -1675,7 +1675,12 @@ class HomeScreenViewModelTest { ) } - verify(closeObject, times(1)).async(params = WIDGET_OBJECT_ID) + verify(closeObject, times(1)).async( + params = CloseBlock.Params( + WIDGET_OBJECT_ID, + SpaceId(defaultSpaceConfig.space) + ) + ) } @Test @@ -1886,7 +1891,12 @@ class HomeScreenViewModelTest { ) } - verify(closeObject, times(1)).async(params = WIDGET_OBJECT_ID) + verify(closeObject, times(1)).async( + params = CloseBlock.Params( + WIDGET_OBJECT_ID, + SpaceId(defaultSpaceConfig.space) + ) + ) } @Test @@ -2465,7 +2475,12 @@ class HomeScreenViewModelTest { thirdWidget is WidgetView.SetOfObjects && thirdWidget.tabs.first().isSelected } verifyBlocking(getObject, times(1)) { - run(params = currentWidgetSourceObject.id) + run( + params = GetObject.Params( + currentWidgetSourceObject.id, + SpaceId(defaultSpaceConfig.space) + ) + ) } verify(storelessSubscriptionContainer, times(1)).subscribe( StoreSearchByIdsParams( @@ -2651,7 +2666,12 @@ class HomeScreenViewModelTest { ) { getObject.stub { onBlocking { - run(givenObjectView.root) + run( + GetObject.Params( + givenObjectView.root, + SpaceId(defaultSpaceConfig.space) + ) + ) } doReturn givenObjectView } } @@ -2660,14 +2680,20 @@ class HomeScreenViewModelTest { closeObject.stub { onBlocking { stream( - params = WIDGET_OBJECT_ID + params = CloseBlock.Params( + WIDGET_OBJECT_ID, + SpaceId(defaultSpaceConfig.space) + ) ) } doReturn flowOf(Resultat.Loading(), Resultat.Success(Unit)) } closeObject.stub { onBlocking { async( - params = WIDGET_OBJECT_ID + params = CloseBlock.Params( + WIDGET_OBJECT_ID, + SpaceId(defaultSpaceConfig.space) + ) ) } doReturn Resultat.success(Unit) } @@ -2736,7 +2762,7 @@ class HomeScreenViewModelTest { ) { objectWatcher.stub { on { - watch(defaultSpaceConfig.home) + watch(defaultSpaceConfig.home, SpaceId(defaultSpaceConfig.space)) } doReturn flowOf(objectView) } } diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetNavigationTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetNavigationTest.kt index 52779476cd..e401bd1d4c 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetNavigationTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/sets/main/ObjectSetNavigationTest.kt @@ -5,6 +5,7 @@ import com.anytypeio.anytype.core_models.ObjectType import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.Relations import com.anytypeio.anytype.core_models.primitives.SpaceId +import com.anytypeio.anytype.domain.page.CloseBlock import com.anytypeio.anytype.presentation.collections.MockSet import com.anytypeio.anytype.presentation.objects.ObjectIcon import com.anytypeio.anytype.presentation.objects.SupportedLayouts @@ -213,7 +214,12 @@ class ObjectSetNavigationTest : ObjectSetViewModelTestSetup() { // CHECK CLOSE BLOCK COMMAND advanceUntilIdle() verifyBlocking(closeBlock, times(1)) { - async(mockObjectSet.root) + async( + CloseBlock.Params( + mockObjectSet.root, + SpaceId(defaultSpace) + ) + ) } } }