doc_service.dart 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import 'package:appflowy_backend/dispatch/dispatch.dart';
  2. import 'package:appflowy_backend/protobuf/flowy-document2/entities.pb.dart';
  3. import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
  4. import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
  5. import 'package:dartz/dartz.dart';
  6. class DocumentService {
  7. // unused now.
  8. Future<Either<FlowyError, Unit>> createDocument({
  9. required ViewPB view,
  10. }) async {
  11. final canOpen = await openDocument(view: view);
  12. if (canOpen.isRight()) {
  13. return const Right(unit);
  14. }
  15. final payload = CreateDocumentPayloadPB()..documentId = view.id;
  16. final result = await DocumentEventCreateDocument(payload).send();
  17. return result.swap();
  18. }
  19. Future<Either<FlowyError, DocumentDataPB>> openDocument({
  20. required ViewPB view,
  21. }) async {
  22. final payload = OpenDocumentPayloadPB()..documentId = view.id;
  23. final result = await DocumentEventOpenDocument(payload).send();
  24. return result.swap();
  25. }
  26. Future<Either<FlowyError, Unit>> closeDocument({
  27. required ViewPB view,
  28. }) async {
  29. final payload = CloseDocumentPayloadPB()..documentId = view.id;
  30. final result = await DocumentEventCloseDocument(payload).send();
  31. return result.swap();
  32. }
  33. Future<Either<FlowyError, Unit>> applyAction({
  34. required String documentId,
  35. required Iterable<BlockActionPB> actions,
  36. }) async {
  37. final payload = ApplyActionPayloadPB(
  38. documentId: documentId,
  39. actions: actions,
  40. );
  41. final result = await DocumentEventApplyAction(payload).send();
  42. return result.swap();
  43. }
  44. /// Creates a new external text.
  45. ///
  46. /// Normally, it's used to the block that needs sync long text.
  47. ///
  48. /// the delta parameter is the json representation of the delta.
  49. Future<Either<FlowyError, Unit>> createExternalText({
  50. required String documentId,
  51. required String textId,
  52. String? delta,
  53. }) async {
  54. final payload = TextDeltaPayloadPB(
  55. documentId: documentId,
  56. textId: textId,
  57. delta: delta,
  58. );
  59. final result = await DocumentEventCreateText(payload).send();
  60. return result.swap();
  61. }
  62. /// Updates the external text.
  63. ///
  64. /// this function is compatible with the [createExternalText] function.
  65. ///
  66. /// the delta parameter is the json representation of the delta too.
  67. Future<Either<FlowyError, Unit>> updateExternalText({
  68. required String documentId,
  69. required String textId,
  70. String? delta,
  71. }) async {
  72. final payload = TextDeltaPayloadPB(
  73. documentId: documentId,
  74. textId: textId,
  75. delta: delta,
  76. );
  77. final result = await DocumentEventApplyTextDeltaEvent(payload).send();
  78. return result.swap();
  79. }
  80. }