i_app_impl.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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';
  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>, WorkspaceError>> getViews() {
  15. return repo.getViews();
  16. }
  17. @override
  18. Future<Either<View, 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, 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(WorkspaceError(code: WsErrCode.Unknown, msg: r.msg));
  35. });
  36. default:
  37. return left(view);
  38. }
  39. }
  40. }
  41. class IAppWatchImpl extends IAppWatch {
  42. AppWatchRepository repo;
  43. IAppWatchImpl({
  44. required this.repo,
  45. });
  46. @override
  47. void startWatching(
  48. {AppCreateViewCallback? addViewCallback,
  49. AppUpdatedCallback? updatedCallback}) {
  50. repo.startWatching(createView: addViewCallback, update: updatedCallback);
  51. }
  52. @override
  53. Future<void> stopWatching() async {
  54. await repo.close();
  55. }
  56. }