diff --git a/frontend/.vscode/launch.json b/frontend/.vscode/launch.json index c8504d7e48..c21e232410 100644 --- a/frontend/.vscode/launch.json +++ b/frontend/.vscode/launch.json @@ -66,6 +66,16 @@ }, "cwd": "${workspaceRoot}/appflowy_flutter" }, + { + "name": "AF-iOS-Simulator: Build Dart only", + "request": "launch", + "program": "./lib/main.dart", + "type": "dart", + "env": { + "RUST_LOG": "trace" + }, + "cwd": "${workspaceRoot}/appflowy_flutter" + }, { "name": "AF-iOS-Simulator: Build All", "request": "launch", diff --git a/frontend/appflowy_flutter/ios/Podfile.lock b/frontend/appflowy_flutter/ios/Podfile.lock index 0e508e8ca0..9c90ae776c 100644 --- a/frontend/appflowy_flutter/ios/Podfile.lock +++ b/frontend/appflowy_flutter/ios/Podfile.lock @@ -202,4 +202,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 8c681999c7764593c94846b2a64b44d86f7a27ac -COCOAPODS: 1.12.1 +COCOAPODS: 1.11.3 diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_setting_page.dart b/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_setting_page.dart index a678916da5..c07e8d4dd9 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_setting_page.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_setting_page.dart @@ -1,4 +1,6 @@ +import 'package:appflowy/env/env.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:appflowy/mobile/presentation/setting/cloud/cloud_setting_group.dart'; import 'package:appflowy/mobile/presentation/presentation.dart'; import 'package:appflowy/mobile/presentation/setting/logout_setting_group.dart'; import 'package:appflowy/mobile/presentation/widgets/widgets.dart'; @@ -60,6 +62,7 @@ class _MobileHomeSettingPageState extends State { const NotificationsSettingGroup(), const AppearanceSettingGroup(), const LanguageSettingGroup(), + if (Env.enableCustomCloud) const CloudSettingGroup(), const SupportSettingGroup(), const AboutSettingGroup(), const LogoutSettingGroup(), diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/setting/cloud/appflowy_cloud_page.dart b/frontend/appflowy_flutter/lib/mobile/presentation/setting/cloud/appflowy_cloud_page.dart new file mode 100644 index 0000000000..8c4ba2dadc --- /dev/null +++ b/frontend/appflowy_flutter/lib/mobile/presentation/setting/cloud/appflowy_cloud_page.dart @@ -0,0 +1,28 @@ +import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:appflowy/startup/startup.dart'; +import 'package:appflowy/workspace/presentation/settings/widgets/setting_cloud.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; + +class AppFlowyCloudPage extends StatelessWidget { + const AppFlowyCloudPage({super.key}); + + static const routeName = '/AppFlowyCloudPage'; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(LocaleKeys.settings_mobile_privacyPolicy.tr()), + ), + body: Padding( + padding: const EdgeInsets.all(20.0), + child: SettingCloud( + didResetServerUrl: () async { + await runAppFlowy(); + }, + ), + ), + ); + } +} diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/setting/cloud/cloud_setting_group.dart b/frontend/appflowy_flutter/lib/mobile/presentation/setting/cloud/cloud_setting_group.dart new file mode 100644 index 0000000000..dee024ae21 --- /dev/null +++ b/frontend/appflowy_flutter/lib/mobile/presentation/setting/cloud/cloud_setting_group.dart @@ -0,0 +1,33 @@ +import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:appflowy/mobile/presentation/setting/cloud/appflowy_cloud_page.dart'; +import 'package:appflowy/mobile/presentation/setting/widgets/mobile_setting_group_widget.dart'; +import 'package:appflowy/mobile/presentation/setting/widgets/mobile_setting_item_widget.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:package_info_plus/package_info_plus.dart'; + +class CloudSettingGroup extends StatelessWidget { + const CloudSettingGroup({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: PackageInfo.fromPlatform(), + builder: (context, snapshot) => MobileSettingGroup( + groupTitle: LocaleKeys.settings_menu_cloudSetting.tr(), + settingItemList: [ + MobileSettingItem( + name: LocaleKeys.settings_menu_cloudAppFlowy.tr(), + trailing: const Icon( + Icons.chevron_right, + ), + onTap: () => context.push(AppFlowyCloudPage.routeName), + ), + ], + ), + ); + } +} diff --git a/frontend/appflowy_flutter/lib/startup/tasks/generate_router.dart b/frontend/appflowy_flutter/lib/startup/tasks/generate_router.dart index 2800ea412c..9d84e82281 100644 --- a/frontend/appflowy_flutter/lib/startup/tasks/generate_router.dart +++ b/frontend/appflowy_flutter/lib/startup/tasks/generate_router.dart @@ -8,6 +8,7 @@ import 'package:appflowy/mobile/presentation/database/mobile_calendar_screen.dar import 'package:appflowy/mobile/presentation/database/mobile_grid_screen.dart'; import 'package:appflowy/mobile/presentation/favorite/mobile_favorite_page.dart'; import 'package:appflowy/mobile/presentation/presentation.dart'; +import 'package:appflowy/mobile/presentation/setting/cloud/appflowy_cloud_page.dart'; import 'package:appflowy/mobile/presentation/setting/font/font_picker_screen.dart'; import 'package:appflowy/mobile/presentation/setting/language/language_picker_screen.dart'; import 'package:appflowy/plugins/base/color/color_picker_screen.dart'; @@ -48,6 +49,7 @@ GoRouter generateRouter(Widget child) { _mobileHomeSettingPageRoute(), _mobileSettingPrivacyPolicyPageRoute(), _mobileSettingUserAgreementPageRoute(), + _mobileCloudSettingAppFlowyCloudPageRoute(), // view page _mobileEditorScreenRoute(), @@ -216,6 +218,16 @@ GoRoute _mobileSettingPrivacyPolicyPageRoute() { ); } +GoRoute _mobileCloudSettingAppFlowyCloudPageRoute() { + return GoRoute( + parentNavigatorKey: AppGlobals.rootNavKey, + path: AppFlowyCloudPage.routeName, + pageBuilder: (context, state) { + return const MaterialPage(child: AppFlowyCloudPage()); + }, + ); +} + GoRoute _mobileSettingUserAgreementPageRoute() { return GoRoute( parentNavigatorKey: AppGlobals.rootNavKey, diff --git a/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart b/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart index 9de081be24..8f58b14560 100644 --- a/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart +++ b/frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart @@ -51,6 +51,7 @@ AppFlowyConfiguration _makeAppFlowyConfiguration( required Map rustEnvs, }) { final env = getIt(); + rustEnvs["RUST_LOG"] = 'trace'; return AppFlowyConfiguration( root: root, custom_app_path: customAppPath, diff --git a/frontend/appflowy_flutter/lib/user/presentation/screens/sign_in_screen/widgets/third_party_sign_in_buttons.dart b/frontend/appflowy_flutter/lib/user/presentation/screens/sign_in_screen/widgets/third_party_sign_in_buttons.dart index 3becb92d32..9876b33698 100644 --- a/frontend/appflowy_flutter/lib/user/presentation/screens/sign_in_screen/widgets/third_party_sign_in_buttons.dart +++ b/frontend/appflowy_flutter/lib/user/presentation/screens/sign_in_screen/widgets/third_party_sign_in_buttons.dart @@ -2,7 +2,6 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/user/application/sign_in_bloc.dart'; import 'package:appflowy/user/presentation/presentation.dart'; -import 'package:appflowy/util/platform_extension.dart'; import 'package:appflowy/workspace/application/settings/appearance/appearance_cubit.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/size.dart'; @@ -80,52 +79,6 @@ class _ThirdPartySignInButton extends StatelessWidget { @override Widget build(BuildContext context) { final style = Theme.of(context); - final isMobile = PlatformExtension.isMobile; - if (isMobile) { - return Container( - height: 48, - decoration: BoxDecoration( - borderRadius: const BorderRadius.all( - Radius.circular(4), - ), - border: Border.all( - color: style.colorScheme.outline, - width: 0.5, - ), - ), - child: Center( - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - // The icon could be in different height as original aspect ratio, we use a fixed sizebox to wrap it to make sure they all occupy the same space. - width: 30, - height: 30, - child: Center( - child: SizedBox( - width: 24, - child: FlowySvg( - icon, - blendMode: null, - ), - ), - ), - ), - const HSpace(8), - SizedBox( - // To fit the longest label 'Log in with Discord' - width: 135, - child: Text( - labelText, - style: Theme.of(context).textTheme.titleSmall, - ), - ), - ], - ), - ), - ); - } - // In desktop, the width of button is limited by [AuthFormContainer] return SizedBox( height: 48, width: AuthFormContainer.width, diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.lock b/frontend/appflowy_tauri/src-tauri/Cargo.lock index 2a00573863..74196ca3fb 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.lock +++ b/frontend/appflowy_tauri/src-tauri/Cargo.lock @@ -139,7 +139,7 @@ checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "app-error" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "reqwest", @@ -786,7 +786,7 @@ dependencies = [ [[package]] name = "client-api" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -1474,7 +1474,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "database-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -2833,7 +2833,7 @@ dependencies = [ [[package]] name = "gotrue" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "futures-util", @@ -2849,7 +2849,7 @@ dependencies = [ [[package]] name = "gotrue-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -3271,7 +3271,7 @@ dependencies = [ [[package]] name = "infra" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "reqwest", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "realtime-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "bincode", @@ -5795,7 +5795,7 @@ dependencies = [ [[package]] name = "shared_entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -7685,7 +7685,7 @@ dependencies = [ [[package]] name = "workspace-template" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "async-trait", diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.toml b/frontend/appflowy_tauri/src-tauri/Cargo.toml index 8a7dadf77d..4f4e7688f6 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.toml +++ b/frontend/appflowy_tauri/src-tauri/Cargo.toml @@ -57,7 +57,7 @@ custom-protocol = ["tauri/custom-protocol"] # Run the script: # scripts/tool/update_client_api_rev.sh new_rev_id # ⚠️⚠️⚠️️ -client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "62abd8abbf4dddb5822842f28d1fba67ccfae6de" } +client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "208a353fefe08ff2521d4be72be936329f5c0256" } # Please use the following script to update collab. # Working directory: frontend # diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index 3fee7bdb91..ba5487800f 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -125,7 +125,7 @@ checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "app-error" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "reqwest", @@ -667,7 +667,7 @@ dependencies = [ [[package]] name = "client-api" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -1280,7 +1280,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "database-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -2474,7 +2474,7 @@ dependencies = [ [[package]] name = "gotrue" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "futures-util", @@ -2490,7 +2490,7 @@ dependencies = [ [[package]] name = "gotrue-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -2851,7 +2851,7 @@ dependencies = [ [[package]] name = "infra" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "reqwest", @@ -4331,7 +4331,7 @@ dependencies = [ [[package]] name = "realtime-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "bincode", @@ -4997,7 +4997,7 @@ dependencies = [ [[package]] name = "shared_entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "app-error", @@ -6335,7 +6335,7 @@ dependencies = [ [[package]] name = "workspace-template" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=62abd8abbf4dddb5822842f28d1fba67ccfae6de#62abd8abbf4dddb5822842f28d1fba67ccfae6de" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=208a353fefe08ff2521d4be72be936329f5c0256#208a353fefe08ff2521d4be72be936329f5c0256" dependencies = [ "anyhow", "async-trait", diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index aeb644938e..ed773f139b 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -99,7 +99,7 @@ incremental = false # Run the script: # scripts/tool/update_client_api_rev.sh new_rev_id # ⚠️⚠️⚠️️ -client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "62abd8abbf4dddb5822842f28d1fba67ccfae6de" } +client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "208a353fefe08ff2521d4be72be936329f5c0256" } # Please use the following script to update collab. # Working directory: frontend # diff --git a/frontend/rust-lib/flowy-document2/src/manager.rs b/frontend/rust-lib/flowy-document2/src/manager.rs index 74efd1dc4e..6c4d9243e5 100644 --- a/frontend/rust-lib/flowy-document2/src/manager.rs +++ b/frontend/rust-lib/flowy-document2/src/manager.rs @@ -107,6 +107,7 @@ impl DocumentManager { if let Some(doc) = self.documents.lock().get(doc_id).cloned() { return Ok(doc); } + let mut updates = vec![]; if !self.is_doc_exist(doc_id)? { // Try to get the document from the cloud service diff --git a/frontend/rust-lib/lib-log/src/lib.rs b/frontend/rust-lib/lib-log/src/lib.rs index c92be9b0f7..eeeea7431e 100644 --- a/frontend/rust-lib/lib-log/src/lib.rs +++ b/frontend/rust-lib/lib-log/src/lib.rs @@ -47,7 +47,7 @@ impl Builder { .with_target(false) .with_max_level(tracing::Level::TRACE) .with_thread_ids(false) - .with_writer(std::io::stdout) + .with_writer(std::io::stderr) .pretty() .with_env_filter(env_filter) .finish()