i_app_impl.dart 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import 'package:app_flowy/workspace/infrastructure/repos/app_repo.dart';
  2. import 'package:app_flowy/workspace/infrastructure/repos/doc_repo.dart';
  3. import 'package:dartz/dartz.dart';
  4. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart' as workspace;
  5. import 'package:app_flowy/workspace/domain/i_app.dart';
  6. import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart';
  7. export 'package:app_flowy/workspace/domain/i_app.dart';
  8. class IAppImpl extends IApp {
  9. AppRepository repo;
  10. IAppImpl({
  11. required this.repo,
  12. });
  13. @override
  14. Future<Either<List<View>, workspace.WorkspaceError>> getViews() {
  15. return repo.getViews();
  16. }
  17. @override
  18. Future<Either<View, workspace.WorkspaceError>> createView(
  19. {required String name, String? desc, required ViewType viewType}) {
  20. return repo.createView(name, desc ?? "", viewType).then((result) {
  21. return result.fold(
  22. (view) => _createDoc(view),
  23. (r) => right(r),
  24. );
  25. });
  26. }
  27. Future<Either<View, workspace.WorkspaceError>> _createDoc(View view) async {
  28. switch (view.viewType) {
  29. case ViewType.Doc:
  30. final docRepo = DocRepository(docId: view.id);
  31. final result = await docRepo.createDoc(
  32. name: view.name, desc: "", text: "[{\"insert\":\"\\n\"}]");
  33. return result.fold((l) => left(view), (r) {
  34. return right(workspace.WorkspaceError(
  35. code: workspace.ErrorCode.Unknown, msg: r.msg));
  36. });
  37. default:
  38. return left(view);
  39. }
  40. }
  41. }
  42. class IAppWatchImpl extends IAppWatch {
  43. AppWatchRepository repo;
  44. IAppWatchImpl({
  45. required this.repo,
  46. });
  47. @override
  48. void startWatching(
  49. {AppCreateViewCallback? addViewCallback,
  50. AppUpdatedCallback? updatedCallback}) {
  51. repo.startWatching(createView: addViewCallback, update: updatedCallback);
  52. }
  53. @override
  54. Future<void> stopWatching() async {
  55. await repo.close();
  56. }
  57. }