From 3a0e62241feb4fc80f0309237252e7bde9c8d963 Mon Sep 17 00:00:00 2001 From: ubu Date: Thu, 19 Dec 2019 13:59:21 +0300 Subject: [PATCH] Updated library and protos. (#90) --- .../middleware/block/BlockMiddleware.kt | 6 + .../middleware/interactor/Middleware.java | 12 +- protobuf/src/main/proto/commands.proto | 170 +++++++++++++++--- protobuf/src/main/proto/events.proto | 96 +++------- protobuf/src/main/proto/models.proto | 71 +++----- 5 files changed, 206 insertions(+), 149 deletions(-) diff --git a/middleware/src/main/java/com/agileburo/anytype/middleware/block/BlockMiddleware.kt b/middleware/src/main/java/com/agileburo/anytype/middleware/block/BlockMiddleware.kt index 166597858f..09f015409c 100644 --- a/middleware/src/main/java/com/agileburo/anytype/middleware/block/BlockMiddleware.kt +++ b/middleware/src/main/java/com/agileburo/anytype/middleware/block/BlockMiddleware.kt @@ -97,6 +97,7 @@ class BlockMiddleware( content = extractLayout(block) ) } + /* Models.Block.ContentCase.IMAGE -> { BlockEntity( id = block.id, @@ -107,6 +108,7 @@ class BlockMiddleware( ) ) } + */ else -> { null } @@ -151,6 +153,7 @@ class BlockMiddleware( content = extractLayout(block) ) } + /* Models.Block.ContentCase.IMAGE -> { BlockEntity( id = block.id, @@ -161,6 +164,7 @@ class BlockMiddleware( ) ) } + */ else -> { null } @@ -228,6 +232,7 @@ class BlockMiddleware( content = extractLayout(block) ) } + /* Models.Block.ContentCase.IMAGE -> { BlockEntity( id = block.id, @@ -238,6 +243,7 @@ class BlockMiddleware( ) ) } + */ else -> { throw IllegalStateException("Unexpected content: ${block.contentCase}") } diff --git a/middleware/src/main/java/com/agileburo/anytype/middleware/interactor/Middleware.java b/middleware/src/main/java/com/agileburo/anytype/middleware/interactor/Middleware.java index bdeade9229..87aeb56db1 100644 --- a/middleware/src/main/java/com/agileburo/anytype/middleware/interactor/Middleware.java +++ b/middleware/src/main/java/com/agileburo/anytype/middleware/interactor/Middleware.java @@ -232,9 +232,8 @@ public class Middleware { Block.Create.Request request = Block.Create.Request .newBuilder() .setContextId(parentId) - .setParentId(parentId) .setBlock(block) - .setPosition(Models.Block.Position.After) + .setPosition(Models.Block.Position.Inner) .build(); byte[] encodedRequest = request.toByteArray(); @@ -300,7 +299,7 @@ public class Middleware { .addAllMarks(marks) .build(); - Block.Set.Text.Editable.Request request = Block.Set.Text.Editable.Request + Block.Set.Text.TText.Request request = Block.Set.Text.TText.Request .newBuilder() .setContextId(contextId) .setBlockId(blockId) @@ -314,9 +313,9 @@ public class Middleware { byte[] encodedResponse = Lib.blockSetTextText(encodedRequest); - Block.Set.Text.Editable.Response response = Block.Set.Text.Editable.Response.parseFrom(encodedResponse); + Block.Set.Text.TText.Response response = Block.Set.Text.TText.Response.parseFrom(encodedResponse); - if (response.getError() != null && response.getError().getCode() != Block.Set.Text.Editable.Response.Error.Code.NULL) { + if (response.getError() != null && response.getError().getCode() != Block.Set.Text.TText.Response.Error.Code.NULL) { throw new Exception(response.getError().getDescription()); } } @@ -341,8 +340,7 @@ public class Middleware { .newBuilder() .setContextId(contextId) .setTargetId(targetId) - .setParentId(contextId) - .setPosition(Models.Block.Position.After) + .setPosition(Models.Block.Position.Bottom) .setBlock(block) .build(); diff --git a/protobuf/src/main/proto/commands.proto b/protobuf/src/main/proto/commands.proto index cd1d680e19..9d04be4549 100644 --- a/protobuf/src/main/proto/commands.proto +++ b/protobuf/src/main/proto/commands.proto @@ -12,14 +12,66 @@ import "google/protobuf/struct.proto"; * Response – message from a middleware. */ message Rpc { + + message ExternalDrop { + message Files { + message Request { + string contextId = 1; + string focusedBlockId = 2; // can be null + repeated string localFilePaths = 3; + } + + message Response { + Error error = 1; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + // ... + } + } + } + } + + message Content { + message Request { + string contextId = 1; + string focusedBlockId = 2; // can be null + bytes content = 3; // TODO + } + + message Response { + Error error = 1; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + // ... + } + } + } + } + } + message BlockList { message Move { message Request { string contextId = 1; repeated string blockIds = 2; - string dropTargetId = 3; - anytype.model.Block.Position position = 4; + string targetContextId = 3; + string dropTargetId = 4; + anytype.model.Block.Position position = 5; } message Response { @@ -72,6 +124,31 @@ message Rpc { * Namespace, that agregates subtopics and actions, that relates to blocks. */ message Block { + message Replace { + message Request { + string contextId = 1; + string blockId = 2; + anytype.model.Block block = 3; + } + + message Response { + Error error = 1; + string blockId = 2; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + // ... + } + } + } + } + message Split { message Request { string contextId = 1; @@ -81,6 +158,7 @@ message Rpc { message Response { Error error = 1; + string blockId = 2; message Error { Code code = 1; @@ -120,14 +198,20 @@ message Rpc { } } + /* + * Makes block copy by given id and paste it to shown place + */ message Duplicate { message Request { - string contextId = 1; - string blockId = 2; + string contextId = 1; // id of the context block + string targetId = 2; // id of the closest block + string blockId = 3; // id of block for duplicate + anytype.model.Block.Position position = 4; } message Response { Error error = 1; + string blockId = 2; message Error { Code code = 1; @@ -146,16 +230,14 @@ message Rpc { message Copy { message Request { string contextId = 1; - string focusedBlockId = 2; - anytype.model.Range selectedTextRange = 3; - repeated string selectedBlocks = 4; + repeated string blockIds = 2; } message Response { Error error = 1; string clipboardText = 2; string clipboardHtml = 3; - string clipboardAny = 4; // TODO: type – is string ok? + // string clipboardAny = 4; Client already knows blockIds message Error { Code code = 1; @@ -178,9 +260,9 @@ message Rpc { anytype.model.Range selectedTextRange = 3; repeated string selectedBlocks = 4; - string clipboardText = 5; - string clipboardHtml = 6; - string clipboardAny = 7; + string textSlot = 5; + string htmlSlot = 6; + string anySlot = 7; } message Response { @@ -272,7 +354,6 @@ message Rpc { } } } - message Restrictions { message Request { string contextId = 1; @@ -322,8 +403,7 @@ message Rpc { } message Text { - - message Editable { + message TText { message Request { string contextId = 1; string blockId = 2; @@ -348,6 +428,54 @@ message Rpc { } } + message Color { + message Request { + string contextId = 1; + string blockId = 2; + string color = 3; + } + + message Response { + Error error = 1; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + // ... + } + } + } + } + + message BackgroundColor { + message Request { + string contextId = 1; + string blockId = 2; + string color = 3; + } + + message Response { + Error error = 1; + + message Error { + Code code = 1; + string description = 2; + + enum Code { + NULL = 0; + UNKNOWN_ERROR = 1; + BAD_INPUT = 2; + // ... + } + } + } + } + message Style { message Request { string contextId = 1; @@ -660,14 +788,14 @@ message Rpc { * Create a Smart/Internal block. Request can contain a block with a content, or it can be an empty block with a specific block.content. * **Example scenario** * 1A. Create Page on a dashboard - * 1. Front -> MW: Rpc.Block.Create.Request(blockId:dashboard.id, position:after, block: emtpy block with page content and id = "") + * 1. Front -> MW: Rpc.Block.Create.Request(blockId:dashboard.id, position:bottom, block: emtpy block with page content and id = "") * 2. Front -> MW: Rpc.Block.Close.Request(block: dashboard.id) * 3. Front <- MW: Rpc.Block.Close.Response(err) * 4. Front <- MW: Rpc.Block.Create.Response(page.id) * 5. Front <- MW: Rpc.Block.Open.Response(err) * 6. Front <- MW: Event.Block.Show(page) * 1B. Create Page on a Page - * 1. Front -> MW: Rpc.Block.Create.Request(blockId:dashboard.id, position:after, block: emtpy block with page content and id = "") + * 1. Front -> MW: Rpc.Block.Create.Request(blockId:dashboard.id, position:bottom, block: emtpy block with page content and id = "") * 2. Front <- MW: Rpc.Block.Create.Response(newPage.id) * 3. Front <- MW: Event.Block.Show(newPage) */ @@ -677,7 +805,6 @@ message Rpc { string targetId = 2; // id of the closest block anytype.model.Block block = 3; anytype.model.Block.Position position = 4; - string parentId = 5; // id of the parent block } message Response { @@ -704,12 +831,8 @@ message Rpc { message Unlink { message Request { string contextId = 1; // id of the context block - repeated Target targets = 2; // targets to remove + repeated string blockIds = 2; // targets to remove - message Target { - string blockId = 1; // id of the block to remove - string parentId = 2; // id of the parent block - } } message Response { @@ -926,6 +1049,7 @@ message Rpc { FAILED_TO_RUN_NODE = 103; FAILED_TO_FIND_ACCOUNT_INFO = 104; LOCAL_REPO_NOT_EXISTS_AND_MNEMONIC_NOT_SET = 105; + FAILED_TO_STOP_SEARCHER_NODE = 106; } } } @@ -1060,6 +1184,7 @@ message Rpc { NOT_FOUND = 101; TIMEOUT = 102; + NODE_NOT_STARTED = 103; } } } @@ -1087,6 +1212,7 @@ message Rpc { NOT_FOUND = 101; TIMEOUT = 102; + NODE_NOT_STARTED = 103; } } } diff --git a/protobuf/src/main/proto/events.proto b/protobuf/src/main/proto/events.proto index 183ce22270..a0b4b58782 100644 --- a/protobuf/src/main/proto/events.proto +++ b/protobuf/src/main/proto/events.proto @@ -29,15 +29,13 @@ message Event { Block.Set.Text blockSetText = 10; Block.Set.File blockSetFile = 11; - Block.Set.Image blockSetImage = 12; - Block.Set.Video blockSetVideo = 13; - Block.Set.Icon blockSetIcon = 14; + Block.Set.Icon blockSetIcon = 12; - Block.Show blockShow = 15; - User.Block.Join userBlockJoin = 16; - User.Block.Left userBlockLeft = 17; - User.Block.SelectRange userBlockSelectRange = 18; - User.Block.TextRange userBlockTextRange = 19; + Block.Show blockShow = 13; + User.Block.Join userBlockJoin = 14; + User.Block.Left userBlockLeft = 15; + User.Block.SelectRange userBlockSelectRange = 16; + User.Block.TextRange userBlockTextRange = 17; Ping ping = 100; } @@ -48,7 +46,7 @@ message Event { * Message, that will be sent to the front on each account found after an AccountRecoverRequest */ message Show { - int64 index = 1; // Number of an account in an all found accounts list + int32 index = 1; // Number of an account in an all found accounts list anytype.model.Account account = 2; // An Account, that has been found for the mnemonic } } @@ -125,12 +123,14 @@ message Event { message Text { string id = 1; - Editable text = 2; + TText text = 2; Style style = 3; Marks marks = 4; Checked checked = 5; + Color color = 6; + BackgroundColor backgroundColor = 7; - message Editable { + message TText { string value = 1; } @@ -145,79 +145,37 @@ message Event { message Checked { bool value = 1; } + + message Color { + string value = 1; + } + + message BackgroundColor { + string value = 1; + } } message File { string id = 1; - Name name = 2; + Type type = 2; State state = 3; LocalFilePath localFilePath = 4; - Icon icon = 5; + PreviewLocalFilePath previewLocalFilePath = 5; message Name { string value = 1; } + message Width { + int32 value = 1; + } + message State { anytype.model.Block.Content.File.State value = 1; } - message LocalFilePath { - string value = 1; - } - - message Icon { - string value = 1; - } - } - - message Image { - string id = 1; - Name name = 2; - Width width = 3; - State state = 4; - LocalFilePath localFilePath = 5; - PreviewLocalFilePath previewLocalFilePath = 6; - - message Name { - string value = 1; - } - - message Width { - int32 value = 1; - } - - message State { - anytype.model.Block.Content.Image.State value = 1; - } - - message LocalFilePath { - string value = 1; - } - - message PreviewLocalFilePath { - string value = 1; - } - } - - message Video { - string id = 1; - Name name = 2; - Width width = 3; - State state = 4; - LocalFilePath localFilePath = 5; - PreviewLocalFilePath previewLocalFilePath = 6; - - message Name { - string value = 1; - } - - message Width { - int32 value = 1; - } - - message State { - anytype.model.Block.Content.Video.State value = 1; + message Type { + anytype.model.Block.Content.File.Type value = 1; } message LocalFilePath { diff --git a/protobuf/src/main/proto/models.proto b/protobuf/src/main/proto/models.proto index 6c2852a7a0..4d0cf22a99 100644 --- a/protobuf/src/main/proto/models.proto +++ b/protobuf/src/main/proto/models.proto @@ -17,14 +17,12 @@ message Block { Content.Dataview dataview = 13; Content.Text text = 14; - Content.Video video = 15; - Content.Image image = 16; - Content.File file = 17; - Content.Layout layout = 18; - Content.Div div = 19; - Content.Bookmark bookmark = 20; - Content.Icon icon = 21; - Content.Link link = 22; + Content.File file = 15; + Content.Layout layout = 16; + Content.Div div = 17; + Content.Bookmark bookmark = 18; + Content.Icon icon = 19; + Content.Link link = 20; } @@ -37,8 +35,12 @@ message Block { } enum Position { - Before = 0; - After = 1; + None = 0; + Top = 1; + Bottom = 2; + Left = 3; + Right = 4; + Inner = 5; } message Content { @@ -109,6 +111,8 @@ message Block { Style style = 2; Marks marks = 3; // list of marks to apply to the text bool checked = 4; + string color = 5; + string backgroundColor = 6; message Marks { repeated Mark marks = 1; @@ -147,55 +151,20 @@ message Block { } } - message Video { - string localFilePath = 1; - string name = 2; - string icon = 3; - int32 width = 4; - State state = 5; - - enum State { - Empty = 0; // There is no video and preview, it's an empty block, that waits videos. - Uploading = 1; // There is stil no video/preview, but video already uploading - PreviewDownloaded = 2; // Video exists, preview downloaded, but video – not. - Downloading = 3; // Video exists, preview downloaded, but video downloading - Done = 4; // Video and preview downloaded - } - } - - message Image { + message File { string localFilePath = 1; string previewFilePath = 2; - State state = 3; Type type = 4; - string name = 5; - int32 size = 6; - int32 addedAt = 7; - int32 width = 8; - int32 widthToHeight = 9; - - enum State { - Empty = 0; // There is no image and preview, it's an empty block, that waits image. - Uploading = 1; // There is stil no image/preview, but image already uploading - PreviewDownloaded = 2; // Image exists, preview downloaded, but image – not. - Downloading = 3; // Image exists, preview downloaded, but image downloading - Done = 4; // Image and preview downloaded - } + int64 size = 5; + int64 addedAt = 6; enum Type { - Png = 0; - Jpg = 1; - // ... + File = 0; + Image = 1; + Video = 2; } - } - - message File { - string localFilePath = 1; // Path to the file on a local machine - string name = 2; - string icon = 3; - State state = 4; enum State { Empty = 0; // There is no file and preview, it's an empty block, that waits files.