i_doc.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import 'dart:convert';
  2. import 'package:flowy_editor/flowy_editor.dart';
  3. import 'package:dartz/dartz.dart';
  4. // ignore: implementation_imports
  5. import 'package:flowy_editor/src/model/quill_delta.dart';
  6. import 'package:flowy_log/flowy_log.dart';
  7. import 'package:flowy_sdk/protobuf/flowy-document/doc.pb.dart';
  8. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
  9. class FlowyDoc implements EditorDeltaSender {
  10. final Doc doc;
  11. final IDoc iDocImpl;
  12. Document data;
  13. FlowyDoc({required this.doc, required this.data, required this.iDocImpl}) {
  14. data.sender = this;
  15. }
  16. String get id => doc.id;
  17. @override
  18. void sendNewDelta(Delta changeset, Delta delta) async {
  19. final json = jsonEncode(changeset.toJson());
  20. Log.debug("Send json: $json");
  21. final result = await iDocImpl.applyChangeset(json: json);
  22. result.fold((rustDoc) {
  23. // final json = utf8.decode(doc.data);
  24. final rustDelta = Delta.fromJson(jsonDecode(rustDoc.data));
  25. if (delta != rustDelta) {
  26. Log.error("Receive : $rustDelta");
  27. Log.error("Expected : $delta");
  28. } else {
  29. Log.info("Receive : $rustDelta");
  30. Log.info("Expected : $delta");
  31. }
  32. }, (r) => null);
  33. }
  34. }
  35. abstract class IDoc {
  36. Future<Either<Doc, WorkspaceError>> readDoc();
  37. Future<Either<Doc, WorkspaceError>> applyChangeset({required String json});
  38. Future<Either<Unit, WorkspaceError>> closeDoc();
  39. }