diff --git a/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart b/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart index a601e99721..d00f3e7737 100644 --- a/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart +++ b/frontend/app_flowy/lib/workspace/application/menu/menu_bloc.dart @@ -1,6 +1,7 @@ import 'dart:async'; +import 'package:app_flowy/workspace/application/workspace/workspace_listener.dart'; +import 'package:app_flowy/workspace/application/workspace/workspace_service.dart'; import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/workspace_repo.dart'; import 'package:app_flowy/workspace/presentation/stack_page/blank/blank_page.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_sdk/log.dart'; @@ -12,9 +13,11 @@ import 'package:flutter_bloc/flutter_bloc.dart'; part 'menu_bloc.freezed.dart'; class MenuBloc extends Bloc { - final WorkspaceRepo repo; + final WorkspaceService service; final WorkspaceListener listener; - MenuBloc({required this.repo, required this.listener}) : super(MenuState.initial()) { + final String workspaceId; + + MenuBloc({required this.workspaceId, required this.service, required this.listener}) : super(MenuState.initial()) { on((event, emit) async { await event.map( initial: (e) async { @@ -48,7 +51,7 @@ class MenuBloc extends Bloc { } Future _performActionOnCreateApp(CreateApp event, Emitter emit) async { - final result = await repo.createApp(event.name, event.desc ?? ""); + final result = await service.createApp(workspaceId: workspaceId, name: event.name, desc: event.desc ?? ""); result.fold( (app) => {}, (error) { @@ -60,7 +63,7 @@ class MenuBloc extends Bloc { // ignore: unused_element Future _fetchApps(Emitter emit) async { - final appsOrFail = await repo.getApps(); + final appsOrFail = await service.getApps(workspaceId: workspaceId); emit(appsOrFail.fold( (apps) => state.copyWith(apps: some(apps)), (error) { diff --git a/frontend/app_flowy/lib/workspace/infrastructure/repos/workspace_repo.dart b/frontend/app_flowy/lib/workspace/application/workspace/workspace_listener.dart similarity index 61% rename from frontend/app_flowy/lib/workspace/infrastructure/repos/workspace_repo.dart rename to frontend/app_flowy/lib/workspace/application/workspace/workspace_listener.dart index f5465ca81e..10d59f5db4 100644 --- a/frontend/app_flowy/lib/workspace/infrastructure/repos/workspace_repo.dart +++ b/frontend/app_flowy/lib/workspace/application/workspace/workspace_listener.dart @@ -1,10 +1,9 @@ import 'dart:async'; import 'dart:typed_data'; +import 'package:app_flowy/workspace/infrastructure/repos/helper.dart'; import 'package:dartz/dartz.dart'; -import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_sdk/log.dart'; -import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/protobuf/dart-notify/subject.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-user-data-model/protobuf.dart' show UserProfile; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart'; @@ -12,56 +11,28 @@ import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-folder/dart_notification.pb.dart'; import 'package:flowy_sdk/rust_stream.dart'; -import 'package:app_flowy/generated/locale_keys.g.dart'; -import 'helper.dart'; -class WorkspaceRepo { - UserProfile user; - String workspaceId; - WorkspaceRepo({ - required this.user, - required this.workspaceId, +typedef WorkspaceAppsChangedCallback = void Function(Either, FlowyError> appsOrFail); +typedef WorkspaceUpdatedCallback = void Function(String name, String desc); + +class WorkspaceListener { + WorkspaceListenerService service; + WorkspaceListener({ + required this.service, }); - Future> createApp(String name, String desc) { - final request = CreateAppPayload.create() - ..name = name - ..workspaceId = workspaceId - ..desc = desc; - return FolderEventCreateApp(request).send(); + void start({WorkspaceAppsChangedCallback? addAppCallback, WorkspaceUpdatedCallback? updatedCallback}) { + service.startListening(appsChanged: addAppCallback, update: updatedCallback); } - Future> getWorkspace() { - final request = WorkspaceId.create()..value = workspaceId; - return FolderEventReadWorkspaces(request).send().then((result) { - return result.fold( - (workspaces) { - assert(workspaces.items.length == 1); - - if (workspaces.items.isEmpty) { - return right(FlowyError.create()..msg = LocaleKeys.workspace_notFoundError.tr()); - } else { - return left(workspaces.items[0]); - } - }, - (error) => right(error), - ); - }); - } - - Future, FlowyError>> getApps() { - final request = WorkspaceId.create()..value = workspaceId; - return FolderEventReadWorkspaceApps(request).send().then((result) { - return result.fold( - (apps) => left(apps.items), - (error) => right(error), - ); - }); + Future stop() async { + await service.close(); } } -class WorkspaceListenerRepo { + +class WorkspaceListenerService { StreamSubscription? _subscription; WorkspaceAppsChangedCallback? _appsChanged; WorkspaceUpdatedCallback? _update; @@ -69,7 +40,7 @@ class WorkspaceListenerRepo { final UserProfile user; final String workspaceId; - WorkspaceListenerRepo({ + WorkspaceListenerService({ required this.user, required this.workspaceId, }); @@ -125,22 +96,3 @@ class WorkspaceListenerRepo { // _update = null; } } - -typedef WorkspaceAppsChangedCallback = void Function(Either, FlowyError> appsOrFail); - -typedef WorkspaceUpdatedCallback = void Function(String name, String desc); - -class WorkspaceListener { - WorkspaceListenerRepo repo; - WorkspaceListener({ - required this.repo, - }); - - void start({WorkspaceAppsChangedCallback? addAppCallback, WorkspaceUpdatedCallback? updatedCallback}) { - repo.startListening(appsChanged: addAppCallback, update: updatedCallback); - } - - Future stop() async { - await repo.close(); - } -} diff --git a/frontend/app_flowy/lib/workspace/application/workspace/workspace_service.dart b/frontend/app_flowy/lib/workspace/application/workspace/workspace_service.dart new file mode 100644 index 0000000000..931fbf028b --- /dev/null +++ b/frontend/app_flowy/lib/workspace/application/workspace/workspace_service.dart @@ -0,0 +1,46 @@ +import 'dart:async'; +import 'package:dartz/dartz.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flowy_sdk/dispatch/dispatch.dart'; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; +import 'package:app_flowy/generated/locale_keys.g.dart'; + +class WorkspaceService { + Future> createApp({required String workspaceId, required String name, required String desc}) { + final request = CreateAppPayload.create() + ..name = name + ..workspaceId = workspaceId + ..desc = desc; + return FolderEventCreateApp(request).send(); + } + + Future> getWorkspace({required String workspaceId}) { + final request = WorkspaceId.create()..value = workspaceId; + return FolderEventReadWorkspaces(request).send().then((result) { + return result.fold( + (workspaces) { + assert(workspaces.items.length == 1); + + if (workspaces.items.isEmpty) { + return right(FlowyError.create()..msg = LocaleKeys.workspace_notFoundError.tr()); + } else { + return left(workspaces.items[0]); + } + }, + (error) => right(error), + ); + }); + } + + Future, FlowyError>> getApps({required String workspaceId}) { + final request = WorkspaceId.create()..value = workspaceId; + return FolderEventReadWorkspaceApps(request).send().then((result) { + return result.fold( + (apps) => left(apps.items), + (error) => right(error), + ); + }); + } +} diff --git a/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart b/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart index f35af8f95e..255b18e593 100644 --- a/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart +++ b/frontend/app_flowy/lib/workspace/infrastructure/deps_resolver.dart @@ -12,10 +12,11 @@ import 'package:app_flowy/workspace/application/trash/trash_listener.dart'; import 'package:app_flowy/workspace/application/trash/trash_service.dart'; import 'package:app_flowy/workspace/application/view/view_bloc.dart'; import 'package:app_flowy/workspace/application/workspace/welcome_bloc.dart'; +import 'package:app_flowy/workspace/application/workspace/workspace_listener.dart'; +import 'package:app_flowy/workspace/application/workspace/workspace_service.dart'; import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart'; import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart'; import 'package:app_flowy/workspace/infrastructure/repos/view_repo.dart'; -import 'package:app_flowy/workspace/infrastructure/repos/workspace_repo.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_profile.pb.dart'; @@ -42,8 +43,8 @@ class HomeDepsResolver { ); //workspace - getIt.registerFactoryParam( - (user, workspaceId) => WorkspaceListener(repo: WorkspaceListenerRepo(user: user, workspaceId: workspaceId))); + getIt.registerFactoryParam((user, workspaceId) => + WorkspaceListener(service: WorkspaceListenerService(user: user, workspaceId: workspaceId))); // View getIt.registerFactoryParam( @@ -60,7 +61,8 @@ class HomeDepsResolver { //Menu Bloc getIt.registerFactoryParam( (user, workspaceId) => MenuBloc( - repo: WorkspaceRepo(user: user, workspaceId: workspaceId), + workspaceId: workspaceId, + service: WorkspaceService(), listener: getIt(param1: user, param2: workspaceId), ), );