From 3536f4535b9e4d134bf2ec3c9349625795a2c073 Mon Sep 17 00:00:00 2001 From: Konstantin Ivanov <54908981+konstantiniiv@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:12:50 +0100 Subject: [PATCH] DROID-2578 Tech | Implement BlockDataViewSetActiveView (#1766) --- .../anytypeio/anytype/core_models/Command.kt | 10 +++++++ .../auth/repo/block/BlockDataRepository.kt | 4 +++ .../data/auth/repo/block/BlockRemote.kt | 1 + .../domain/block/repo/BlockRepository.kt | 1 + .../dataview/interactor/SetActiveViewer.kt | 27 +++++++++++++++++++ .../middleware/block/BlockMiddleware.kt | 4 +++ .../middleware/interactor/Middleware.kt | 13 +++++++++ .../middleware/service/MiddlewareService.kt | 3 +++ .../MiddlewareServiceImplementation.kt | 13 +++++++++ 9 files changed, 76 insertions(+) create mode 100644 domain/src/main/java/com/anytypeio/anytype/domain/dataview/interactor/SetActiveViewer.kt diff --git a/core-models/src/main/java/com/anytypeio/anytype/core_models/Command.kt b/core-models/src/main/java/com/anytypeio/anytype/core_models/Command.kt index 3940e1afbf..2aa6a8831e 100644 --- a/core-models/src/main/java/com/anytypeio/anytype/core_models/Command.kt +++ b/core-models/src/main/java/com/anytypeio/anytype/core_models/Command.kt @@ -607,4 +607,14 @@ sealed class Command { val emoji: String ): ChatCommand() } + + /** + * id of dataview block + * id of active vi1ew + */ + data class DataViewSetActiveView( + val ctx: Id, + val dataViewId: Id, + val viewerId: Id + ) } \ 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 3ea9260a25..f27108f7b5 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 @@ -872,6 +872,10 @@ class BlockDataRepository( return remote.setQueryToSet(command) } + override suspend fun dataViewSetActiveView(command: Command.DataViewSetActiveView): Payload { + return remote.dataViewSetActiveView(command) + } + override suspend fun nodeUsage(): NodeUsageInfo { return remote.nodeUsage() } 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 78ad2b8707..abad4b7756 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 @@ -382,6 +382,7 @@ interface BlockRemote { suspend fun addObjectToCollection(command: Command.AddObjectToCollection): Payload suspend fun setQueryToSet(command: Command.SetQueryToSet): Payload suspend fun nodeUsage(): NodeUsageInfo + suspend fun dataViewSetActiveView(command: Command.DataViewSetActiveView): Payload suspend fun setInternalFlags(command: Command.SetInternalFlags): 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 406d99785e..aa5f3f466d 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 @@ -431,6 +431,7 @@ interface BlockRepository { suspend fun sortDataViewViewRelation(command: Command.SortRelations): Payload suspend fun addObjectToCollection(command: Command.AddObjectToCollection): Payload suspend fun setQueryToSet(command: Command.SetQueryToSet): Payload + suspend fun dataViewSetActiveView(command: Command.DataViewSetActiveView): Payload suspend fun nodeUsage(): NodeUsageInfo suspend fun setInternalFlags(command: Command.SetInternalFlags): Payload suspend fun duplicateObjectsList(ids: List): List diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/dataview/interactor/SetActiveViewer.kt b/domain/src/main/java/com/anytypeio/anytype/domain/dataview/interactor/SetActiveViewer.kt new file mode 100644 index 0000000000..1f4310916f --- /dev/null +++ b/domain/src/main/java/com/anytypeio/anytype/domain/dataview/interactor/SetActiveViewer.kt @@ -0,0 +1,27 @@ +package com.anytypeio.anytype.domain.dataview.interactor + +import com.anytypeio.anytype.core_models.Command +import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.Payload +import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers +import com.anytypeio.anytype.domain.base.ResultInteractor +import com.anytypeio.anytype.domain.block.repo.BlockRepository + +class SetActiveViewer(private val repo: BlockRepository, dispatchers: AppCoroutineDispatchers) : + ResultInteractor(dispatchers.io) { + + override suspend fun doWork(params: Params): Payload { + val command = Command.DataViewSetActiveView( + ctx = params.ctx, + viewerId = params.viewer, + dataViewId = params.dv + ) + return repo.dataViewSetActiveView(command) + } + + data class Params( + val ctx: Id, + val viewer: Id, + val dv: Id + ) +} \ No newline at end of file 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 82bcd48eea..f6271d56e5 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 @@ -1040,4 +1040,8 @@ class BlockMiddleware( override suspend fun unsubscribeChat(chat: Id) { return middleware.chatUnsubscribe(chat = chat) } + + override suspend fun dataViewSetActiveView(command: Command.DataViewSetActiveView): Payload { + return middleware.dataViewSetActiveView(command) + } } \ No newline at end of file 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 275648c881..aee3ae272b 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 @@ -2782,6 +2782,19 @@ class Middleware @Inject constructor( logResponseIfDebug(response, time) } + @Throws + fun dataViewSetActiveView(command: Command.DataViewSetActiveView): Payload { + val request = Rpc.BlockDataview.View.SetActive.Request( + contextId = command.ctx, + blockId = command.dataViewId, + viewId = command.viewerId + ) + logRequestIfDebug(request) + val (response, time) = measureTimedValue { service.blockDataViewSetActiveView(request) } + logResponseIfDebug(response, time) + return response.event.toPayload() + } + @Throws fun chatUnsubscribe(chat: Id) { val request = Rpc.Chat.Unsubscribe.Request(chatObjectId = chat) diff --git a/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareService.kt b/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareService.kt index 7a29b29f48..b2f79fb799 100644 --- a/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareService.kt +++ b/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareService.kt @@ -354,6 +354,9 @@ interface MiddlewareService { @Throws(Exception::class) fun blockDataViewSortViewRelation(request: Rpc.BlockDataview.ViewRelation.Sort.Request): Rpc.BlockDataview.ViewRelation.Sort.Response + @Throws(Exception::class) + fun blockDataViewSetActiveView(request: Rpc.BlockDataview.View.SetActive.Request): Rpc.BlockDataview.View.SetActive.Response + //endregion //region TEXT BLOCK commands diff --git a/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareServiceImplementation.kt b/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareServiceImplementation.kt index b269129f71..0ee5b9be60 100644 --- a/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareServiceImplementation.kt +++ b/middleware/src/main/java/com/anytypeio/anytype/middleware/service/MiddlewareServiceImplementation.kt @@ -1653,6 +1653,19 @@ class MiddlewareServiceImplementation @Inject constructor( } } + override fun blockDataViewSetActiveView(request: Rpc.BlockDataview.View.SetActive.Request): Rpc.BlockDataview.View.SetActive.Response { + val encoded = Service.blockDataviewViewSetActive( + Rpc.BlockDataview.View.SetActive.Request.ADAPTER.encode(request) + ) + val response = Rpc.BlockDataview.View.SetActive.Response.ADAPTER.decode(encoded) + val error = response.error + if (error != null && error.code != Rpc.BlockDataview.View.SetActive.Response.Error.Code.NULL) { + throw Exception(error.description) + } else { + return response + } + } + override fun createTemplateFromObject(request: Rpc.Template.CreateFromObject.Request): Rpc.Template.CreateFromObject.Response { val encoded = Service.templateCreateFromObject( Rpc.Template.CreateFromObject.Request.ADAPTER.encode(request)