From 347245aaa1558f7596b776c0d02b6ba3da09940f Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Thu, 26 Jan 2023 15:40:23 +0800 Subject: [PATCH] Refactor/dart notification (#1740) * refactor: notification send * refactor: rename dart-notify to flowy-notification * ci: fix clippy wanrings * ci: fix rust code converage --- frontend/.vscode/tasks.json | 4 +- .../lib/core/folder_notification.dart | 4 +- .../app_flowy/lib/core/grid_notification.dart | 4 +- .../lib/core/notification_helper.dart | 2 +- .../app_flowy/lib/core/user_notification.dart | 2 +- .../board/application/board_listener.dart | 2 +- .../board/application/group_listener.dart | 2 +- .../grid/application/cell/cell_listener.dart | 2 +- .../application/field/field_listener.dart | 2 +- .../grid/application/field/grid_listener.dart | 2 +- .../application/filter/filter_listener.dart | 2 +- .../grid/application/row/row_listener.dart | 2 +- .../application/setting/setting_listener.dart | 2 +- .../grid/application/sort/sort_listener.dart | 2 +- .../application/view/grid_view_listener.dart | 2 +- .../trash/application/trash_listener.dart | 4 +- .../lib/user/application/user_listener.dart | 6 +- .../application/app/app_listener.dart | 4 +- .../application/view/view_listener.dart | 4 +- .../workspace/workspace_listener.dart | 2 +- .../appflowy_backend/lib/rust_stream.dart | 2 +- frontend/app_flowy/pubspec.lock | 2 +- frontend/appflowy_tauri/src-tauri/Cargo.lock | 38 +++++++------ frontend/appflowy_tauri/src-tauri/Cargo.toml | 1 + .../appflowy_tauri/src-tauri/src/event.rs | 15 ----- frontend/appflowy_tauri/src-tauri/src/main.rs | 6 +- .../src-tauri/src/notification.rs | 35 ++++++++++++ .../appflowy_tauri/src/appflowy_app/App.tsx | 2 +- .../services/backend/notifications/index.ts | 0 frontend/rust-lib/Cargo.lock | 39 ++++++------- frontend/rust-lib/Cargo.toml | 2 +- frontend/rust-lib/dart-ffi/Cargo.toml | 2 +- frontend/rust-lib/dart-ffi/src/lib.rs | 5 +- .../rust-lib/dart-ffi/src/notification/mod.rs | 3 + .../dart-ffi/src/notification/sender.rs | 25 ++++++++ frontend/rust-lib/dart-notify/src/dart/mod.rs | 3 - .../dart-notify/src/dart/stream_sender.rs | 57 ------------------- frontend/rust-lib/flowy-core/src/lib.rs | 2 +- frontend/rust-lib/flowy-document/Cargo.toml | 6 +- .../rust-lib/flowy-document/src/manager.rs | 4 +- frontend/rust-lib/flowy-folder/Cargo.toml | 6 +- frontend/rust-lib/flowy-folder/Flowy.toml | 2 +- frontend/rust-lib/flowy-folder/src/lib.rs | 2 +- frontend/rust-lib/flowy-folder/src/manager.rs | 2 +- .../{dart_notification.rs => notification.rs} | 10 ++-- .../src/services/app/controller.rs | 2 +- .../src/services/trash/controller.rs | 10 ++-- .../src/services/view/controller.rs | 2 +- .../src/services/workspace/controller.rs | 2 +- .../src/services/workspace/event_handler.rs | 2 +- frontend/rust-lib/flowy-grid/Cargo.toml | 6 +- frontend/rust-lib/flowy-grid/Flowy.toml | 2 +- frontend/rust-lib/flowy-grid/src/lib.rs | 2 +- frontend/rust-lib/flowy-grid/src/manager.rs | 2 +- .../{dart_notification.rs => notification.rs} | 6 +- .../flowy-grid/src/services/block_manager.rs | 2 +- .../date_type_option/date_tests.rs | 2 +- .../src/services/filter/controller.rs | 2 +- .../flowy-grid/src/services/grid_editor.rs | 2 +- .../src/services/group/controller.rs | 2 +- .../group/controller_impls/url_controller.rs | 2 +- .../services/view_editor/changed_notifier.rs | 2 +- .../src/services/view_editor/editor.rs | 2 +- .../flowy-grid/tests/grid/cell_test/test.rs | 5 +- .../Cargo.toml | 6 +- .../Flowy.toml | 0 .../build.rs | 0 .../src/entities/mod.rs | 0 .../src/entities/subject.rs | 2 +- .../src/lib.rs | 46 ++++++++++----- .../flowy-revision/src/rev_manager.rs | 6 +- .../flowy-revision/src/rev_persistence.rs | 12 ++-- frontend/rust-lib/flowy-user/Cargo.toml | 6 +- frontend/rust-lib/flowy-user/Flowy.toml | 2 +- frontend/rust-lib/flowy-user/src/lib.rs | 2 +- .../{dart_notification.rs => notification.rs} | 6 +- .../flowy-user/src/services/user_session.rs | 2 +- frontend/scripts/makefile/flutter.toml | 22 ++++++- frontend/scripts/makefile/tests.toml | 2 +- frontend/scripts/makefile/tool.toml | 2 +- 80 files changed, 269 insertions(+), 231 deletions(-) delete mode 100644 frontend/appflowy_tauri/src-tauri/src/event.rs create mode 100644 frontend/appflowy_tauri/src-tauri/src/notification.rs create mode 100644 frontend/appflowy_tauri/src/services/backend/notifications/index.ts create mode 100644 frontend/rust-lib/dart-ffi/src/notification/mod.rs create mode 100644 frontend/rust-lib/dart-ffi/src/notification/sender.rs delete mode 100644 frontend/rust-lib/dart-notify/src/dart/mod.rs delete mode 100644 frontend/rust-lib/dart-notify/src/dart/stream_sender.rs rename frontend/rust-lib/flowy-folder/src/{dart_notification.rs => notification.rs} (81%) rename frontend/rust-lib/flowy-grid/src/{dart_notification.rs => notification.rs} (88%) rename frontend/rust-lib/{dart-notify => flowy-notification}/Cargo.toml (81%) rename frontend/rust-lib/{dart-notify => flowy-notification}/Flowy.toml (100%) rename frontend/rust-lib/{dart-notify => flowy-notification}/build.rs (100%) rename frontend/rust-lib/{dart-notify => flowy-notification}/src/entities/mod.rs (100%) rename frontend/rust-lib/{dart-notify => flowy-notification}/src/entities/subject.rs (95%) rename frontend/rust-lib/{dart-notify => flowy-notification}/src/lib.rs (50%) rename frontend/rust-lib/flowy-user/src/{dart_notification.rs => notification.rs} (74%) diff --git a/frontend/.vscode/tasks.json b/frontend/.vscode/tasks.json index c40b5390c9..b6b77a9377 100644 --- a/frontend/.vscode/tasks.json +++ b/frontend/.vscode/tasks.json @@ -166,9 +166,9 @@ } }, { - "label": "AF: Dart Clean", + "label": "AF: Flutter Clean", "type": "shell", - "command": "cargo make dart_clean", + "command": "cargo make flutter_clean", "group": "build", "options": { "cwd": "${workspaceFolder}" diff --git a/frontend/app_flowy/lib/core/folder_notification.dart b/frontend/app_flowy/lib/core/folder_notification.dart index d4c1d7c456..4b5d306eac 100644 --- a/frontend/app_flowy/lib/core/folder_notification.dart +++ b/frontend/app_flowy/lib/core/folder_notification.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy_backend/protobuf/dart-notify/protobuf.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/protobuf.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-folder/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart'; import 'package:appflowy_backend/rust_stream.dart'; import 'notification_helper.dart'; diff --git a/frontend/app_flowy/lib/core/grid_notification.dart b/frontend/app_flowy/lib/core/grid_notification.dart index 966165661c..befebe277b 100644 --- a/frontend/app_flowy/lib/core/grid_notification.dart +++ b/frontend/app_flowy/lib/core/grid_notification.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy_backend/protobuf/dart-notify/protobuf.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/protobuf.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:appflowy_backend/rust_stream.dart'; import 'notification_helper.dart'; diff --git a/frontend/app_flowy/lib/core/notification_helper.dart b/frontend/app_flowy/lib/core/notification_helper.dart index 6efc1f6ff6..5faed47730 100644 --- a/frontend/app_flowy/lib/core/notification_helper.dart +++ b/frontend/app_flowy/lib/core/notification_helper.dart @@ -1,5 +1,5 @@ import 'dart:typed_data'; -import 'package:appflowy_backend/protobuf/dart-notify/protobuf.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/protobuf.dart'; import 'package:dartz/dartz.dart'; class NotificationParser { diff --git a/frontend/app_flowy/lib/core/user_notification.dart b/frontend/app_flowy/lib/core/user_notification.dart index fc7f13fec0..36524e7e35 100644 --- a/frontend/app_flowy/lib/core/user_notification.dart +++ b/frontend/app_flowy/lib/core/user_notification.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy_backend/protobuf/dart-notify/protobuf.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/protobuf.dart'; import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/board/application/board_listener.dart b/frontend/app_flowy/lib/plugins/board/application/board_listener.dart index 32a85f6850..b64a6b6bed 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_listener.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_listener.dart @@ -3,7 +3,7 @@ import 'dart:typed_data'; import 'package:app_flowy/core/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/group.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/group_changeset.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/board/application/group_listener.dart b/frontend/app_flowy/lib/plugins/board/application/group_listener.dart index c6c9db77dc..65a7e18ef4 100644 --- a/frontend/app_flowy/lib/plugins/board/application/group_listener.dart +++ b/frontend/app_flowy/lib/plugins/board/application/group_listener.dart @@ -3,7 +3,7 @@ import 'dart:typed_data'; import 'package:app_flowy/core/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/group.pb.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/group_changeset.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_listener.dart index 5d1aa1dfb4..eb75e15610 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_listener.dart @@ -1,7 +1,7 @@ import 'package:app_flowy/core/grid_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:flowy_infra/notifier.dart'; import 'dart:async'; import 'dart:typed_data'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_listener.dart index e2c8b5d629..11a64f6c4f 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_listener.dart @@ -1,7 +1,7 @@ import 'package:app_flowy/core/grid_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:flowy_infra/notifier.dart'; import 'dart:async'; import 'dart:typed_data'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/grid_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/field/grid_listener.dart index 22d4050730..e09312f117 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/grid_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/grid_listener.dart @@ -1,7 +1,7 @@ import 'package:app_flowy/core/grid_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:flowy_infra/notifier.dart'; import 'dart:async'; import 'dart:typed_data'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/filter/filter_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/filter/filter_listener.dart index f84b5ea853..d2e2446eec 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/filter/filter_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/filter/filter_listener.dart @@ -3,7 +3,7 @@ import 'dart:typed_data'; import 'package:app_flowy/core/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/filter_changeset.pb.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/util.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_listener.dart index d5443a74e9..61aaa905be 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_listener.dart @@ -1,6 +1,6 @@ import 'package:app_flowy/core/grid_notification.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:flowy_infra/notifier.dart'; import 'dart:async'; import 'dart:typed_data'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart index 2d8d0551e8..a5c3cb5feb 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart @@ -4,7 +4,7 @@ import 'package:app_flowy/core/grid_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pbserver.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/setting_entities.pb.dart'; typedef UpdateSettingNotifiedValue = Either; diff --git a/frontend/app_flowy/lib/plugins/grid/application/sort/sort_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/sort/sort_listener.dart index a45cb6b6e2..8f60a1bb2c 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/sort/sort_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/sort/sort_listener.dart @@ -4,7 +4,7 @@ import 'package:app_flowy/core/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:dartz/dartz.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pbenum.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/sort_entities.pb.dart'; typedef SortNotifiedValue = Either; diff --git a/frontend/app_flowy/lib/plugins/grid/application/view/grid_view_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/view/grid_view_listener.dart index 9d498da631..3be22e9b79 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/view/grid_view_listener.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/view/grid_view_listener.dart @@ -5,7 +5,7 @@ import 'package:appflowy_backend/protobuf/flowy-grid/sort_entities.pb.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-grid/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-grid/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-grid/view_entities.pb.dart'; typedef GridRowsVisibilityNotifierValue diff --git a/frontend/app_flowy/lib/plugins/trash/application/trash_listener.dart b/frontend/app_flowy/lib/plugins/trash/application/trash_listener.dart index 697820acc1..142eb8f26e 100644 --- a/frontend/app_flowy/lib/plugins/trash/application/trash_listener.dart +++ b/frontend/app_flowy/lib/plugins/trash/application/trash_listener.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'dart:typed_data'; import 'package:app_flowy/core/folder_notification.dart'; import 'package:dartz/dartz.dart'; -import 'package:appflowy_backend/protobuf/dart-notify/subject.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-folder/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/trash.pb.dart'; import 'package:appflowy_backend/rust_stream.dart'; diff --git a/frontend/app_flowy/lib/user/application/user_listener.dart b/frontend/app_flowy/lib/user/application/user_listener.dart index 81a78550b8..106fc6e80b 100644 --- a/frontend/app_flowy/lib/user/application/user_listener.dart +++ b/frontend/app_flowy/lib/user/application/user_listener.dart @@ -7,10 +7,10 @@ import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'dart:typed_data'; import 'package:flowy_infra/notifier.dart'; -import 'package:appflowy_backend/protobuf/dart-notify/protobuf.dart'; -import 'package:appflowy_backend/protobuf/flowy-folder/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/protobuf.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-user/dart_notification.pb.dart' +import 'package:appflowy_backend/protobuf/flowy-user/notification.pb.dart' as user; import 'package:appflowy_backend/rust_stream.dart'; diff --git a/frontend/app_flowy/lib/workspace/application/app/app_listener.dart b/frontend/app_flowy/lib/workspace/application/app/app_listener.dart index 73ae9f5e3e..2a60750819 100644 --- a/frontend/app_flowy/lib/workspace/application/app/app_listener.dart +++ b/frontend/app_flowy/lib/workspace/application/app/app_listener.dart @@ -3,11 +3,11 @@ import 'dart:typed_data'; import 'package:app_flowy/core/folder_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/log.dart'; -import 'package:appflowy_backend/protobuf/dart-notify/subject.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-folder/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart'; import 'package:appflowy_backend/rust_stream.dart'; typedef AppDidUpdateCallback = void Function(AppPB app); diff --git a/frontend/app_flowy/lib/workspace/application/view/view_listener.dart b/frontend/app_flowy/lib/workspace/application/view/view_listener.dart index 8f0c1bb50f..dbf85fd2f2 100644 --- a/frontend/app_flowy/lib/workspace/application/view/view_listener.dart +++ b/frontend/app_flowy/lib/workspace/application/view/view_listener.dart @@ -2,10 +2,10 @@ import 'dart:async'; import 'dart:typed_data'; import 'package:app_flowy/core/folder_notification.dart'; import 'package:dartz/dartz.dart'; -import 'package:appflowy_backend/protobuf/dart-notify/subject.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-folder/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart'; import 'package:appflowy_backend/rust_stream.dart'; import 'package:flowy_infra/notifier.dart'; diff --git a/frontend/app_flowy/lib/workspace/application/workspace/workspace_listener.dart b/frontend/app_flowy/lib/workspace/application/workspace/workspace_listener.dart index 758a785e51..e38e6a65b7 100644 --- a/frontend/app_flowy/lib/workspace/application/workspace/workspace_listener.dart +++ b/frontend/app_flowy/lib/workspace/application/workspace/workspace_listener.dart @@ -8,7 +8,7 @@ import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart' import 'package:appflowy_backend/protobuf/flowy-folder/app.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/workspace.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; -import 'package:appflowy_backend/protobuf/flowy-folder/dart_notification.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/notification.pb.dart'; typedef AppListNotifyValue = Either, FlowyError>; typedef WorkspaceNotifyValue = Either; diff --git a/frontend/app_flowy/packages/appflowy_backend/lib/rust_stream.dart b/frontend/app_flowy/packages/appflowy_backend/lib/rust_stream.dart index 15d8378942..0fa8c3ffed 100644 --- a/frontend/app_flowy/packages/appflowy_backend/lib/rust_stream.dart +++ b/frontend/app_flowy/packages/appflowy_backend/lib/rust_stream.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'dart:typed_data'; import 'dart:ffi'; import 'package:appflowy_backend/log.dart'; -import 'protobuf/dart-notify/subject.pb.dart'; +import 'protobuf/flowy-notification/subject.pb.dart'; typedef ObserverCallback = void Function(SubscribeObject observable); diff --git a/frontend/app_flowy/pubspec.lock b/frontend/app_flowy/pubspec.lock index 8b779634f6..5709286955 100644 --- a/frontend/app_flowy/pubspec.lock +++ b/frontend/app_flowy/pubspec.lock @@ -1431,4 +1431,4 @@ packages: version: "3.1.1" sdks: dart: ">=2.18.0 <3.0.0" - flutter: ">=3.3.0" \ No newline at end of file + flutter: ">=3.3.0" diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.lock b/frontend/appflowy_tauri/src-tauri/Cargo.lock index 5c30601f3a..134f37a60b 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.lock +++ b/frontend/appflowy_tauri/src-tauri/Cargo.lock @@ -92,6 +92,7 @@ version = "0.0.0" dependencies = [ "bytes", "flowy-core", + "flowy-notification", "lib-dispatch", "serde", "serde_json", @@ -871,20 +872,6 @@ dependencies = [ "syn", ] -[[package]] -name = "dart-notify" -version = "0.1.0" -dependencies = [ - "allo-isolate", - "bytes", - "flowy-codegen", - "flowy-derive", - "lazy_static", - "lib-dispatch", - "log", - "protobuf", -] - [[package]] name = "dashmap" version = "5.4.0" @@ -1245,7 +1232,6 @@ dependencies = [ "async-stream", "bytes", "chrono", - "dart-notify", "dashmap", "diesel", "diesel_derives", @@ -1254,6 +1240,7 @@ dependencies = [ "flowy-derive", "flowy-error", "flowy-http-model", + "flowy-notification", "flowy-revision", "flowy-revision-persistence", "flowy-sync", @@ -1300,7 +1287,6 @@ name = "flowy-folder" version = "0.1.0" dependencies = [ "bytes", - "dart-notify", "diesel", "diesel_derives", "flowy-codegen", @@ -1309,6 +1295,7 @@ dependencies = [ "flowy-document", "flowy-error", "flowy-http-model", + "flowy-notification", "flowy-revision", "flowy-revision-persistence", "flowy-sync", @@ -1341,7 +1328,6 @@ dependencies = [ "bytes", "chrono", "crossbeam-utils", - "dart-notify", "dashmap", "diesel", "fancy-regex", @@ -1350,6 +1336,7 @@ dependencies = [ "flowy-derive", "flowy-error", "flowy-http-model", + "flowy-notification", "flowy-revision", "flowy-revision-persistence", "flowy-sync", @@ -1428,6 +1415,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "flowy-notification" +version = "0.1.0" +dependencies = [ + "allo-isolate", + "bytes", + "flowy-codegen", + "flowy-derive", + "lazy_static", + "lib-dispatch", + "protobuf", + "serde", + "tracing", +] + [[package]] name = "flowy-revision" version = "0.1.0" @@ -1502,7 +1504,6 @@ name = "flowy-user" version = "0.1.0" dependencies = [ "bytes", - "dart-notify", "diesel", "diesel_derives", "fancy-regex", @@ -1510,6 +1511,7 @@ dependencies = [ "flowy-database", "flowy-derive", "flowy-error", + "flowy-notification", "lazy_static", "lib-dispatch", "lib-infra", diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.toml b/frontend/appflowy_tauri/src-tauri/Cargo.toml index af8dcc7631..84ed6fe03a 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.toml +++ b/frontend/appflowy_tauri/src-tauri/Cargo.toml @@ -21,6 +21,7 @@ bytes = { version = "1.0" } tracing = { version = "0.1", features = ["log"] } lib-dispatch = { path = "../../rust-lib/lib-dispatch", features = ["use_serde"] } flowy-core = { path = "../../rust-lib/flowy-core", features = ["rev-sqlite","ts"] } +flowy-notification = { path = "../../rust-lib/flowy-notification", features = ["ts"] } [features] # by default Tauri runs in production mode diff --git a/frontend/appflowy_tauri/src-tauri/src/event.rs b/frontend/appflowy_tauri/src-tauri/src/event.rs deleted file mode 100644 index ff63a201c2..0000000000 --- a/frontend/appflowy_tauri/src-tauri/src/event.rs +++ /dev/null @@ -1,15 +0,0 @@ -use serde::Serialize; -use tauri::{AppHandle, Event, Manager, Wry}; - -#[allow(dead_code)] -pub const AF_EVENT: &str = "af-event"; -#[allow(dead_code)] -pub const AF_NOTIFICATION: &str = "af-notification"; - -#[tracing::instrument(level = "trace")] -pub fn on_event(app_handler: AppHandle, event: Event) {} - -#[allow(dead_code)] -pub fn send_notification(app_handler: AppHandle, payload: P) { - app_handler.emit_all(AF_NOTIFICATION, payload).unwrap(); -} diff --git a/frontend/appflowy_tauri/src-tauri/src/main.rs b/frontend/appflowy_tauri/src-tauri/src/main.rs index 5981ec712b..0f075ceb85 100644 --- a/frontend/appflowy_tauri/src-tauri/src/main.rs +++ b/frontend/appflowy_tauri/src-tauri/src/main.rs @@ -3,12 +3,13 @@ windows_subsystem = "windows" )] -mod event; mod init; +mod notification; mod request; -use event::*; +use flowy_notification::register_notification_sender; use init::*; +use notification::*; use request::*; use tauri::Manager; @@ -21,6 +22,7 @@ fn main() { .on_menu_event(|_menu| {}) .on_page_load(|window, _payload| { let app_handler = window.app_handle(); + register_notification_sender(TSNotificationSender::new(app_handler.clone())); // tauri::async_runtime::spawn(async move {}); window.listen_global(AF_EVENT, move |event| { on_event(app_handler.clone(), event); diff --git a/frontend/appflowy_tauri/src-tauri/src/notification.rs b/frontend/appflowy_tauri/src-tauri/src/notification.rs new file mode 100644 index 0000000000..ce0c05eb00 --- /dev/null +++ b/frontend/appflowy_tauri/src-tauri/src/notification.rs @@ -0,0 +1,35 @@ +use flowy_notification::entities::SubscribeObject; +use flowy_notification::NotificationSender; +use serde::Serialize; +use tauri::{AppHandle, Event, Manager, Wry}; + +#[allow(dead_code)] +pub const AF_EVENT: &str = "af-event"; +#[allow(dead_code)] +pub const AF_NOTIFICATION: &str = "af-notification"; + +#[tracing::instrument(level = "trace")] +pub fn on_event(app_handler: AppHandle, event: Event) {} + +#[allow(dead_code)] +pub fn send_notification(app_handler: AppHandle, payload: P) { + app_handler.emit_all(AF_NOTIFICATION, payload).unwrap(); +} + +pub struct TSNotificationSender { + handler: AppHandle, +} + +impl TSNotificationSender { + pub fn new(handler: AppHandle) -> Self { + Self { handler } + } +} + +impl NotificationSender for TSNotificationSender { + fn send_subject(&self, subject: SubscribeObject) -> Result<(), String> { + self.handler + .emit_all(AF_NOTIFICATION, subject) + .map_err(|e| format!("{:?}", e)) + } +} diff --git a/frontend/appflowy_tauri/src/appflowy_app/App.tsx b/frontend/appflowy_tauri/src/appflowy_app/App.tsx index fca8cd6137..19579526e1 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/App.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/App.tsx @@ -2,7 +2,7 @@ import "./App.css"; import { UserEventSignIn, SignInPayloadPB, -} from "../services/backend/events/flowy-user"; +} from "../services/backend/events/flowy-user/index"; import { nanoid } from "nanoid"; diff --git a/frontend/appflowy_tauri/src/services/backend/notifications/index.ts b/frontend/appflowy_tauri/src/services/backend/notifications/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index 9af82c176d..fd11ff7f9f 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -719,11 +719,11 @@ dependencies = [ "byteorder", "bytes", "crossbeam-utils", - "dart-notify", "ffi-support", "flowy-codegen", "flowy-core", "flowy-derive", + "flowy-notification", "lazy_static", "lib-dispatch", "log", @@ -734,20 +734,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "dart-notify" -version = "0.1.0" -dependencies = [ - "allo-isolate", - "bytes", - "flowy-codegen", - "flowy-derive", - "lazy_static", - "lib-dispatch", - "log", - "protobuf", -] - [[package]] name = "dashmap" version = "5.2.0" @@ -1056,7 +1042,6 @@ dependencies = [ "chrono", "color-eyre", "criterion", - "dart-notify", "dashmap", "derive_more", "diesel", @@ -1067,6 +1052,7 @@ dependencies = [ "flowy-document", "flowy-error", "flowy-http-model", + "flowy-notification", "flowy-revision", "flowy-revision-persistence", "flowy-sync", @@ -1116,7 +1102,6 @@ name = "flowy-folder" version = "0.1.0" dependencies = [ "bytes", - "dart-notify", "diesel", "diesel_derives", "flowy-codegen", @@ -1126,6 +1111,7 @@ dependencies = [ "flowy-error", "flowy-folder", "flowy-http-model", + "flowy-notification", "flowy-revision", "flowy-revision-persistence", "flowy-sync", @@ -1159,7 +1145,6 @@ dependencies = [ "bytes", "chrono", "crossbeam-utils", - "dart-notify", "dashmap", "diesel", "fancy-regex", @@ -1169,6 +1154,7 @@ dependencies = [ "flowy-error", "flowy-grid", "flowy-http-model", + "flowy-notification", "flowy-revision", "flowy-revision-persistence", "flowy-sync", @@ -1248,6 +1234,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "flowy-notification" +version = "0.1.0" +dependencies = [ + "allo-isolate", + "bytes", + "flowy-codegen", + "flowy-derive", + "lazy_static", + "lib-dispatch", + "protobuf", + "serde", + "tracing", +] + [[package]] name = "flowy-revision" version = "0.1.0" @@ -1360,7 +1361,6 @@ version = "0.1.0" dependencies = [ "bytes", "claim 0.4.0", - "dart-notify", "diesel", "diesel_derives", "fake", @@ -1369,6 +1369,7 @@ dependencies = [ "flowy-database", "flowy-derive", "flowy-error", + "flowy-notification", "flowy-test", "futures", "lazy_static", diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index 4283e2c9f5..3cf9db4ebe 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -9,7 +9,7 @@ members = [ "flowy-test", "flowy-database", "flowy-folder", - "dart-notify", + "flowy-notification", "flowy-document", "flowy-error", "flowy-revision", diff --git a/frontend/rust-lib/dart-ffi/Cargo.toml b/frontend/rust-lib/dart-ffi/Cargo.toml index a9f5d73bc1..ce861d718a 100644 --- a/frontend/rust-lib/dart-ffi/Cargo.toml +++ b/frontend/rust-lib/dart-ffi/Cargo.toml @@ -27,7 +27,7 @@ parking_lot = "0.12.1" lib-dispatch = { path = "../lib-dispatch" } flowy-core = { path = "../flowy-core" } -dart-notify = { path = "../dart-notify" } +flowy-notification = { path = "../flowy-notification" } flowy-derive = { path = "../flowy-derive" } [features] diff --git a/frontend/rust-lib/dart-ffi/src/lib.rs b/frontend/rust-lib/dart-ffi/src/lib.rs index 901b073410..6bb45797a4 100644 --- a/frontend/rust-lib/dart-ffi/src/lib.rs +++ b/frontend/rust-lib/dart-ffi/src/lib.rs @@ -1,15 +1,18 @@ #![allow(clippy::not_unsafe_ptr_arg_deref)] mod c; mod model; +mod notification; mod protobuf; mod util; +use crate::notification::DartNotificationSender; use crate::{ c::{extend_front_four_bytes_into_bytes, forget_rust}, model::{FFIRequest, FFIResponse}, }; use flowy_core::get_client_server_configuration; use flowy_core::*; +use flowy_notification::register_notification_sender; use lazy_static::lazy_static; use lib_dispatch::prelude::ToBytes; use lib_dispatch::prelude::*; @@ -78,7 +81,7 @@ pub extern "C" fn sync_event(input: *const u8, len: usize) -> *const u8 { #[no_mangle] pub extern "C" fn set_stream_port(port: i64) -> i32 { - dart_notify::dart::DartStreamSender::set_port(port); + register_notification_sender(DartNotificationSender::new(port)); 0 } diff --git a/frontend/rust-lib/dart-ffi/src/notification/mod.rs b/frontend/rust-lib/dart-ffi/src/notification/mod.rs new file mode 100644 index 0000000000..c50256a159 --- /dev/null +++ b/frontend/rust-lib/dart-ffi/src/notification/mod.rs @@ -0,0 +1,3 @@ +mod sender; + +pub use sender::*; diff --git a/frontend/rust-lib/dart-ffi/src/notification/sender.rs b/frontend/rust-lib/dart-ffi/src/notification/sender.rs new file mode 100644 index 0000000000..a240c9c1ec --- /dev/null +++ b/frontend/rust-lib/dart-ffi/src/notification/sender.rs @@ -0,0 +1,25 @@ +use allo_isolate::Isolate; +use bytes::Bytes; +use flowy_notification::entities::SubscribeObject; +use flowy_notification::NotificationSender; +use std::convert::TryInto; + +pub struct DartNotificationSender { + isolate: Isolate, +} + +impl DartNotificationSender { + pub fn new(port: i64) -> Self { + Self { + isolate: Isolate::new(port), + } + } +} + +impl NotificationSender for DartNotificationSender { + fn send_subject(&self, subject: SubscribeObject) -> Result<(), String> { + let bytes: Bytes = subject.try_into().unwrap(); + self.isolate.post(bytes.to_vec()); + Ok(()) + } +} diff --git a/frontend/rust-lib/dart-notify/src/dart/mod.rs b/frontend/rust-lib/dart-notify/src/dart/mod.rs deleted file mode 100644 index b58f792ae6..0000000000 --- a/frontend/rust-lib/dart-notify/src/dart/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod stream_sender; - -pub use stream_sender::*; diff --git a/frontend/rust-lib/dart-notify/src/dart/stream_sender.rs b/frontend/rust-lib/dart-notify/src/dart/stream_sender.rs deleted file mode 100644 index 0f41637dc2..0000000000 --- a/frontend/rust-lib/dart-notify/src/dart/stream_sender.rs +++ /dev/null @@ -1,57 +0,0 @@ -use crate::entities::SubscribeObject; -use bytes::Bytes; -use lazy_static::lazy_static; -use std::{convert::TryInto, sync::RwLock}; - -lazy_static! { - static ref DART_STREAM_SENDER: RwLock = RwLock::new(DartStreamSender::new()); -} - -pub struct DartStreamSender { - #[allow(dead_code)] - isolate: Option, -} - -impl DartStreamSender { - fn new() -> Self { - Self { isolate: None } - } - - fn inner_set_port(&mut self, port: i64) { - log::info!("Setup rust to flutter stream with port {}", port); - self.isolate = Some(allo_isolate::Isolate::new(port)); - } - - #[allow(dead_code)] - fn inner_post(&self, observable_subject: SubscribeObject) -> Result<(), String> { - match self.isolate { - Some(ref isolate) => { - let bytes: Bytes = observable_subject.try_into().unwrap(); - isolate.post(bytes.to_vec()); - Ok(()) - } - None => Err("Isolate is not set".to_owned()), - } - } - - pub fn set_port(port: i64) { - match DART_STREAM_SENDER.write() { - Ok(mut stream) => stream.inner_set_port(port), - Err(e) => { - let msg = format!("Get rust to flutter stream lock fail. {:?}", e); - log::error!("{:?}", msg); - } - } - } - - pub fn post(_observable_subject: SubscribeObject) -> Result<(), String> { - #[cfg(feature = "dart")] - match DART_STREAM_SENDER.read() { - Ok(stream) => stream.inner_post(_observable_subject), - Err(e) => Err(format!("Get rust to flutter stream lock fail. {:?}", e)), - } - - #[cfg(not(feature = "dart"))] - Ok(()) - } -} diff --git a/frontend/rust-lib/flowy-core/src/lib.rs b/frontend/rust-lib/flowy-core/src/lib.rs index 97965a5543..dde86d0a4e 100644 --- a/frontend/rust-lib/flowy-core/src/lib.rs +++ b/frontend/rust-lib/flowy-core/src/lib.rs @@ -88,7 +88,7 @@ fn create_log_filter(level: String, with_crates: Vec) -> String { filters.push(format!("flowy_document={}", level)); filters.push(format!("flowy_grid={}", level)); filters.push(format!("flowy_collaboration={}", "info")); - filters.push(format!("dart_notify={}", level)); + filters.push(format!("flowy_notification={}", level)); filters.push(format!("lib_ot={}", level)); filters.push(format!("lib_ws={}", level)); filters.push(format!("lib_infra={}", level)); diff --git a/frontend/rust-lib/flowy-document/Cargo.toml b/frontend/rust-lib/flowy-document/Cargo.toml index 86b706149e..34ff05647b 100644 --- a/frontend/rust-lib/flowy-document/Cargo.toml +++ b/frontend/rust-lib/flowy-document/Cargo.toml @@ -19,7 +19,7 @@ flowy-database = { path = "../flowy-database", optional = true } flowy-revision = { path = "../flowy-revision" } flowy-revision-persistence = { path = "../flowy-revision-persistence" } flowy-error = { path = "../flowy-error", features = ["collaboration", "ot", "http_server", "serde", "db"] } -dart-notify = { path = "../dart-notify" } +flowy-notification = { path = "../flowy-notification" } diesel = {version = "1.4.8", features = ["sqlite"]} diesel_derives = {version = "1.4.1", features = ["sqlite"]} @@ -61,5 +61,5 @@ sync = [] cloud_sync = ["sync"] rev-sqlite = ["flowy-database"] flowy_unit_test = ["lib-ot/flowy_unit_test", "flowy-revision/flowy_unit_test"] -dart = ["flowy-codegen/dart", "dart-notify/dart"] -ts = ["flowy-codegen/ts"] +dart = ["flowy-codegen/dart", "flowy-notification/dart"] +ts = ["flowy-codegen/ts", "flowy-notification/ts"] diff --git a/frontend/rust-lib/flowy-document/src/manager.rs b/frontend/rust-lib/flowy-document/src/manager.rs index a036de01e8..edb6000427 100644 --- a/frontend/rust-lib/flowy-document/src/manager.rs +++ b/frontend/rust-lib/flowy-document/src/manager.rs @@ -127,14 +127,14 @@ impl DocumentManager { document_id: T, ) -> Result, FlowyError> { let document_id = document_id.as_ref(); - tracing::Span::current().record("document_id", &document_id); + tracing::Span::current().record("document_id", document_id); self.init_document_editor(document_id).await } #[tracing::instrument(level = "trace", skip(self, editor_id), fields(editor_id), err)] pub async fn close_document_editor>(&self, editor_id: T) -> Result<(), FlowyError> { let editor_id = editor_id.as_ref(); - tracing::Span::current().record("editor_id", &editor_id); + tracing::Span::current().record("editor_id", editor_id); self.editor_map.write().await.remove(editor_id).await; Ok(()) } diff --git a/frontend/rust-lib/flowy-folder/Cargo.toml b/frontend/rust-lib/flowy-folder/Cargo.toml index 69a6f62108..f8ccd76421 100644 --- a/frontend/rust-lib/flowy-folder/Cargo.toml +++ b/frontend/rust-lib/flowy-folder/Cargo.toml @@ -16,7 +16,7 @@ lib-infra = { path = "../../../shared-lib/lib-infra" } flowy-document = { path = "../flowy-document" } flowy-database = { path = "../flowy-database", optional = true } flowy-error = { path = "../flowy-error", features = ["db", "http_server"]} -dart-notify = { path = "../dart-notify" } +flowy-notification = { path = "../flowy-notification" } lib-dispatch = { path = "../lib-dispatch" } flowy-revision = { path = "../flowy-revision" } flowy-revision-persistence = { path = "../flowy-revision-persistence" } @@ -52,5 +52,5 @@ sync = [] cloud_sync = ["sync"] rev-sqlite = ["flowy-database", "flowy-folder/rev-sqlite"] flowy_unit_test = ["lib-ot/flowy_unit_test", "flowy-revision/flowy_unit_test"] -dart = ["flowy-codegen/dart", "dart-notify/dart"] -ts = ["flowy-codegen/ts"] +dart = ["flowy-codegen/dart", "flowy-notification/dart"] +ts = ["flowy-codegen/ts", "flowy-notification/ts"] diff --git a/frontend/rust-lib/flowy-folder/Flowy.toml b/frontend/rust-lib/flowy-folder/Flowy.toml index 7ca5466b30..0ae861cf30 100644 --- a/frontend/rust-lib/flowy-folder/Flowy.toml +++ b/frontend/rust-lib/flowy-folder/Flowy.toml @@ -1,3 +1,3 @@ # Check out the FlowyConfig (located in flowy_toml.rs) for more details. -proto_input = ["src/entities", "src/event_map.rs", "src/dart_notification.rs"] +proto_input = ["src/entities", "src/event_map.rs", "src/notification.rs"] event_files = ["src/event_map.rs"] \ No newline at end of file diff --git a/frontend/rust-lib/flowy-folder/src/lib.rs b/frontend/rust-lib/flowy-folder/src/lib.rs index 5b7e625b0c..6be22b19b3 100644 --- a/frontend/rust-lib/flowy-folder/src/lib.rs +++ b/frontend/rust-lib/flowy-folder/src/lib.rs @@ -8,8 +8,8 @@ mod macros; #[macro_use] extern crate flowy_database; -mod dart_notification; pub mod manager; +mod notification; pub mod protobuf; mod util; diff --git a/frontend/rust-lib/flowy-folder/src/manager.rs b/frontend/rust-lib/flowy-folder/src/manager.rs index fa324b16cd..8b0ffb7a5a 100644 --- a/frontend/rust-lib/flowy-folder/src/manager.rs +++ b/frontend/rust-lib/flowy-folder/src/manager.rs @@ -2,10 +2,10 @@ use crate::entities::view::ViewDataFormatPB; use crate::entities::{ViewLayoutTypePB, ViewPB}; use crate::services::folder_editor::FolderRevisionMergeable; use crate::{ - dart_notification::{send_dart_notification, FolderNotification}, entities::workspace::RepeatedWorkspacePB, errors::FlowyResult, event_map::{FolderCouldServiceV1, WorkspaceDatabase, WorkspaceUser}, + notification::{send_dart_notification, FolderNotification}, services::{ folder_editor::FolderEditor, persistence::FolderPersistence, set_current_workspace, AppController, TrashController, ViewController, WorkspaceController, diff --git a/frontend/rust-lib/flowy-folder/src/dart_notification.rs b/frontend/rust-lib/flowy-folder/src/notification.rs similarity index 81% rename from frontend/rust-lib/flowy-folder/src/dart_notification.rs rename to frontend/rust-lib/flowy-folder/src/notification.rs index efbdf113ea..cb0d760fcb 100644 --- a/frontend/rust-lib/flowy-folder/src/dart_notification.rs +++ b/frontend/rust-lib/flowy-folder/src/notification.rs @@ -1,5 +1,5 @@ -use dart_notify::DartNotifyBuilder; use flowy_derive::ProtoBuf_Enum; +use flowy_notification::NotificationBuilder; const OBSERVABLE_CATEGORY: &str = "Workspace"; #[derive(ProtoBuf_Enum, Debug)] @@ -33,11 +33,11 @@ impl std::convert::From for i32 { } #[tracing::instrument(level = "trace")] -pub(crate) fn send_dart_notification(id: &str, ty: FolderNotification) -> DartNotifyBuilder { - DartNotifyBuilder::new(id, ty, OBSERVABLE_CATEGORY) +pub(crate) fn send_dart_notification(id: &str, ty: FolderNotification) -> NotificationBuilder { + NotificationBuilder::new(id, ty, OBSERVABLE_CATEGORY) } #[tracing::instrument(level = "trace")] -pub(crate) fn send_anonymous_dart_notification(ty: FolderNotification) -> DartNotifyBuilder { - DartNotifyBuilder::new("", ty, OBSERVABLE_CATEGORY) +pub(crate) fn send_anonymous_dart_notification(ty: FolderNotification) -> NotificationBuilder { + NotificationBuilder::new("", ty, OBSERVABLE_CATEGORY) } diff --git a/frontend/rust-lib/flowy-folder/src/services/app/controller.rs b/frontend/rust-lib/flowy-folder/src/services/app/controller.rs index f908ba857c..38e72d3879 100644 --- a/frontend/rust-lib/flowy-folder/src/services/app/controller.rs +++ b/frontend/rust-lib/flowy-folder/src/services/app/controller.rs @@ -1,11 +1,11 @@ use crate::{ - dart_notification::*, entities::{ app::{AppPB, CreateAppParams, *}, trash::TrashType, }, errors::*, event_map::{FolderCouldServiceV1, WorkspaceUser}, + notification::*, services::{ persistence::{AppChangeset, FolderPersistence, FolderPersistenceTransaction}, TrashController, TrashEvent, diff --git a/frontend/rust-lib/flowy-folder/src/services/trash/controller.rs b/frontend/rust-lib/flowy-folder/src/services/trash/controller.rs index 092f2f4482..36b1cc96e0 100644 --- a/frontend/rust-lib/flowy-folder/src/services/trash/controller.rs +++ b/frontend/rust-lib/flowy-folder/src/services/trash/controller.rs @@ -1,8 +1,8 @@ use crate::{ - dart_notification::{send_anonymous_dart_notification, FolderNotification}, entities::trash::{RepeatedTrashIdPB, RepeatedTrashPB, TrashIdPB, TrashPB, TrashType}, errors::{FlowyError, FlowyResult}, event_map::{FolderCouldServiceV1, WorkspaceUser}, + notification::{send_anonymous_dart_notification, FolderNotification}, services::persistence::{FolderPersistence, FolderPersistenceTransaction}, }; @@ -59,7 +59,7 @@ impl TrashController { delete_all: false, })?; - tracing::Span::current().record("putback", &format!("{:?}", &identifier).as_str()); + tracing::Span::current().record("putback", format!("{:?}", &identifier).as_str()); let _ = self.notify.send(TrashEvent::Putback(vec![identifier].into(), tx)); rx.recv().await.unwrap()?; Ok(()) @@ -118,7 +118,7 @@ impl TrashController { #[tracing::instrument(level = "debug", skip(self), fields(delete_trash_ids), err)] pub async fn delete_with_identifiers(&self, trash_identifiers: RepeatedTrashIdPB) -> FlowyResult<()> { let (tx, mut rx) = mpsc::channel::>(1); - tracing::Span::current().record("delete_trash_ids", &format!("{}", trash_identifiers).as_str()); + tracing::Span::current().record("delete_trash_ids", format!("{}", trash_identifiers).as_str()); let _ = self.notify.send(TrashEvent::Delete(trash_identifiers.clone(), tx)); match rx.recv().await { @@ -156,7 +156,7 @@ impl TrashController { tracing::Span::current().record( "trash_ids", - &format!( + format!( "{:?}", identifiers .iter() @@ -282,7 +282,7 @@ impl TrashController { #[tracing::instrument(level = "debug", skip(repeated_trash), fields(n_trash))] fn notify_trash_changed>(repeated_trash: T) { let repeated_trash = repeated_trash.into(); - tracing::Span::current().record("n_trash", &repeated_trash.len()); + tracing::Span::current().record("n_trash", repeated_trash.len()); send_anonymous_dart_notification(FolderNotification::TrashUpdated) .payload(repeated_trash) .send(); diff --git a/frontend/rust-lib/flowy-folder/src/services/view/controller.rs b/frontend/rust-lib/flowy-folder/src/services/view/controller.rs index dc2d3b7fc0..33918e1e1c 100644 --- a/frontend/rust-lib/flowy-folder/src/services/view/controller.rs +++ b/frontend/rust-lib/flowy-folder/src/services/view/controller.rs @@ -2,13 +2,13 @@ pub use crate::entities::view::ViewDataFormatPB; use crate::entities::{AppPB, DeletedViewPB, ViewInfoPB, ViewLayoutTypePB}; use crate::manager::{ViewDataProcessor, ViewDataProcessorMap}; use crate::{ - dart_notification::{send_dart_notification, FolderNotification}, entities::{ trash::{RepeatedTrashIdPB, TrashType}, view::{CreateViewParams, RepeatedViewPB, UpdateViewParams, ViewIdPB, ViewPB}, }, errors::{FlowyError, FlowyResult}, event_map::{FolderCouldServiceV1, WorkspaceUser}, + notification::{send_dart_notification, FolderNotification}, services::{ persistence::{FolderPersistence, FolderPersistenceTransaction, ViewChangeset}, TrashController, TrashEvent, diff --git a/frontend/rust-lib/flowy-folder/src/services/workspace/controller.rs b/frontend/rust-lib/flowy-folder/src/services/workspace/controller.rs index 87582db5f8..7d68acaec7 100644 --- a/frontend/rust-lib/flowy-folder/src/services/workspace/controller.rs +++ b/frontend/rust-lib/flowy-folder/src/services/workspace/controller.rs @@ -1,9 +1,9 @@ use crate::entities::workspace::*; use crate::manager::FolderManager; use crate::{ - dart_notification::*, errors::*, event_map::{FolderCouldServiceV1, WorkspaceUser}, + notification::*, services::{ persistence::{FolderPersistence, FolderPersistenceTransaction, WorkspaceChangeset}, read_local_workspace_apps, TrashController, diff --git a/frontend/rust-lib/flowy-folder/src/services/workspace/event_handler.rs b/frontend/rust-lib/flowy-folder/src/services/workspace/event_handler.rs index d69d8d0e5a..8569c1a038 100644 --- a/frontend/rust-lib/flowy-folder/src/services/workspace/event_handler.rs +++ b/frontend/rust-lib/flowy-folder/src/services/workspace/event_handler.rs @@ -4,9 +4,9 @@ use crate::entities::{ workspace::{RepeatedWorkspacePB, WorkspaceIdPB, WorkspaceSettingPB, *}, }; use crate::{ - dart_notification::{send_dart_notification, FolderNotification}, errors::FlowyError, manager::FolderManager, + notification::{send_dart_notification, FolderNotification}, services::{get_current_workspace, read_local_workspace_apps, WorkspaceController}, }; use lib_dispatch::prelude::{data_result, AFPluginData, AFPluginState, DataResult}; diff --git a/frontend/rust-lib/flowy-grid/Cargo.toml b/frontend/rust-lib/flowy-grid/Cargo.toml index fd77a460f2..2d2017c734 100644 --- a/frontend/rust-lib/flowy-grid/Cargo.toml +++ b/frontend/rust-lib/flowy-grid/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] lib-dispatch = { path = "../lib-dispatch" } -dart-notify = { path = "../dart-notify" } +flowy-notification = { path = "../flowy-notification" } flowy-revision = { path = "../flowy-revision" } flowy-revision-persistence = { path = "../flowy-revision-persistence" } flowy-task= { path = "../flowy-task" } @@ -58,6 +58,6 @@ flowy-codegen = { path = "../flowy-codegen"} [features] default = [] rev-sqlite = ["flowy-database"] -dart = ["flowy-codegen/dart", "dart-notify/dart"] -ts = ["flowy-codegen/ts"] +dart = ["flowy-codegen/dart", "flowy-notification/dart"] +ts = ["flowy-codegen/ts", "flowy-notification/ts"] flowy_unit_test = ["flowy-revision/flowy_unit_test"] \ No newline at end of file diff --git a/frontend/rust-lib/flowy-grid/Flowy.toml b/frontend/rust-lib/flowy-grid/Flowy.toml index 00e9cf7c04..37dd8da743 100644 --- a/frontend/rust-lib/flowy-grid/Flowy.toml +++ b/frontend/rust-lib/flowy-grid/Flowy.toml @@ -3,6 +3,6 @@ proto_input = [ "src/event_map.rs", "src/services/field/type_options", "src/entities", - "src/dart_notification.rs" + "src/notification.rs" ] event_files = ["src/event_map.rs"] \ No newline at end of file diff --git a/frontend/rust-lib/flowy-grid/src/lib.rs b/frontend/rust-lib/flowy-grid/src/lib.rs index 4771fe37dc..977330d5cd 100644 --- a/frontend/rust-lib/flowy-grid/src/lib.rs +++ b/frontend/rust-lib/flowy-grid/src/lib.rs @@ -7,8 +7,8 @@ mod event_handler; pub mod event_map; pub mod manager; -mod dart_notification; pub mod entities; +mod notification; mod protobuf; pub mod services; pub mod util; diff --git a/frontend/rust-lib/flowy-grid/src/manager.rs b/frontend/rust-lib/flowy-grid/src/manager.rs index 2421010121..99ade3bfa3 100644 --- a/frontend/rust-lib/flowy-grid/src/manager.rs +++ b/frontend/rust-lib/flowy-grid/src/manager.rs @@ -101,7 +101,7 @@ impl GridManager { #[tracing::instrument(level = "debug", skip_all, fields(grid_id), err)] pub async fn close_grid>(&self, grid_id: T) -> FlowyResult<()> { let grid_id = grid_id.as_ref(); - tracing::Span::current().record("grid_id", &grid_id); + tracing::Span::current().record("grid_id", grid_id); self.grid_editors.write().await.remove(grid_id).await; Ok(()) } diff --git a/frontend/rust-lib/flowy-grid/src/dart_notification.rs b/frontend/rust-lib/flowy-grid/src/notification.rs similarity index 88% rename from frontend/rust-lib/flowy-grid/src/dart_notification.rs rename to frontend/rust-lib/flowy-grid/src/notification.rs index 7aaa0f55f3..20c60753f3 100644 --- a/frontend/rust-lib/flowy-grid/src/dart_notification.rs +++ b/frontend/rust-lib/flowy-grid/src/notification.rs @@ -1,5 +1,5 @@ -use dart_notify::DartNotifyBuilder; use flowy_derive::ProtoBuf_Enum; +use flowy_notification::NotificationBuilder; const OBSERVABLE_CATEGORY: &str = "Grid"; #[derive(ProtoBuf_Enum, Debug)] @@ -35,6 +35,6 @@ impl std::convert::From for i32 { } #[tracing::instrument(level = "trace")] -pub fn send_dart_notification(id: &str, ty: GridDartNotification) -> DartNotifyBuilder { - DartNotifyBuilder::new(id, ty, OBSERVABLE_CATEGORY) +pub fn send_dart_notification(id: &str, ty: GridDartNotification) -> NotificationBuilder { + NotificationBuilder::new(id, ty, OBSERVABLE_CATEGORY) } diff --git a/frontend/rust-lib/flowy-grid/src/services/block_manager.rs b/frontend/rust-lib/flowy-grid/src/services/block_manager.rs index 65bca33d03..05c402a7a0 100644 --- a/frontend/rust-lib/flowy-grid/src/services/block_manager.rs +++ b/frontend/rust-lib/flowy-grid/src/services/block_manager.rs @@ -1,6 +1,6 @@ -use crate::dart_notification::{send_dart_notification, GridDartNotification}; use crate::entities::{CellChangesetPB, InsertedRowPB, UpdatedRowPB}; use crate::manager::GridUser; +use crate::notification::{send_dart_notification, GridDartNotification}; use crate::services::block_editor::{GridBlockRevisionEditor, GridBlockRevisionMergeable}; use crate::services::persistence::block_index::BlockIndexCache; use crate::services::persistence::rev_sqlite::{ diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs index 1f13271c82..44e459dbd5 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_tests.rs @@ -133,7 +133,7 @@ mod tests { assert_eq!(native_time_str, utc_time_str); // Mon Mar 14 2022 17:56:02 GMT+0800 (China Standard Time) - let gmt_8_offset = FixedOffset::east(8 * 3600); + let gmt_8_offset = FixedOffset::east_opt(8 * 3600).unwrap(); let china_local = chrono::DateTime::::from_utc(native, gmt_8_offset); let china_local_time = format!("{}", china_local.format_with_items(StrftimeItems::new(&format))); diff --git a/frontend/rust-lib/flowy-grid/src/services/filter/controller.rs b/frontend/rust-lib/flowy-grid/src/services/filter/controller.rs index 5639aaef0c..570cc020a0 100644 --- a/frontend/rust-lib/flowy-grid/src/services/filter/controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/filter/controller.rs @@ -183,7 +183,7 @@ impl FilterController { invisible_rows, visible_rows, }; - tracing::Span::current().record("filter_result", &format!("{:?}", ¬ification).as_str()); + tracing::Span::current().record("filter_result", format!("{:?}", ¬ification).as_str()); let _ = self.notifier.send(GridViewChanged::FilterNotification(notification)); } Ok(()) diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index a5f25e68b4..ed59fbb5ca 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -1,7 +1,7 @@ -use crate::dart_notification::{send_dart_notification, GridDartNotification}; use crate::entities::CellPathParams; use crate::entities::*; use crate::manager::GridUser; +use crate::notification::{send_dart_notification, GridDartNotification}; use crate::services::block_manager::GridBlockManager; use crate::services::cell::{ apply_cell_data_changeset, decode_type_cell_data, stringify_cell_data, AnyTypeCache, AtomicCellDataCache, diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs index 76e7ca962e..9ef69c23f0 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs @@ -210,7 +210,7 @@ where } } - tracing::Span::current().record("group_result", &format!("{},", self.group_ctx,).as_str()); + tracing::Span::current().record("group_result", format!("{},", self.group_ctx,).as_str()); Ok(()) } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/url_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/url_controller.rs index a0fa38ff79..f64a968c25 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/url_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/url_controller.rs @@ -122,7 +122,7 @@ impl GroupGenerator for URLGroupGenerator { let group_name = cell.content.clone(); GeneratedGroupConfig { group_rev: GroupRevision::new(group_id, group_name), - filter_content: cell.content.clone(), + filter_content: cell.content, } }) .collect(); diff --git a/frontend/rust-lib/flowy-grid/src/services/view_editor/changed_notifier.rs b/frontend/rust-lib/flowy-grid/src/services/view_editor/changed_notifier.rs index 6e22489d44..c6b181affe 100644 --- a/frontend/rust-lib/flowy-grid/src/services/view_editor/changed_notifier.rs +++ b/frontend/rust-lib/flowy-grid/src/services/view_editor/changed_notifier.rs @@ -1,5 +1,5 @@ -use crate::dart_notification::{send_dart_notification, GridDartNotification}; use crate::entities::{GridRowsVisibilityChangesetPB, ReorderAllRowsPB, ReorderSingleRowPB}; +use crate::notification::{send_dart_notification, GridDartNotification}; use crate::services::filter::FilterResultNotification; use crate::services::sort::{ReorderAllRowsResult, ReorderSingleRowResult}; use async_stream::stream; diff --git a/frontend/rust-lib/flowy-grid/src/services/view_editor/editor.rs b/frontend/rust-lib/flowy-grid/src/services/view_editor/editor.rs index a3a5ed9138..276b32d3d3 100644 --- a/frontend/rust-lib/flowy-grid/src/services/view_editor/editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/view_editor/editor.rs @@ -1,5 +1,5 @@ -use crate::dart_notification::{send_dart_notification, GridDartNotification}; use crate::entities::*; +use crate::notification::{send_dart_notification, GridDartNotification}; use crate::services::block_manager::GridBlockEvent; use crate::services::cell::{AtomicCellDataCache, TypeCellData}; use crate::services::field::{RowSingleCellData, TypeOptionCellDataHandler}; diff --git a/frontend/rust-lib/flowy-grid/tests/grid/cell_test/test.rs b/frontend/rust-lib/flowy-grid/tests/grid/cell_test/test.rs index fb675eae6c..490d721903 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/cell_test/test.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/cell_test/test.rs @@ -94,9 +94,8 @@ async fn url_cell_date_test() { for (i, cell) in cells.into_iter().enumerate() { let url_cell_data = cell.into_url_field_cell_data().unwrap(); - match i { - 0 => assert_eq!(url_cell_data.url.as_str(), "https://www.appflowy.io/"), - _ => {} + if i == 0 { + assert_eq!(url_cell_data.url.as_str(), "https://www.appflowy.io/"); } } } diff --git a/frontend/rust-lib/dart-notify/Cargo.toml b/frontend/rust-lib/flowy-notification/Cargo.toml similarity index 81% rename from frontend/rust-lib/dart-notify/Cargo.toml rename to frontend/rust-lib/flowy-notification/Cargo.toml index 2ca4bcabe4..1d14ca21c4 100644 --- a/frontend/rust-lib/dart-notify/Cargo.toml +++ b/frontend/rust-lib/flowy-notification/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "dart-notify" +name = "flowy-notification" version = "0.1.0" edition = "2018" @@ -9,8 +9,9 @@ edition = "2018" lazy_static = { version = "1.4.0" } protobuf = { version = "2.20.0" } allo-isolate = { version = "^0.1", features = ["catch-unwind"] } -log = "0.4.14" +tracing = { version = "0.1", features = ["log"] } bytes = { version = "1.0" } +serde = "1.0" flowy-derive = { path = "../flowy-derive" } lib-dispatch = { path = "../lib-dispatch" } @@ -20,3 +21,4 @@ flowy-codegen = { path = "../flowy-codegen" } [features] dart = ["flowy-codegen/dart"] +ts = ["flowy-codegen/ts"] diff --git a/frontend/rust-lib/dart-notify/Flowy.toml b/frontend/rust-lib/flowy-notification/Flowy.toml similarity index 100% rename from frontend/rust-lib/dart-notify/Flowy.toml rename to frontend/rust-lib/flowy-notification/Flowy.toml diff --git a/frontend/rust-lib/dart-notify/build.rs b/frontend/rust-lib/flowy-notification/build.rs similarity index 100% rename from frontend/rust-lib/dart-notify/build.rs rename to frontend/rust-lib/flowy-notification/build.rs diff --git a/frontend/rust-lib/dart-notify/src/entities/mod.rs b/frontend/rust-lib/flowy-notification/src/entities/mod.rs similarity index 100% rename from frontend/rust-lib/dart-notify/src/entities/mod.rs rename to frontend/rust-lib/flowy-notification/src/entities/mod.rs diff --git a/frontend/rust-lib/dart-notify/src/entities/subject.rs b/frontend/rust-lib/flowy-notification/src/entities/subject.rs similarity index 95% rename from frontend/rust-lib/dart-notify/src/entities/subject.rs rename to frontend/rust-lib/flowy-notification/src/entities/subject.rs index f5611e3021..3f9b71b0e6 100644 --- a/frontend/rust-lib/dart-notify/src/entities/subject.rs +++ b/frontend/rust-lib/flowy-notification/src/entities/subject.rs @@ -1,7 +1,7 @@ use flowy_derive::ProtoBuf; use std::{fmt, fmt::Formatter}; -#[derive(Debug, Clone, ProtoBuf)] +#[derive(Debug, Clone, ProtoBuf, serde::Serialize)] pub struct SubscribeObject { #[pb(index = 1)] pub source: String, diff --git a/frontend/rust-lib/dart-notify/src/lib.rs b/frontend/rust-lib/flowy-notification/src/lib.rs similarity index 50% rename from frontend/rust-lib/dart-notify/src/lib.rs rename to frontend/rust-lib/flowy-notification/src/lib.rs index b6fbb1ca78..c005b84e02 100644 --- a/frontend/rust-lib/dart-notify/src/lib.rs +++ b/frontend/rust-lib/flowy-notification/src/lib.rs @@ -1,13 +1,29 @@ -use bytes::Bytes; - -pub mod dart; pub mod entities; mod protobuf; -use crate::{dart::DartStreamSender, entities::SubscribeObject}; +use crate::entities::SubscribeObject; +use bytes::Bytes; +use lazy_static::lazy_static; use lib_dispatch::prelude::ToBytes; +use std::sync::RwLock; -pub struct DartNotifyBuilder { +lazy_static! { + static ref NOTIFICATION_SENDER: RwLock>> = RwLock::new(vec![]); +} + +pub fn register_notification_sender(sender: T) { + let box_sender = Box::new(sender); + match NOTIFICATION_SENDER.write() { + Ok(mut write_guard) => write_guard.push(box_sender), + Err(err) => tracing::error!("Failed to push notification sender: {:?}", err), + } +} + +pub trait NotificationSender: Send + Sync + 'static { + fn send_subject(&self, subject: SubscribeObject) -> Result<(), String>; +} + +pub struct NotificationBuilder { id: String, payload: Option, error: Option, @@ -15,7 +31,7 @@ pub struct DartNotifyBuilder { ty: i32, } -impl DartNotifyBuilder { +impl NotificationBuilder { pub fn new>(id: &str, ty: T, source: &str) -> Self { Self { id: id.to_owned(), @@ -33,7 +49,7 @@ impl DartNotifyBuilder { match payload.into_bytes() { Ok(bytes) => self.payload = Some(bytes), Err(e) => { - log::error!("Set observable payload failed: {:?}", e); + tracing::error!("Set observable payload failed: {:?}", e); } } @@ -47,7 +63,7 @@ impl DartNotifyBuilder { match error.into_bytes() { Ok(bytes) => self.error = Some(bytes), Err(e) => { - log::error!("Set observable error failed: {:?}", e); + tracing::error!("Set observable error failed: {:?}", e); } } self @@ -55,9 +71,7 @@ impl DartNotifyBuilder { pub fn send(self) { let payload = self.payload.map(|bytes| bytes.to_vec()); - let error = self.error.map(|bytes| bytes.to_vec()); - let subject = SubscribeObject { source: self.source, ty: self.ty, @@ -66,9 +80,15 @@ impl DartNotifyBuilder { error, }; - match DartStreamSender::post(subject) { - Ok(_) => {} - Err(error) => log::error!("Send observable subject failed: {}", error), + match NOTIFICATION_SENDER.read() { + Ok(read_guard) => read_guard.iter().for_each(|sender| { + if let Err(e) = sender.send_subject(subject.clone()) { + tracing::error!("Post notification failed: {}", e); + } + }), + Err(err) => { + tracing::error!("Read notification sender failed: {}", err); + } } } } diff --git a/frontend/rust-lib/flowy-revision/src/rev_manager.rs b/frontend/rust-lib/flowy-revision/src/rev_manager.rs index 23cc994ca3..2c27deff6a 100644 --- a/frontend/rust-lib/flowy-revision/src/rev_manager.rs +++ b/frontend/rust-lib/flowy-revision/src/rev_manager.rs @@ -133,10 +133,10 @@ impl RevisionManager { B: RevisionObjectDeserializer, { let revision_records = self.rev_persistence.load_all_records(&self.object_id)?; - tracing::Span::current().record("object_id", &self.object_id.as_str()); - tracing::Span::current().record("deserializer", &std::any::type_name::()); + tracing::Span::current().record("object_id", self.object_id.as_str()); + tracing::Span::current().record("deserializer", std::any::type_name::()); let revisions: Vec = revision_records.iter().map(|record| record.revision.clone()).collect(); - tracing::Span::current().record("deserialize_revisions", &revisions.len()); + tracing::Span::current().record("deserialize_revisions", revisions.len()); let current_rev_id = revisions.last().as_ref().map(|revision| revision.rev_id).unwrap_or(0); match B::deserialize_revisions(&self.object_id, revisions.clone()) { Ok(object) => { diff --git a/frontend/rust-lib/flowy-revision/src/rev_persistence.rs b/frontend/rust-lib/flowy-revision/src/rev_persistence.rs index c0f20e4ea4..1395766869 100644 --- a/frontend/rust-lib/flowy-revision/src/rev_persistence.rs +++ b/frontend/rust-lib/flowy-revision/src/rev_persistence.rs @@ -101,7 +101,7 @@ where /// Save the revision that comes from remote to disk. #[tracing::instrument(level = "trace", skip(self, revision), fields(rev_id, object_id=%self.object_id), err)] pub(crate) async fn add_ack_revision(&self, revision: &Revision) -> FlowyResult<()> { - tracing::Span::current().record("rev_id", &revision.rev_id); + tracing::Span::current().record("rev_id", revision.rev_id); self.add(revision.clone(), RevisionState::Ack, true).await } @@ -127,7 +127,7 @@ where debug_assert_eq!(range.len() as usize, revisions.len()); // compact multiple revisions into one let merged_revision = rev_compress.merge_revisions(&self.user_id, &self.object_id, revisions)?; - tracing::Span::current().record("rev_id", &merged_revision.rev_id); + tracing::Span::current().record("rev_id", merged_revision.rev_id); let record = SyncRecord { revision: merged_revision, @@ -178,7 +178,7 @@ where end: *compact_seq.back().unwrap(), }; - tracing::Span::current().record("compact_range", &format!("{}", range).as_str()); + tracing::Span::current().record("compact_range", format!("{}", range).as_str()); let mut revisions = self.revisions_in_range(&range).await?; debug_assert_eq!(range.len() as usize, revisions.len()); // append the new revision @@ -187,7 +187,7 @@ where // compact multiple revisions into one let merged_revision = rev_compress.merge_revisions(&self.user_id, &self.object_id, revisions)?; let rev_id = merged_revision.rev_id; - tracing::Span::current().record("rev_id", &merged_revision.rev_id); + tracing::Span::current().record("rev_id", merged_revision.rev_id); sync_seq.recv(merged_revision.rev_id)?; // replace the revisions in range with compact revision @@ -195,7 +195,7 @@ where Ok(rev_id) } else { let rev_id = new_revision.rev_id; - tracing::Span::current().record("rev_id", &rev_id); + tracing::Span::current().record("rev_id", rev_id); self.add(new_revision, RevisionState::Sync, true).await?; sync_seq.merge_recv(rev_id)?; Ok(rev_id) @@ -347,7 +347,7 @@ impl RevisionMemoryCacheDelegate for Arc for i32 { } } -pub(crate) fn dart_notify(id: &str, ty: UserNotification) -> DartNotifyBuilder { - DartNotifyBuilder::new(id, ty, OBSERVABLE_CATEGORY) +pub(crate) fn dart_notify(id: &str, ty: UserNotification) -> NotificationBuilder { + NotificationBuilder::new(id, ty, OBSERVABLE_CATEGORY) } diff --git a/frontend/rust-lib/flowy-user/src/services/user_session.rs b/frontend/rust-lib/flowy-user/src/services/user_session.rs index 9b7ef49189..0e61e39265 100644 --- a/frontend/rust-lib/flowy-user/src/services/user_session.rs +++ b/frontend/rust-lib/flowy-user/src/services/user_session.rs @@ -2,9 +2,9 @@ use crate::entities::{ SignInParams, SignInResponse, SignUpParams, SignUpResponse, UpdateUserProfileParams, UserProfilePB, UserSettingPB, }; use crate::{ - dart_notification::*, errors::{ErrorCode, FlowyError}, event_map::UserCloudService, + notification::*, services::{ database::{UserDB, UserTable, UserTableChangeset}, notifier::UserNotifier, diff --git a/frontend/scripts/makefile/flutter.toml b/frontend/scripts/makefile/flutter.toml index d2bede3c6d..8458378734 100644 --- a/frontend/scripts/makefile/flutter.toml +++ b/frontend/scripts/makefile/flutter.toml @@ -190,4 +190,24 @@ script = [ exec cmd.exe /c flutter packages pub run easy_localization:generate -S assets/translations/ -f keys -o locale_keys.g.dart -S assets/translations -s en.json exec cmd.exe /c flutter packages pub run build_runner build --delete-conflicting-outputs """ -] \ No newline at end of file +] + +[tasks.dry_code_generation] +script_runner = "@shell" +script = [ + """ + cd app_flowy + flutter packages pub run easy_localization:generate -S assets/translations/ -f keys -o locale_keys.g.dart -S assets/translations -s en.json + flutter packages pub run build_runner build --delete-conflicting-outputs + """ +] + +[tasks.dry_code_generation.windows] +script_runner = "@duckscript" +script = [ + """ + cd ./app_flowy/ + exec cmd.exe /c flutter packages pub run easy_localization:generate -S assets/translations/ -f keys -o locale_keys.g.dart -S assets/translations -s en.json + exec cmd.exe /c flutter packages pub run build_runner build --delete-conflicting-outputs + """ +] diff --git a/frontend/scripts/makefile/tests.toml b/frontend/scripts/makefile/tests.toml index 0c38950489..66a1383277 100644 --- a/frontend/scripts/makefile/tests.toml +++ b/frontend/scripts/makefile/tests.toml @@ -90,7 +90,7 @@ script = [ CARGO_INCREMENTAL=0 \ RUSTFLAGS='-C instrument-coverage' \ LLVM_PROFILE_FILE='prof-%p-%m.profraw' \ - cargo test --no-default-features --features="sync" + cargo test --no-default-features --features="sync,rev-sqlite" """ ] diff --git a/frontend/scripts/makefile/tool.toml b/frontend/scripts/makefile/tool.toml index a236db8437..a16f3d34ab 100644 --- a/frontend/scripts/makefile/tool.toml +++ b/frontend/scripts/makefile/tool.toml @@ -1,4 +1,4 @@ -[tasks.dart_clean] +[tasks.flutter_clean] run_task = { name = [ "rust_lib_clean", "rm_macro_build_cache",