diff --git a/frontend/appflowy_flutter/lib/core/config/config.dart b/frontend/appflowy_flutter/lib/core/config/config.dart new file mode 100644 index 0000000000..ad06ecb860 --- /dev/null +++ b/frontend/appflowy_flutter/lib/core/config/config.dart @@ -0,0 +1,17 @@ +import 'package:appflowy_backend/dispatch/dispatch.dart'; +import 'package:appflowy_backend/protobuf/flowy-config/entities.pb.dart'; + +class Config { + static Future setSupabaseConfig({ + required String url, + required String key, + required String secret, + }) async { + await ConfigEventSetSupabaseConfig( + SupabaseConfigPB.create() + ..supabaseUrl = url + ..supabaseKey = key + ..jwtSecret = secret, + ).send(); + } +} diff --git a/frontend/appflowy_flutter/lib/core/config/kv.dart b/frontend/appflowy_flutter/lib/core/config/kv.dart new file mode 100644 index 0000000000..692c691b57 --- /dev/null +++ b/frontend/appflowy_flutter/lib/core/config/kv.dart @@ -0,0 +1,33 @@ +import 'package:appflowy_backend/dispatch/dispatch.dart'; +import 'package:appflowy_backend/protobuf/flowy-config/entities.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; +import 'package:dartz/dartz.dart'; + +/// Key-value store +/// The data is stored in the local storage of the device. +class KeyValue { + static Future set(String key, String value) async { + await ConfigEventSetKeyValue( + KeyValuePB.create() + ..key = key + ..value = value, + ).send(); + } + + static Future> get(String key) { + return ConfigEventGetKeyValue( + KeyPB.create()..key = key, + ).send().then( + (result) => result.fold( + (pb) => left(pb.value), + (error) => right(error), + ), + ); + } + + static Future remove(String key) async { + await ConfigEventRemoveKeyValue( + KeyPB.create()..key = key, + ).send(); + } +} diff --git a/frontend/appflowy_flutter/lib/core/document_notification.dart b/frontend/appflowy_flutter/lib/core/notification/document_notification.dart similarity index 91% rename from frontend/appflowy_flutter/lib/core/document_notification.dart rename to frontend/appflowy_flutter/lib/core/notification/document_notification.dart index 8bc8d39b02..bffcbf2a72 100644 --- a/frontend/appflowy_flutter/lib/core/document_notification.dart +++ b/frontend/appflowy_flutter/lib/core/notification/document_notification.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:appflowy/core/notification_helper.dart'; +import 'package:appflowy/core/notification/notification_helper.dart'; import 'package:appflowy_backend/protobuf/flowy-document2/notification.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:dartz/dartz.dart'; diff --git a/frontend/appflowy_flutter/lib/core/folder_notification.dart b/frontend/appflowy_flutter/lib/core/notification/folder_notification.dart similarity index 100% rename from frontend/appflowy_flutter/lib/core/folder_notification.dart rename to frontend/appflowy_flutter/lib/core/notification/folder_notification.dart diff --git a/frontend/appflowy_flutter/lib/core/grid_notification.dart b/frontend/appflowy_flutter/lib/core/notification/grid_notification.dart similarity index 100% rename from frontend/appflowy_flutter/lib/core/grid_notification.dart rename to frontend/appflowy_flutter/lib/core/notification/grid_notification.dart diff --git a/frontend/appflowy_flutter/lib/core/notification_helper.dart b/frontend/appflowy_flutter/lib/core/notification/notification_helper.dart similarity index 100% rename from frontend/appflowy_flutter/lib/core/notification_helper.dart rename to frontend/appflowy_flutter/lib/core/notification/notification_helper.dart diff --git a/frontend/appflowy_flutter/lib/core/user_notification.dart b/frontend/appflowy_flutter/lib/core/notification/user_notification.dart similarity index 100% rename from frontend/appflowy_flutter/lib/core/user_notification.dart rename to frontend/appflowy_flutter/lib/core/notification/user_notification.dart diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/cell/cell_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/cell/cell_listener.dart index bb1eaaa414..be015b81bd 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/cell/cell_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/cell/cell_listener.dart @@ -1,4 +1,4 @@ -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/notification.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_listener.dart index cd8ec286ba..d3597dc046 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/field/field_listener.dart @@ -1,4 +1,4 @@ -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/notification.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/filter/filter_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/filter/filter_listener.dart index 48cdc04e88..0170f97772 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/filter/filter_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/filter/filter_listener.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/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-database2/notification.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/group/group_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/group/group_listener.dart index 20183d6efb..04c40da908 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/group/group_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/group/group_listener.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/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-database2/notification.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/calendar_setting_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/calendar_setting_listener.dart index 9bcfc2edc0..11c729b30c 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/calendar_setting_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/calendar_setting_listener.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/protobuf.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/layout_setting_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/layout_setting_listener.dart index 75058bd188..f5497225fd 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/layout_setting_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/layout/layout_setting_listener.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/protobuf.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_listener.dart index e6d8fc7627..b9be9becf3 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/setting/setting_listener.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/sort/sort_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/sort/sort_listener.dart index c78ce733e6..64ae13787f 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/sort/sort_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/sort/sort_listener.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:dartz/dartz.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/application/view/view_listener.dart b/frontend/appflowy_flutter/lib/plugins/database_view/application/view/view_listener.dart index 699a113edd..ca10ac1125 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/application/view/view_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/application/view/view_listener.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pb.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_infra/notifier.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/board/application/group_controller.dart b/frontend/appflowy_flutter/lib/plugins/database_view/board/application/group_controller.dart index 5987482ad7..df7e91d19a 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/board/application/group_controller.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/board/application/group_controller.dart @@ -4,7 +4,7 @@ import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; import 'dart:typed_data'; -import 'package:appflowy/core/grid_notification.dart'; +import 'package:appflowy/core/notification/grid_notification.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:dartz/dartz.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart index bca3bd3f74..cd187486f3 100644 --- a/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart +++ b/frontend/appflowy_flutter/lib/plugins/trash/application/trash_listener.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy/core/folder_notification.dart'; +import 'package:appflowy/core/notification/folder_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder2/notification.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/startup/tasks/app_widget.dart b/frontend/appflowy_flutter/lib/startup/tasks/app_widget.dart index 9fd81a7676..e5fe1a3596 100644 --- a/frontend/appflowy_flutter/lib/startup/tasks/app_widget.dart +++ b/frontend/appflowy_flutter/lib/startup/tasks/app_widget.dart @@ -25,6 +25,7 @@ class InitAppWidgetTask extends LaunchTask { appearanceSetting: appearanceSetting, child: widget, ); + Bloc.observer = ApplicationBlocObserver(); runApp( EasyLocalization( diff --git a/frontend/appflowy_flutter/lib/user/application/user_listener.dart b/frontend/appflowy_flutter/lib/user/application/user_listener.dart index 695e9eb292..91185b8f45 100644 --- a/frontend/appflowy_flutter/lib/user/application/user_listener.dart +++ b/frontend/appflowy_flutter/lib/user/application/user_listener.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:appflowy/core/folder_notification.dart'; -import 'package:appflowy/core/user_notification.dart'; +import 'package:appflowy/core/notification/folder_notification.dart'; +import 'package:appflowy/core/notification/user_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-folder2/workspace.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart b/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart index 8e003206c5..4de2500d07 100644 --- a/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart +++ b/frontend/appflowy_flutter/lib/workspace/application/app/app_listener.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy/core/folder_notification.dart'; +import 'package:appflowy/core/notification/folder_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/log.dart'; import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/workspace/application/doc/doc_listener.dart b/frontend/appflowy_flutter/lib/workspace/application/doc/doc_listener.dart index 12ed153a70..9f74162120 100644 --- a/frontend/appflowy_flutter/lib/workspace/application/doc/doc_listener.dart +++ b/frontend/appflowy_flutter/lib/workspace/application/doc/doc_listener.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy/core/document_notification.dart'; +import 'package:appflowy/core/notification/document_notification.dart'; import 'package:appflowy_backend/protobuf/flowy-document2/protobuf.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart b/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart index 79b3344c24..e264094803 100644 --- a/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart +++ b/frontend/appflowy_flutter/lib/workspace/application/view/view_listener.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy/core/folder_notification.dart'; +import 'package:appflowy/core/notification/folder_notification.dart'; import 'package:dartz/dartz.dart'; import 'package:appflowy_backend/protobuf/flowy-notification/subject.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart'; diff --git a/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart b/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart index 715e948a47..0e58bd86ba 100644 --- a/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart +++ b/frontend/appflowy_flutter/lib/workspace/application/workspace/workspace_listener.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:appflowy/core/folder_notification.dart'; +import 'package:appflowy/core/notification/folder_notification.dart'; import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_infra/notifier.dart'; diff --git a/frontend/appflowy_flutter/packages/appflowy_backend/lib/dispatch/dispatch.dart b/frontend/appflowy_flutter/packages/appflowy_backend/lib/dispatch/dispatch.dart index b194a09c42..cc755286e0 100644 --- a/frontend/appflowy_flutter/packages/appflowy_backend/lib/dispatch/dispatch.dart +++ b/frontend/appflowy_flutter/packages/appflowy_backend/lib/dispatch/dispatch.dart @@ -22,6 +22,8 @@ import 'package:appflowy_backend/protobuf/flowy-document2/protobuf.dart'; // ignore: unused_import import 'package:protobuf/protobuf.dart'; import 'dart:convert' show utf8; +import '../protobuf/flowy-config/entities.pb.dart'; +import '../protobuf/flowy-config/event_map.pb.dart'; import '../protobuf/flowy-net/event_map.pb.dart'; import 'error.dart'; @@ -30,6 +32,7 @@ part 'dart_event/flowy-net/dart_event.dart'; part 'dart_event/flowy-user/dart_event.dart'; part 'dart_event/flowy-database2/dart_event.dart'; part 'dart_event/flowy-document2/dart_event.dart'; +part 'dart_event/flowy-config/dart_event.dart'; enum FFIException { RequestIsEmpty, diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index 134c91516c..884aff029b 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -1534,6 +1534,21 @@ dependencies = [ "walkdir", ] +[[package]] +name = "flowy-config" +version = "0.1.0" +dependencies = [ + "appflowy-integrate", + "bytes", + "flowy-codegen", + "flowy-derive", + "flowy-error", + "flowy-sqlite", + "lib-dispatch", + "protobuf", + "strum_macros", +] + [[package]] name = "flowy-core" version = "0.1.0" @@ -1541,6 +1556,7 @@ dependencies = [ "appflowy-integrate", "bytes", "console-subscriber", + "flowy-config", "flowy-database2", "flowy-document2", "flowy-error", diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index f97fb9a283..b2fce2b2e5 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -14,6 +14,7 @@ members = [ "flowy-error", "flowy-database2", "flowy-task", + "flowy-config", ] [profile.dev] diff --git a/frontend/rust-lib/flowy-config/Cargo.toml b/frontend/rust-lib/flowy-config/Cargo.toml new file mode 100644 index 0000000000..5751f53599 --- /dev/null +++ b/frontend/rust-lib/flowy-config/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "flowy-config" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +flowy-sqlite = { path = "../flowy-sqlite" } +flowy-derive = { path = "../../../shared-lib/flowy-derive" } +lib-dispatch = { path = "../lib-dispatch" } +protobuf = {version = "2.28.0"} +bytes = { version = "1.4" } +flowy-error = { path = "../flowy-error" } +strum_macros = "0.21" +appflowy-integrate = {version = "0.1.0" } + +[build-dependencies] +flowy-codegen = { path = "../../../shared-lib/flowy-codegen"} + +[features] +dart = ["flowy-codegen/dart"] +ts = ["flowy-codegen/ts"] diff --git a/frontend/rust-lib/flowy-config/Flowy.toml b/frontend/rust-lib/flowy-config/Flowy.toml new file mode 100644 index 0000000000..0dbe74b3e3 --- /dev/null +++ b/frontend/rust-lib/flowy-config/Flowy.toml @@ -0,0 +1,3 @@ +# Check out the FlowyConfig (located in flowy_toml.rs) for more details. +proto_input = ["src/event_map.rs", "src/entities.rs"] +event_files = ["src/event_map.rs"] \ No newline at end of file diff --git a/frontend/rust-lib/flowy-config/build.rs b/frontend/rust-lib/flowy-config/build.rs new file mode 100644 index 0000000000..06388d2a02 --- /dev/null +++ b/frontend/rust-lib/flowy-config/build.rs @@ -0,0 +1,10 @@ +fn main() { + let crate_name = env!("CARGO_PKG_NAME"); + flowy_codegen::protobuf_file::gen(crate_name); + + #[cfg(feature = "dart")] + flowy_codegen::dart_event::gen(crate_name); + + #[cfg(feature = "ts")] + flowy_codegen::ts_event::gen(crate_name); +} diff --git a/frontend/rust-lib/flowy-config/src/entities.rs b/frontend/rust-lib/flowy-config/src/entities.rs new file mode 100644 index 0000000000..d3b1bad2e1 --- /dev/null +++ b/frontend/rust-lib/flowy-config/src/entities.rs @@ -0,0 +1,45 @@ +use flowy_derive::ProtoBuf; + +#[derive(Default, ProtoBuf)] +pub struct KeyValuePB { + #[pb(index = 1)] + pub key: String, + + #[pb(index = 2, one_of)] + pub value: Option, +} + +#[derive(Default, ProtoBuf)] +pub struct KeyPB { + #[pb(index = 1)] + pub key: String, +} + +#[derive(Default, ProtoBuf)] +pub struct SupabaseConfigPB { + #[pb(index = 1)] + supabase_url: String, + + #[pb(index = 2)] + supabase_key: String, + + #[pb(index = 3)] + jwt_secret: String, +} + +#[derive(Default, ProtoBuf)] +pub struct AppFlowyCollabConfigPB { + #[pb(index = 1, one_of)] + aws_config: Option, +} + +#[derive(Default, ProtoBuf)] +pub struct AWSDynamoDBConfigPB { + #[pb(index = 1)] + pub access_key_id: String, + #[pb(index = 2)] + pub secret_access_key: String, + // Region list: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html + #[pb(index = 3)] + pub region: String, +} diff --git a/frontend/rust-lib/flowy-config/src/event_handler.rs b/frontend/rust-lib/flowy-config/src/event_handler.rs new file mode 100644 index 0000000000..9bd3b1eda4 --- /dev/null +++ b/frontend/rust-lib/flowy-config/src/event_handler.rs @@ -0,0 +1,40 @@ +use flowy_error::{FlowyError, FlowyResult}; +use flowy_sqlite::kv::KV; +use lib_dispatch::prelude::{data_result_ok, AFPluginData, DataResult}; + +use crate::entities::{KeyPB, KeyValuePB, SupabaseConfigPB}; + +pub(crate) async fn set_key_value_handler(data: AFPluginData) -> FlowyResult<()> { + let data = data.into_inner(); + match data.value { + None => KV::remove(&data.key), + Some(value) => { + KV::set_str(&data.key, value); + }, + } + Ok(()) +} + +pub(crate) async fn get_key_value_handler( + data: AFPluginData, +) -> DataResult { + let data = data.into_inner(); + let value = KV::get_str(&data.key); + data_result_ok(KeyValuePB { + key: data.key, + value, + }) +} + +pub(crate) async fn remove_key_value_handler(data: AFPluginData) -> FlowyResult<()> { + let data = data.into_inner(); + KV::remove(&data.key); + Ok(()) +} + +pub(crate) async fn set_supabase_config_handler( + data: AFPluginData, +) -> FlowyResult<()> { + let _config = data.into_inner(); + Ok(()) +} diff --git a/frontend/rust-lib/flowy-config/src/event_map.rs b/frontend/rust-lib/flowy-config/src/event_map.rs new file mode 100644 index 0000000000..1a4068acdb --- /dev/null +++ b/frontend/rust-lib/flowy-config/src/event_map.rs @@ -0,0 +1,31 @@ +use strum_macros::Display; + +use flowy_derive::{Flowy_Event, ProtoBuf_Enum}; +use lib_dispatch::prelude::AFPlugin; + +use crate::event_handler::*; + +pub fn init() -> AFPlugin { + AFPlugin::new() + .name(env!("CARGO_PKG_NAME")) + .event(ConfigEvent::SetKeyValue, set_key_value_handler) + .event(ConfigEvent::GetKeyValue, get_key_value_handler) + .event(ConfigEvent::RemoveKeyValue, remove_key_value_handler) + .event(ConfigEvent::SetSupabaseConfig, set_supabase_config_handler) +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, Display, ProtoBuf_Enum, Flowy_Event)] +#[event_err = "FlowyError"] +pub enum ConfigEvent { + #[event(input = "KeyValuePB")] + SetKeyValue = 0, + + #[event(input = "KeyPB", output = "KeyValuePB")] + GetKeyValue = 1, + + #[event(input = "KeyPB")] + RemoveKeyValue = 2, + + #[event(input = "SupabaseConfigPB")] + SetSupabaseConfig = 3, +} diff --git a/frontend/rust-lib/flowy-config/src/lib.rs b/frontend/rust-lib/flowy-config/src/lib.rs new file mode 100644 index 0000000000..0c11fb9c5a --- /dev/null +++ b/frontend/rust-lib/flowy-config/src/lib.rs @@ -0,0 +1,4 @@ +mod entities; +mod event_handler; +pub mod event_map; +mod protobuf; diff --git a/frontend/rust-lib/flowy-core/Cargo.toml b/frontend/rust-lib/flowy-core/Cargo.toml index 4fc512cb72..bee70ed1a5 100644 --- a/frontend/rust-lib/flowy-core/Cargo.toml +++ b/frontend/rust-lib/flowy-core/Cargo.toml @@ -19,6 +19,7 @@ flowy-document2 = { path = "../flowy-document2" } #flowy-revision = { path = "../flowy-revision" } flowy-error = { path = "../flowy-error" } flowy-task = { path = "../flowy-task" } +flowy-config = { path = "../flowy-config" } appflowy-integrate = { version = "0.1.0" } tracing = { version = "0.1", features = ["log"] } @@ -45,6 +46,7 @@ dart = [ "flowy-folder2/dart", "flowy-database2/dart", "flowy-document2/dart", + "flowy-config/dart", ] ts = [ "flowy-user/ts", @@ -52,6 +54,7 @@ ts = [ "flowy-folder2/ts", "flowy-database2/ts", "flowy-document2/ts", + "flowy-config/ts", ] rev-sqlite = [ "flowy-sqlite", diff --git a/frontend/rust-lib/flowy-core/src/module.rs b/frontend/rust-lib/flowy-core/src/module.rs index fbd6df748d..46f1a7efcd 100644 --- a/frontend/rust-lib/flowy-core/src/module.rs +++ b/frontend/rust-lib/flowy-core/src/module.rs @@ -17,11 +17,13 @@ pub fn make_plugins( let network_plugin = flowy_net::event_map::init(); let database_plugin = flowy_database2::event_map::init(database_manager.clone()); let document_plugin2 = flowy_document2::event_map::init(document_manager2.clone()); + let config_plugin = flowy_config::event_map::init(); vec![ user_plugin, folder_plugin, network_plugin, database_plugin, document_plugin2, + config_plugin, ] } diff --git a/frontend/rust-lib/flowy-document2/Cargo.toml b/frontend/rust-lib/flowy-document2/Cargo.toml index 42551adb4c..a8ac02e675 100644 --- a/frontend/rust-lib/flowy-document2/Cargo.toml +++ b/frontend/rust-lib/flowy-document2/Cargo.toml @@ -13,7 +13,6 @@ appflowy-integrate = {version = "0.1.0" } flowy-derive = { path = "../../../shared-lib/flowy-derive" } flowy-notification = { path = "../flowy-notification" } flowy-error = { path = "../flowy-error", features = ["adaptor_serde", "adaptor_database", "adaptor_dispatch", "collab"] } - lib-dispatch = { path = "../lib-dispatch" } protobuf = {version = "2.28.0"}