i_doc.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 DocDelta 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.docId;
  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<DocDelta, WorkspaceError>> readDoc();
  37. Future<Either<DocDelta, WorkspaceError>> applyChangeset(
  38. {required String json});
  39. Future<Either<Unit, WorkspaceError>> closeDoc();
  40. }