mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-04-25 07:07:32 -04:00
feat: move handles to flowy-block crate
This commit is contained in:
parent
11ceb96f65
commit
5c155a07bf
48 changed files with 370 additions and 101 deletions
|
@ -1,6 +1,6 @@
|
||||||
import 'package:app_flowy/workspace/application/doc/share_service.dart';
|
import 'package:app_flowy/workspace/application/doc/share_service.dart';
|
||||||
import 'package:app_flowy/workspace/application/markdown/delta_markdown.dart';
|
import 'package:app_flowy/workspace/application/markdown/delta_markdown.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/share.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-block/entities.pb.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/protobuf.dart';
|
|
||||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||||
|
import 'package:flowy_sdk/protobuf/flowy-block/protobuf.dart';
|
||||||
|
|
||||||
class ShareService {
|
class ShareService {
|
||||||
Future<Either<ExportData, FlowyError>> export(String docId, ExportType type) {
|
Future<Either<ExportData, FlowyError>> export(String docId, ExportType type) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import 'package:flowy_infra/theme.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flowy_infra_ui/widget/rounded_button.dart';
|
import 'package:flowy_infra_ui/widget/rounded_button.dart';
|
||||||
import 'package:flowy_sdk/log.dart';
|
import 'package:flowy_sdk/log.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/share.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-block/entities.pb.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
|
@ -7,7 +7,7 @@ packages:
|
||||||
name: archive
|
name: archive
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.6"
|
version: "3.1.8"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -200,7 +200,7 @@ packages:
|
||||||
name: path
|
name: path
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0"
|
version: "1.8.1"
|
||||||
platform:
|
platform:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -275,7 +275,7 @@ packages:
|
||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.8"
|
version: "0.4.9"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -6,6 +6,9 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
flowy_sdk
|
flowy_sdk
|
||||||
)
|
)
|
||||||
|
|
||||||
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
)
|
||||||
|
|
||||||
set(PLUGIN_BUNDLED_LIBRARIES)
|
set(PLUGIN_BUNDLED_LIBRARIES)
|
||||||
|
|
||||||
foreach(plugin ${FLUTTER_PLUGIN_LIST})
|
foreach(plugin ${FLUTTER_PLUGIN_LIST})
|
||||||
|
@ -14,3 +17,8 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST})
|
||||||
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
|
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
|
||||||
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
|
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
|
||||||
endforeach(plugin)
|
endforeach(plugin)
|
||||||
|
|
||||||
|
foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
|
||||||
|
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})
|
||||||
|
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
|
||||||
|
endforeach(ffi_plugin)
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
/// Auto generate. Do not edit
|
||||||
|
part of '../../dispatch.dart';
|
||||||
|
class BlockEventApplyDocDelta {
|
||||||
|
BlockDelta request;
|
||||||
|
BlockEventApplyDocDelta(this.request);
|
||||||
|
|
||||||
|
Future<Either<BlockDelta, FlowyError>> send() {
|
||||||
|
final request = FFIRequest.create()
|
||||||
|
..event = BlockEvent.ApplyDocDelta.toString()
|
||||||
|
..payload = requestToBytes(this.request);
|
||||||
|
|
||||||
|
return Dispatch.asyncRequest(request)
|
||||||
|
.then((bytesResult) => bytesResult.fold(
|
||||||
|
(okBytes) => left(BlockDelta.fromBuffer(okBytes)),
|
||||||
|
(errBytes) => right(FlowyError.fromBuffer(errBytes)),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BlockEventExportDocument {
|
||||||
|
ExportPayload request;
|
||||||
|
BlockEventExportDocument(this.request);
|
||||||
|
|
||||||
|
Future<Either<ExportData, FlowyError>> send() {
|
||||||
|
final request = FFIRequest.create()
|
||||||
|
..event = BlockEvent.ExportDocument.toString()
|
||||||
|
..payload = requestToBytes(this.request);
|
||||||
|
|
||||||
|
return Dispatch.asyncRequest(request)
|
||||||
|
.then((bytesResult) => bytesResult.fold(
|
||||||
|
(okBytes) => left(ExportData.fromBuffer(okBytes)),
|
||||||
|
(errBytes) => right(FlowyError.fromBuffer(errBytes)),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import 'package:flowy_sdk/ffi.dart' as ffi;
|
||||||
import 'package:flowy_sdk/protobuf/flowy-user-data-model/protobuf.dart';
|
import 'package:flowy_sdk/protobuf/flowy-user-data-model/protobuf.dart';
|
||||||
import 'package:flowy_sdk/protobuf/dart-ffi/protobuf.dart';
|
import 'package:flowy_sdk/protobuf/dart-ffi/protobuf.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/protobuf.dart';
|
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/protobuf.dart';
|
||||||
|
import 'package:flowy_sdk/protobuf/flowy-block/protobuf.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-collaboration/protobuf.dart';
|
import 'package:flowy_sdk/protobuf/flowy-collaboration/protobuf.dart';
|
||||||
import 'package:flowy_sdk/protobuf/flowy-grid-data-model/protobuf.dart';
|
import 'package:flowy_sdk/protobuf/flowy-grid-data-model/protobuf.dart';
|
||||||
|
|
||||||
|
@ -33,6 +34,7 @@ part 'dart_event/flowy-folder/dart_event.dart';
|
||||||
part 'dart_event/flowy-net/dart_event.dart';
|
part 'dart_event/flowy-net/dart_event.dart';
|
||||||
part 'dart_event/flowy-user/dart_event.dart';
|
part 'dart_event/flowy-user/dart_event.dart';
|
||||||
part 'dart_event/flowy-grid/dart_event.dart';
|
part 'dart_event/flowy-grid/dart_event.dart';
|
||||||
|
part 'dart_event/flowy-block/dart_event.dart';
|
||||||
|
|
||||||
enum FFIException {
|
enum FFIException {
|
||||||
RequestIsEmpty,
|
RequestIsEmpty,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
///
|
///
|
||||||
// Generated code. Do not modify.
|
// Generated code. Do not modify.
|
||||||
// source: share.proto
|
// source: entities.proto
|
||||||
//
|
//
|
||||||
// @dart = 2.12
|
// @dart = 2.12
|
||||||
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
|
||||||
|
@ -9,9 +9,9 @@ import 'dart:core' as $core;
|
||||||
|
|
||||||
import 'package:protobuf/protobuf.dart' as $pb;
|
import 'package:protobuf/protobuf.dart' as $pb;
|
||||||
|
|
||||||
import 'share.pbenum.dart';
|
import 'entities.pbenum.dart';
|
||||||
|
|
||||||
export 'share.pbenum.dart';
|
export 'entities.pbenum.dart';
|
||||||
|
|
||||||
class ExportPayload extends $pb.GeneratedMessage {
|
class ExportPayload extends $pb.GeneratedMessage {
|
||||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ExportPayload', createEmptyInstance: create)
|
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ExportPayload', createEmptyInstance: create)
|
|
@ -1,6 +1,6 @@
|
||||||
///
|
///
|
||||||
// Generated code. Do not modify.
|
// Generated code. Do not modify.
|
||||||
// source: share.proto
|
// source: entities.proto
|
||||||
//
|
//
|
||||||
// @dart = 2.12
|
// @dart = 2.12
|
||||||
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
|
|
@ -1,6 +1,6 @@
|
||||||
///
|
///
|
||||||
// Generated code. Do not modify.
|
// Generated code. Do not modify.
|
||||||
// source: share.proto
|
// source: entities.proto
|
||||||
//
|
//
|
||||||
// @dart = 2.12
|
// @dart = 2.12
|
||||||
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
|
|
@ -1,9 +1,9 @@
|
||||||
///
|
///
|
||||||
// Generated code. Do not modify.
|
// Generated code. Do not modify.
|
||||||
// source: share.proto
|
// source: entities.proto
|
||||||
//
|
//
|
||||||
// @dart = 2.12
|
// @dart = 2.12
|
||||||
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
|
||||||
|
|
||||||
export 'share.pb.dart';
|
export 'entities.pb.dart';
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
///
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: event_map.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
|
||||||
|
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
|
||||||
|
export 'event_map.pbenum.dart';
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
///
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: event_map.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
|
||||||
|
|
||||||
|
// ignore_for_file: UNDEFINED_SHOWN_NAME
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
import 'package:protobuf/protobuf.dart' as $pb;
|
||||||
|
|
||||||
|
class BlockEvent extends $pb.ProtobufEnum {
|
||||||
|
static const BlockEvent ApplyDocDelta = BlockEvent._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ApplyDocDelta');
|
||||||
|
static const BlockEvent ExportDocument = BlockEvent._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ExportDocument');
|
||||||
|
|
||||||
|
static const $core.List<BlockEvent> values = <BlockEvent> [
|
||||||
|
ApplyDocDelta,
|
||||||
|
ExportDocument,
|
||||||
|
];
|
||||||
|
|
||||||
|
static final $core.Map<$core.int, BlockEvent> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||||
|
static BlockEvent? valueOf($core.int value) => _byValue[value];
|
||||||
|
|
||||||
|
const BlockEvent._($core.int v, $core.String n) : super(v, n);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
///
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: event_map.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
|
||||||
|
|
||||||
|
import 'dart:core' as $core;
|
||||||
|
import 'dart:convert' as $convert;
|
||||||
|
import 'dart:typed_data' as $typed_data;
|
||||||
|
@$core.Deprecated('Use blockEventDescriptor instead')
|
||||||
|
const BlockEvent$json = const {
|
||||||
|
'1': 'BlockEvent',
|
||||||
|
'2': const [
|
||||||
|
const {'1': 'ApplyDocDelta', '2': 0},
|
||||||
|
const {'1': 'ExportDocument', '2': 1},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Descriptor for `BlockEvent`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||||
|
final $typed_data.Uint8List blockEventDescriptor = $convert.base64Decode('CgpCbG9ja0V2ZW50EhEKDUFwcGx5RG9jRGVsdGEQABISCg5FeHBvcnREb2N1bWVudBAB');
|
|
@ -0,0 +1,9 @@
|
||||||
|
///
|
||||||
|
// Generated code. Do not modify.
|
||||||
|
// source: event_map.proto
|
||||||
|
//
|
||||||
|
// @dart = 2.12
|
||||||
|
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
|
||||||
|
|
||||||
|
export 'event_map.pb.dart';
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
// Auto-generated, do not edit
|
||||||
|
export './entities.pb.dart';
|
||||||
|
export './event_map.pb.dart';
|
|
@ -1,5 +1,4 @@
|
||||||
// Auto-generated, do not edit
|
// Auto-generated, do not edit
|
||||||
export './share.pb.dart';
|
|
||||||
export './app.pb.dart';
|
export './app.pb.dart';
|
||||||
export './view.pb.dart';
|
export './view.pb.dart';
|
||||||
export './trash.pb.dart';
|
export './trash.pb.dart';
|
||||||
|
|
|
@ -214,6 +214,13 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
freezed:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: freezed
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.1+2"
|
||||||
freezed_annotation:
|
freezed_annotation:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -339,7 +346,7 @@ packages:
|
||||||
name: path
|
name: path
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0"
|
version: "1.8.1"
|
||||||
pedantic:
|
pedantic:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -394,6 +401,13 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.99"
|
version: "0.0.99"
|
||||||
|
source_gen:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_gen
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -442,7 +456,7 @@ packages:
|
||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.8"
|
version: "0.4.9"
|
||||||
timing:
|
timing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -7,8 +7,8 @@ edition = "2018"
|
||||||
[lib]
|
[lib]
|
||||||
name = "dart_ffi"
|
name = "dart_ffi"
|
||||||
# this value will change depending on the target os
|
# this value will change depending on the target os
|
||||||
# default staticlib
|
# default cdylib
|
||||||
crate-type = ["staticlib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
|
@ -52,6 +52,10 @@ color-eyre = { version = "0.5", default-features = false }
|
||||||
criterion = "0.3"
|
criterion = "0.3"
|
||||||
rand = "0.7.3"
|
rand = "0.7.3"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
lib-infra = { path = "../../../shared-lib/lib-infra", features = ["protobuf_file_gen", "proto_gen"] }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
http_server = []
|
http_server = []
|
||||||
flowy_unit_test = ["lib-ot/flowy_unit_test", "flowy-sync/flowy_unit_test"]
|
flowy_unit_test = ["lib-ot/flowy_unit_test", "flowy-sync/flowy_unit_test"]
|
||||||
|
dart = ["lib-infra/dart"]
|
3
frontend/rust-lib/flowy-block/Flowy.toml
Normal file
3
frontend/rust-lib/flowy-block/Flowy.toml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
proto_crates = ["src/event_map.rs", "src/entities.rs"]
|
||||||
|
event_files = ["src/event_map.rs"]
|
9
frontend/rust-lib/flowy-block/build.rs
Normal file
9
frontend/rust-lib/flowy-block/build.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
use lib_infra::code_gen;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let crate_name = env!("CARGO_PKG_NAME");
|
||||||
|
code_gen::protobuf_file::gen(crate_name, "./src/protobuf/proto");
|
||||||
|
|
||||||
|
#[cfg(feature = "dart")]
|
||||||
|
code_gen::dart_event::gen(crate_name);
|
||||||
|
}
|
29
frontend/rust-lib/flowy-block/src/event_handler.rs
Normal file
29
frontend/rust-lib/flowy-block/src/event_handler.rs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
use crate::entities::{ExportData, ExportParams, ExportPayload};
|
||||||
|
use crate::BlockManager;
|
||||||
|
use flowy_collaboration::entities::document_info::BlockDelta;
|
||||||
|
use flowy_error::FlowyError;
|
||||||
|
use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
|
||||||
|
use std::convert::TryInto;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
pub(crate) async fn apply_delta_handler(
|
||||||
|
data: Data<BlockDelta>,
|
||||||
|
manager: AppData<Arc<BlockManager>>,
|
||||||
|
) -> DataResult<BlockDelta, FlowyError> {
|
||||||
|
let block_delta = manager.receive_local_delta(data.into_inner()).await?;
|
||||||
|
data_result(block_delta)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tracing::instrument(skip(data, manager), err)]
|
||||||
|
pub(crate) async fn export_handler(
|
||||||
|
data: Data<ExportPayload>,
|
||||||
|
manager: AppData<Arc<BlockManager>>,
|
||||||
|
) -> DataResult<ExportData, FlowyError> {
|
||||||
|
let params: ExportParams = data.into_inner().try_into()?;
|
||||||
|
let editor = manager.open_block(¶ms.view_id).await?;
|
||||||
|
let delta_json = editor.block_json().await?;
|
||||||
|
data_result(ExportData {
|
||||||
|
data: delta_json,
|
||||||
|
export_type: params.export_type,
|
||||||
|
})
|
||||||
|
}
|
26
frontend/rust-lib/flowy-block/src/event_map.rs
Normal file
26
frontend/rust-lib/flowy-block/src/event_map.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
use crate::event_handler::*;
|
||||||
|
use crate::BlockManager;
|
||||||
|
use flowy_derive::{Flowy_Event, ProtoBuf_Enum};
|
||||||
|
use lib_dispatch::prelude::Module;
|
||||||
|
use std::sync::Arc;
|
||||||
|
use strum_macros::Display;
|
||||||
|
|
||||||
|
pub fn create(block_manager: Arc<BlockManager>) -> Module {
|
||||||
|
let mut module = Module::new().name(env!("CARGO_PKG_NAME")).data(block_manager);
|
||||||
|
|
||||||
|
module = module
|
||||||
|
.event(BlockEvent::ApplyDocDelta, apply_delta_handler)
|
||||||
|
.event(BlockEvent::ExportDocument, export_handler);
|
||||||
|
|
||||||
|
module
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
|
||||||
|
#[event_err = "FlowyError"]
|
||||||
|
pub enum BlockEvent {
|
||||||
|
#[event(input = "BlockDelta", output = "BlockDelta")]
|
||||||
|
ApplyDocDelta = 0,
|
||||||
|
|
||||||
|
#[event(input = "ExportPayload", output = "ExportData")]
|
||||||
|
ExportDocument = 1,
|
||||||
|
}
|
|
@ -1,8 +1,12 @@
|
||||||
pub mod block_editor;
|
pub mod block_editor;
|
||||||
|
mod entities;
|
||||||
|
mod event_handler;
|
||||||
|
pub mod event_map;
|
||||||
pub mod manager;
|
pub mod manager;
|
||||||
mod queue;
|
mod queue;
|
||||||
mod web_socket;
|
mod web_socket;
|
||||||
|
|
||||||
|
pub mod protobuf;
|
||||||
pub use manager::*;
|
pub use manager::*;
|
||||||
pub mod errors {
|
pub mod errors {
|
||||||
pub use flowy_error::{internal_error, ErrorCode, FlowyError};
|
pub use flowy_error::{internal_error, ErrorCode, FlowyError};
|
||||||
|
|
4
frontend/rust-lib/flowy-block/src/protobuf/mod.rs
Normal file
4
frontend/rust-lib/flowy-block/src/protobuf/mod.rs
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#![cfg_attr(rustfmt, rustfmt::skip)]
|
||||||
|
// Auto-generated, do not edit
|
||||||
|
mod model;
|
||||||
|
pub use model::*;
|
|
@ -17,7 +17,7 @@
|
||||||
#![allow(trivial_casts)]
|
#![allow(trivial_casts)]
|
||||||
#![allow(unused_imports)]
|
#![allow(unused_imports)]
|
||||||
#![allow(unused_results)]
|
#![allow(unused_results)]
|
||||||
//! Generated file from `share.proto`
|
//! Generated file from `entities.proto`
|
||||||
|
|
||||||
/// Generated files are compatible only with the same version
|
/// Generated files are compatible only with the same version
|
||||||
/// of protobuf runtime.
|
/// of protobuf runtime.
|
||||||
|
@ -457,12 +457,12 @@ impl ::protobuf::reflect::ProtobufValue for ExportType {
|
||||||
}
|
}
|
||||||
|
|
||||||
static file_descriptor_proto_data: &'static [u8] = b"\
|
static file_descriptor_proto_data: &'static [u8] = b"\
|
||||||
\n\x0bshare.proto\"V\n\rExportPayload\x12\x17\n\x07view_id\x18\x01\x20\
|
\n\x0eentities.proto\"V\n\rExportPayload\x12\x17\n\x07view_id\x18\x01\
|
||||||
\x01(\tR\x06viewId\x12,\n\x0bexport_type\x18\x02\x20\x01(\x0e2\x0b.Expor\
|
\x20\x01(\tR\x06viewId\x12,\n\x0bexport_type\x18\x02\x20\x01(\x0e2\x0b.E\
|
||||||
tTypeR\nexportType\"N\n\nExportData\x12\x12\n\x04data\x18\x01\x20\x01(\t\
|
xportTypeR\nexportType\"N\n\nExportData\x12\x12\n\x04data\x18\x01\x20\
|
||||||
R\x04data\x12,\n\x0bexport_type\x18\x02\x20\x01(\x0e2\x0b.ExportTypeR\ne\
|
\x01(\tR\x04data\x12,\n\x0bexport_type\x18\x02\x20\x01(\x0e2\x0b.ExportT\
|
||||||
xportType*.\n\nExportType\x12\x08\n\x04Text\x10\0\x12\x0c\n\x08Markdown\
|
ypeR\nexportType*.\n\nExportType\x12\x08\n\x04Text\x10\0\x12\x0c\n\x08Ma\
|
||||||
\x10\x01\x12\x08\n\x04Link\x10\x02b\x06proto3\
|
rkdown\x10\x01\x12\x08\n\x04Link\x10\x02b\x06proto3\
|
||||||
";
|
";
|
||||||
|
|
||||||
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
|
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
|
|
@ -0,0 +1,91 @@
|
||||||
|
// This file is generated by rust-protobuf 2.25.2. Do not edit
|
||||||
|
// @generated
|
||||||
|
|
||||||
|
// https://github.com/rust-lang/rust-clippy/issues/702
|
||||||
|
#![allow(unknown_lints)]
|
||||||
|
#![allow(clippy::all)]
|
||||||
|
|
||||||
|
#![allow(unused_attributes)]
|
||||||
|
#![cfg_attr(rustfmt, rustfmt::skip)]
|
||||||
|
|
||||||
|
#![allow(box_pointers)]
|
||||||
|
#![allow(dead_code)]
|
||||||
|
#![allow(missing_docs)]
|
||||||
|
#![allow(non_camel_case_types)]
|
||||||
|
#![allow(non_snake_case)]
|
||||||
|
#![allow(non_upper_case_globals)]
|
||||||
|
#![allow(trivial_casts)]
|
||||||
|
#![allow(unused_imports)]
|
||||||
|
#![allow(unused_results)]
|
||||||
|
//! Generated file from `event_map.proto`
|
||||||
|
|
||||||
|
/// Generated files are compatible only with the same version
|
||||||
|
/// of protobuf runtime.
|
||||||
|
// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_25_2;
|
||||||
|
|
||||||
|
#[derive(Clone,PartialEq,Eq,Debug,Hash)]
|
||||||
|
pub enum BlockEvent {
|
||||||
|
ApplyDocDelta = 0,
|
||||||
|
ExportDocument = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::protobuf::ProtobufEnum for BlockEvent {
|
||||||
|
fn value(&self) -> i32 {
|
||||||
|
*self as i32
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_i32(value: i32) -> ::std::option::Option<BlockEvent> {
|
||||||
|
match value {
|
||||||
|
0 => ::std::option::Option::Some(BlockEvent::ApplyDocDelta),
|
||||||
|
1 => ::std::option::Option::Some(BlockEvent::ExportDocument),
|
||||||
|
_ => ::std::option::Option::None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn values() -> &'static [Self] {
|
||||||
|
static values: &'static [BlockEvent] = &[
|
||||||
|
BlockEvent::ApplyDocDelta,
|
||||||
|
BlockEvent::ExportDocument,
|
||||||
|
];
|
||||||
|
values
|
||||||
|
}
|
||||||
|
|
||||||
|
fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
|
||||||
|
static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT;
|
||||||
|
descriptor.get(|| {
|
||||||
|
::protobuf::reflect::EnumDescriptor::new_pb_name::<BlockEvent>("BlockEvent", file_descriptor_proto())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::std::marker::Copy for BlockEvent {
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::std::default::Default for BlockEvent {
|
||||||
|
fn default() -> Self {
|
||||||
|
BlockEvent::ApplyDocDelta
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ::protobuf::reflect::ProtobufValue for BlockEvent {
|
||||||
|
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
|
||||||
|
::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static file_descriptor_proto_data: &'static [u8] = b"\
|
||||||
|
\n\x0fevent_map.proto*3\n\nBlockEvent\x12\x11\n\rApplyDocDelta\x10\0\x12\
|
||||||
|
\x12\n\x0eExportDocument\x10\x01b\x06proto3\
|
||||||
|
";
|
||||||
|
|
||||||
|
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
|
||||||
|
|
||||||
|
fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
|
||||||
|
::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
|
||||||
|
file_descriptor_proto_lazy.get(|| {
|
||||||
|
parse_descriptor_proto()
|
||||||
|
})
|
||||||
|
}
|
8
frontend/rust-lib/flowy-block/src/protobuf/model/mod.rs
Normal file
8
frontend/rust-lib/flowy-block/src/protobuf/model/mod.rs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#![cfg_attr(rustfmt, rustfmt::skip)]
|
||||||
|
// Auto-generated, do not edit
|
||||||
|
|
||||||
|
mod entities;
|
||||||
|
pub use entities::*;
|
||||||
|
|
||||||
|
mod event_map;
|
||||||
|
pub use event_map::*;
|
|
@ -0,0 +1,6 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
enum BlockEvent {
|
||||||
|
ApplyDocDelta = 0;
|
||||||
|
ExportDocument = 1;
|
||||||
|
}
|
|
@ -27,7 +27,7 @@ impl EditorTest {
|
||||||
let sdk = FlowySDKTest::default();
|
let sdk = FlowySDKTest::default();
|
||||||
let _ = sdk.init_user().await;
|
let _ = sdk.init_user().await;
|
||||||
let test = ViewTest::new(&sdk).await;
|
let test = ViewTest::new(&sdk).await;
|
||||||
let editor = sdk.document_manager.open_block(&test.view.id).await.unwrap();
|
let editor = sdk.block_manager.open_block(&test.view.id).await.unwrap();
|
||||||
Self { sdk, editor }
|
Self { sdk, editor }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
controller::FolderManager,
|
|
||||||
entities::{
|
entities::{
|
||||||
app::{App, AppId, CreateAppParams, UpdateAppParams},
|
app::{App, AppId, CreateAppParams, UpdateAppParams},
|
||||||
trash::{RepeatedTrash, RepeatedTrashId},
|
trash::{RepeatedTrash, RepeatedTrashId},
|
||||||
|
@ -7,6 +6,7 @@ use crate::{
|
||||||
workspace::{CreateWorkspaceParams, RepeatedWorkspace, UpdateWorkspaceParams, Workspace, WorkspaceId},
|
workspace::{CreateWorkspaceParams, RepeatedWorkspace, UpdateWorkspaceParams, Workspace, WorkspaceId},
|
||||||
},
|
},
|
||||||
errors::FlowyError,
|
errors::FlowyError,
|
||||||
|
manager::FolderManager,
|
||||||
services::{app::event_handler::*, trash::event_handler::*, view::event_handler::*, workspace::event_handler::*},
|
services::{app::event_handler::*, trash::event_handler::*, view::event_handler::*, workspace::event_handler::*},
|
||||||
};
|
};
|
||||||
use flowy_database::DBConnection;
|
use flowy_database::DBConnection;
|
||||||
|
@ -64,8 +64,7 @@ pub fn create(folder: Arc<FolderManager>) -> Module {
|
||||||
.event(FolderEvent::DeleteView, delete_view_handler)
|
.event(FolderEvent::DeleteView, delete_view_handler)
|
||||||
.event(FolderEvent::DuplicateView, duplicate_view_handler)
|
.event(FolderEvent::DuplicateView, duplicate_view_handler)
|
||||||
.event(FolderEvent::OpenView, open_view_handler)
|
.event(FolderEvent::OpenView, open_view_handler)
|
||||||
.event(FolderEvent::CloseView, close_view_handler)
|
.event(FolderEvent::CloseView, close_view_handler);
|
||||||
.event(FolderEvent::ApplyDocDelta, block_delta_handler);
|
|
||||||
|
|
||||||
module = module
|
module = module
|
||||||
.event(FolderEvent::ReadTrash, read_trash_handler)
|
.event(FolderEvent::ReadTrash, read_trash_handler)
|
||||||
|
@ -74,8 +73,6 @@ pub fn create(folder: Arc<FolderManager>) -> Module {
|
||||||
.event(FolderEvent::RestoreAllTrash, restore_all_trash_handler)
|
.event(FolderEvent::RestoreAllTrash, restore_all_trash_handler)
|
||||||
.event(FolderEvent::DeleteAllTrash, delete_all_trash_handler);
|
.event(FolderEvent::DeleteAllTrash, delete_all_trash_handler);
|
||||||
|
|
||||||
module = module.event(FolderEvent::ExportDocument, export_handler);
|
|
||||||
|
|
||||||
module
|
module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@ mod macros;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate flowy_database;
|
extern crate flowy_database;
|
||||||
|
|
||||||
pub mod controller;
|
|
||||||
mod dart_notification;
|
mod dart_notification;
|
||||||
|
pub mod manager;
|
||||||
pub mod protobuf;
|
pub mod protobuf;
|
||||||
mod util;
|
mod util;
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ impl FolderManager {
|
||||||
user: Arc<dyn WorkspaceUser>,
|
user: Arc<dyn WorkspaceUser>,
|
||||||
cloud_service: Arc<dyn FolderCouldServiceV1>,
|
cloud_service: Arc<dyn FolderCouldServiceV1>,
|
||||||
database: Arc<dyn WorkspaceDatabase>,
|
database: Arc<dyn WorkspaceDatabase>,
|
||||||
document_manager: Arc<BlockManager>,
|
block_manager: Arc<BlockManager>,
|
||||||
web_socket: Arc<dyn RevisionWebSocket>,
|
web_socket: Arc<dyn RevisionWebSocket>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
if let Ok(user_id) = user.user_id() {
|
if let Ok(user_id) = user.user_id() {
|
||||||
|
@ -95,7 +95,7 @@ impl FolderManager {
|
||||||
persistence.clone(),
|
persistence.clone(),
|
||||||
cloud_service.clone(),
|
cloud_service.clone(),
|
||||||
trash_controller.clone(),
|
trash_controller.clone(),
|
||||||
document_manager,
|
block_manager,
|
||||||
));
|
));
|
||||||
|
|
||||||
let app_controller = Arc::new(AppController::new(
|
let app_controller = Arc::new(AppController::new(
|
|
@ -4,7 +4,7 @@ use flowy_collaboration::{
|
||||||
entities::{revision::Revision, ws_data::ServerRevisionWSData},
|
entities::{revision::Revision, ws_data::ServerRevisionWSData},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::controller::FolderId;
|
use crate::manager::FolderId;
|
||||||
use flowy_collaboration::util::make_delta_from_revisions;
|
use flowy_collaboration::util::make_delta_from_revisions;
|
||||||
use flowy_error::{FlowyError, FlowyResult};
|
use flowy_error::{FlowyError, FlowyResult};
|
||||||
use flowy_sync::{
|
use flowy_sync::{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::controller::FolderId;
|
use crate::manager::FolderId;
|
||||||
use crate::{
|
use crate::{
|
||||||
event_map::WorkspaceDatabase,
|
event_map::WorkspaceDatabase,
|
||||||
services::persistence::{AppTableSql, TrashTableSql, ViewTableSql, WorkspaceTableSql},
|
services::persistence::{AppTableSql, TrashTableSql, ViewTableSql, WorkspaceTableSql},
|
||||||
|
|
|
@ -12,8 +12,8 @@ use tokio::sync::RwLock;
|
||||||
pub use version_1::{app_sql::*, trash_sql::*, v1_impl::V1Transaction, view_sql::*, workspace_sql::*};
|
pub use version_1::{app_sql::*, trash_sql::*, v1_impl::V1Transaction, view_sql::*, workspace_sql::*};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
controller::FolderId,
|
|
||||||
event_map::WorkspaceDatabase,
|
event_map::WorkspaceDatabase,
|
||||||
|
manager::FolderId,
|
||||||
services::{folder_editor::ClientFolderEditor, persistence::migration::FolderMigration},
|
services::{folder_editor::ClientFolderEditor, persistence::migration::FolderMigration},
|
||||||
};
|
};
|
||||||
use flowy_error::{FlowyError, FlowyResult};
|
use flowy_error::{FlowyError, FlowyResult};
|
||||||
|
|
|
@ -23,8 +23,6 @@ use crate::{
|
||||||
};
|
};
|
||||||
use flowy_block::BlockManager;
|
use flowy_block::BlockManager;
|
||||||
use flowy_database::kv::KV;
|
use flowy_database::kv::KV;
|
||||||
use flowy_folder_data_model::entities::share::{ExportData, ExportParams};
|
|
||||||
|
|
||||||
use lib_infra::uuid;
|
use lib_infra::uuid;
|
||||||
|
|
||||||
const LATEST_VIEW_ID: &str = "latest_view_id";
|
const LATEST_VIEW_ID: &str = "latest_view_id";
|
||||||
|
@ -179,16 +177,6 @@ impl ViewController {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(level = "debug", skip(self, params), err)]
|
|
||||||
pub(crate) async fn export_view(&self, params: ExportParams) -> Result<ExportData, FlowyError> {
|
|
||||||
let editor = self.block_manager.open_block(¶ms.view_id).await?;
|
|
||||||
let delta_json = editor.block_json().await?;
|
|
||||||
Ok(ExportData {
|
|
||||||
data: delta_json,
|
|
||||||
export_type: params.export_type,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// belong_to_id will be the app_id or view_id.
|
// belong_to_id will be the app_id or view_id.
|
||||||
#[tracing::instrument(level = "debug", skip(self), err)]
|
#[tracing::instrument(level = "debug", skip(self), err)]
|
||||||
pub(crate) async fn read_views_belong_to(&self, belong_to_id: &str) -> Result<RepeatedView, FlowyError> {
|
pub(crate) async fn read_views_belong_to(&self, belong_to_id: &str) -> Result<RepeatedView, FlowyError> {
|
||||||
|
|
|
@ -9,7 +9,6 @@ use crate::{
|
||||||
services::{TrashController, ViewController},
|
services::{TrashController, ViewController},
|
||||||
};
|
};
|
||||||
use flowy_collaboration::entities::document_info::BlockDelta;
|
use flowy_collaboration::entities::document_info::BlockDelta;
|
||||||
use flowy_folder_data_model::entities::share::{ExportData, ExportParams, ExportPayload};
|
|
||||||
use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
|
use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
|
||||||
use std::{convert::TryInto, sync::Arc};
|
use std::{convert::TryInto, sync::Arc};
|
||||||
|
|
||||||
|
@ -46,14 +45,6 @@ pub(crate) async fn update_view_handler(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn block_delta_handler(
|
|
||||||
data: Data<BlockDelta>,
|
|
||||||
controller: AppData<Arc<ViewController>>,
|
|
||||||
) -> DataResult<BlockDelta, FlowyError> {
|
|
||||||
let block_delta = controller.receive_delta(data.into_inner()).await?;
|
|
||||||
data_result(block_delta)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) async fn delete_view_handler(
|
pub(crate) async fn delete_view_handler(
|
||||||
data: Data<RepeatedViewId>,
|
data: Data<RepeatedViewId>,
|
||||||
view_controller: AppData<Arc<ViewController>>,
|
view_controller: AppData<Arc<ViewController>>,
|
||||||
|
@ -102,13 +93,3 @@ pub(crate) async fn duplicate_view_handler(
|
||||||
let _ = controller.duplicate_view(&view_id.value).await?;
|
let _ = controller.duplicate_view(&view_id.value).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(skip(data, controller), err)]
|
|
||||||
pub(crate) async fn export_handler(
|
|
||||||
data: Data<ExportPayload>,
|
|
||||||
controller: AppData<Arc<ViewController>>,
|
|
||||||
) -> DataResult<ExportData, FlowyError> {
|
|
||||||
let params: ExportParams = data.into_inner().try_into()?;
|
|
||||||
let data = controller.export_view(params).await?;
|
|
||||||
data_result(data)
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
controller::FolderManager,
|
|
||||||
dart_notification::{send_dart_notification, FolderNotification},
|
dart_notification::{send_dart_notification, FolderNotification},
|
||||||
errors::FlowyError,
|
errors::FlowyError,
|
||||||
|
manager::FolderManager,
|
||||||
services::{get_current_workspace, read_local_workspace_apps, WorkspaceController},
|
services::{get_current_workspace, read_local_workspace_apps, WorkspaceController},
|
||||||
};
|
};
|
||||||
use flowy_folder_data_model::entities::{
|
use flowy_folder_data_model::entities::{
|
||||||
|
|
|
@ -13,7 +13,7 @@ flowy-net = { path = "../flowy-net" }
|
||||||
flowy-folder = { path = "../flowy-folder", default-features = false }
|
flowy-folder = { path = "../flowy-folder", default-features = false }
|
||||||
flowy-grid = { path = "../flowy-grid", default-features = false }
|
flowy-grid = { path = "../flowy-grid", default-features = false }
|
||||||
flowy-database = { path = "../flowy-database" }
|
flowy-database = { path = "../flowy-database" }
|
||||||
flowy-block = { path = "../flowy-block" }
|
flowy-block = { path = "../flowy-block", default-features = false }
|
||||||
flowy-sync = { path = "../flowy-sync" }
|
flowy-sync = { path = "../flowy-sync" }
|
||||||
|
|
||||||
tracing = { version = "0.1" }
|
tracing = { version = "0.1" }
|
||||||
|
@ -40,4 +40,4 @@ futures-util = "0.3.15"
|
||||||
[features]
|
[features]
|
||||||
http_server = ["flowy-user/http_server", "flowy-folder/http_server", "flowy-block/http_server"]
|
http_server = ["flowy-user/http_server", "flowy-folder/http_server", "flowy-block/http_server"]
|
||||||
use_bunyan = ["lib-log/use_bunyan"]
|
use_bunyan = ["lib-log/use_bunyan"]
|
||||||
dart = ["flowy-user/dart", "flowy-net/dart", "flowy-folder/dart", "flowy-collaboration/dart", "flowy-grid/dart"]
|
dart = ["flowy-user/dart", "flowy-net/dart", "flowy-folder/dart", "flowy-collaboration/dart", "flowy-grid/dart", "flowy-block/dart"]
|
||||||
|
|
|
@ -3,9 +3,9 @@ use flowy_block::BlockManager;
|
||||||
use flowy_collaboration::entities::ws_data::ClientRevisionWSData;
|
use flowy_collaboration::entities::ws_data::ClientRevisionWSData;
|
||||||
use flowy_database::ConnectionPool;
|
use flowy_database::ConnectionPool;
|
||||||
use flowy_folder::{
|
use flowy_folder::{
|
||||||
controller::FolderManager,
|
|
||||||
errors::{internal_error, FlowyError},
|
errors::{internal_error, FlowyError},
|
||||||
event_map::{FolderCouldServiceV1, WorkspaceDatabase, WorkspaceUser},
|
event_map::{FolderCouldServiceV1, WorkspaceDatabase, WorkspaceUser},
|
||||||
|
manager::FolderManager,
|
||||||
};
|
};
|
||||||
use flowy_net::ClientServerConfiguration;
|
use flowy_net::ClientServerConfiguration;
|
||||||
use flowy_net::{
|
use flowy_net::{
|
||||||
|
@ -24,7 +24,7 @@ impl FolderDepsResolver {
|
||||||
local_server: Option<Arc<LocalServer>>,
|
local_server: Option<Arc<LocalServer>>,
|
||||||
user_session: Arc<UserSession>,
|
user_session: Arc<UserSession>,
|
||||||
server_config: &ClientServerConfiguration,
|
server_config: &ClientServerConfiguration,
|
||||||
document_manager: &Arc<BlockManager>,
|
block_manager: &Arc<BlockManager>,
|
||||||
ws_conn: Arc<FlowyWebSocketConnect>,
|
ws_conn: Arc<FlowyWebSocketConnect>,
|
||||||
) -> Arc<FolderManager> {
|
) -> Arc<FolderManager> {
|
||||||
let user: Arc<dyn WorkspaceUser> = Arc::new(WorkspaceUserImpl(user_session.clone()));
|
let user: Arc<dyn WorkspaceUser> = Arc::new(WorkspaceUserImpl(user_session.clone()));
|
||||||
|
@ -36,14 +36,7 @@ impl FolderDepsResolver {
|
||||||
};
|
};
|
||||||
|
|
||||||
let folder_manager = Arc::new(
|
let folder_manager = Arc::new(
|
||||||
FolderManager::new(
|
FolderManager::new(user.clone(), cloud_service, database, block_manager.clone(), web_socket).await,
|
||||||
user.clone(),
|
|
||||||
cloud_service,
|
|
||||||
database,
|
|
||||||
document_manager.clone(),
|
|
||||||
web_socket,
|
|
||||||
)
|
|
||||||
.await,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if let (Ok(user_id), Ok(token)) = (user.user_id(), user.token()) {
|
if let (Ok(user_id), Ok(token)) = (user.user_id(), user.token()) {
|
||||||
|
|
|
@ -4,7 +4,7 @@ pub use flowy_net::get_client_server_configuration;
|
||||||
|
|
||||||
use crate::deps_resolve::*;
|
use crate::deps_resolve::*;
|
||||||
use flowy_block::BlockManager;
|
use flowy_block::BlockManager;
|
||||||
use flowy_folder::{controller::FolderManager, errors::FlowyError};
|
use flowy_folder::{errors::FlowyError, manager::FolderManager};
|
||||||
use flowy_grid::manager::GridManager;
|
use flowy_grid::manager::GridManager;
|
||||||
use flowy_net::ClientServerConfiguration;
|
use flowy_net::ClientServerConfiguration;
|
||||||
use flowy_net::{
|
use flowy_net::{
|
||||||
|
@ -87,7 +87,7 @@ pub struct FlowySDK {
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
config: FlowySDKConfig,
|
config: FlowySDKConfig,
|
||||||
pub user_session: Arc<UserSession>,
|
pub user_session: Arc<UserSession>,
|
||||||
pub document_manager: Arc<BlockManager>,
|
pub block_manager: Arc<BlockManager>,
|
||||||
pub folder_manager: Arc<FolderManager>,
|
pub folder_manager: Arc<FolderManager>,
|
||||||
pub grid_manager: Arc<GridManager>,
|
pub grid_manager: Arc<GridManager>,
|
||||||
pub dispatcher: Arc<EventDispatcher>,
|
pub dispatcher: Arc<EventDispatcher>,
|
||||||
|
@ -102,9 +102,9 @@ impl FlowySDK {
|
||||||
tracing::debug!("🔥 {:?}", config);
|
tracing::debug!("🔥 {:?}", config);
|
||||||
let runtime = tokio_default_runtime().unwrap();
|
let runtime = tokio_default_runtime().unwrap();
|
||||||
let (local_server, ws_conn) = mk_local_server(&config.server_config);
|
let (local_server, ws_conn) = mk_local_server(&config.server_config);
|
||||||
let (user_session, document_manager, folder_manager, local_server, grid_manager) = runtime.block_on(async {
|
let (user_session, block_manager, folder_manager, local_server, grid_manager) = runtime.block_on(async {
|
||||||
let user_session = mk_user_session(&config, &local_server, &config.server_config);
|
let user_session = mk_user_session(&config, &local_server, &config.server_config);
|
||||||
let document_manager = BlockDepsResolver::resolve(
|
let block_manager = BlockDepsResolver::resolve(
|
||||||
local_server.clone(),
|
local_server.clone(),
|
||||||
ws_conn.clone(),
|
ws_conn.clone(),
|
||||||
user_session.clone(),
|
user_session.clone(),
|
||||||
|
@ -115,7 +115,7 @@ impl FlowySDK {
|
||||||
local_server.clone(),
|
local_server.clone(),
|
||||||
user_session.clone(),
|
user_session.clone(),
|
||||||
&config.server_config,
|
&config.server_config,
|
||||||
&document_manager,
|
&block_manager,
|
||||||
ws_conn.clone(),
|
ws_conn.clone(),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
@ -126,17 +126,11 @@ impl FlowySDK {
|
||||||
local_server.run();
|
local_server.run();
|
||||||
}
|
}
|
||||||
ws_conn.init().await;
|
ws_conn.init().await;
|
||||||
(
|
(user_session, block_manager, folder_manager, local_server, grid_manager)
|
||||||
user_session,
|
|
||||||
document_manager,
|
|
||||||
folder_manager,
|
|
||||||
local_server,
|
|
||||||
grid_manager,
|
|
||||||
)
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let dispatcher = Arc::new(EventDispatcher::construct(runtime, || {
|
let dispatcher = Arc::new(EventDispatcher::construct(runtime, || {
|
||||||
mk_modules(&ws_conn, &folder_manager, &grid_manager, &user_session)
|
mk_modules(&ws_conn, &folder_manager, &grid_manager, &user_session, &block_manager)
|
||||||
}));
|
}));
|
||||||
|
|
||||||
_start_listening(&dispatcher, &ws_conn, &user_session, &folder_manager);
|
_start_listening(&dispatcher, &ws_conn, &user_session, &folder_manager);
|
||||||
|
@ -144,7 +138,7 @@ impl FlowySDK {
|
||||||
Self {
|
Self {
|
||||||
config,
|
config,
|
||||||
user_session,
|
user_session,
|
||||||
document_manager,
|
block_manager,
|
||||||
folder_manager,
|
folder_manager,
|
||||||
grid_manager,
|
grid_manager,
|
||||||
dispatcher,
|
dispatcher,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use flowy_folder::controller::FolderManager;
|
use flowy_block::BlockManager;
|
||||||
|
use flowy_folder::manager::FolderManager;
|
||||||
use flowy_grid::manager::GridManager;
|
use flowy_grid::manager::GridManager;
|
||||||
use flowy_net::ws::connection::FlowyWebSocketConnect;
|
use flowy_net::ws::connection::FlowyWebSocketConnect;
|
||||||
use flowy_user::services::UserSession;
|
use flowy_user::services::UserSession;
|
||||||
|
@ -10,6 +11,7 @@ pub fn mk_modules(
|
||||||
folder_manager: &Arc<FolderManager>,
|
folder_manager: &Arc<FolderManager>,
|
||||||
grid_manager: &Arc<GridManager>,
|
grid_manager: &Arc<GridManager>,
|
||||||
user_session: &Arc<UserSession>,
|
user_session: &Arc<UserSession>,
|
||||||
|
block_manager: &Arc<BlockManager>,
|
||||||
) -> Vec<Module> {
|
) -> Vec<Module> {
|
||||||
let user_module = mk_user_module(user_session.clone());
|
let user_module = mk_user_module(user_session.clone());
|
||||||
let folder_module = mk_folder_module(folder_manager.clone());
|
let folder_module = mk_folder_module(folder_manager.clone());
|
||||||
|
@ -33,3 +35,7 @@ fn mk_network_module(ws_conn: Arc<FlowyWebSocketConnect>) -> Module {
|
||||||
fn mk_grid_module(grid_manager: Arc<GridManager>) -> Module {
|
fn mk_grid_module(grid_manager: Arc<GridManager>) -> Module {
|
||||||
flowy_grid::event_map::create(grid_manager)
|
flowy_grid::event_map::create(grid_manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn mk_block_module(block_manager: Arc<BlockManager>) -> Module {
|
||||||
|
flowy_block::event_map::create(block_manager)
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
pub mod app;
|
pub mod app;
|
||||||
pub mod share;
|
|
||||||
pub mod trash;
|
pub mod trash;
|
||||||
pub mod view;
|
pub mod view;
|
||||||
pub mod workspace;
|
pub mod workspace;
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
#![cfg_attr(rustfmt, rustfmt::skip)]
|
#![cfg_attr(rustfmt, rustfmt::skip)]
|
||||||
// Auto-generated, do not edit
|
// Auto-generated, do not edit
|
||||||
|
|
||||||
mod share;
|
|
||||||
pub use share::*;
|
|
||||||
|
|
||||||
mod app;
|
mod app;
|
||||||
pub use app::*;
|
pub use app::*;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue