47 lines
1.4 KiB
Dart
Raw Normal View History

2021-09-14 16:22:44 +08:00
import 'dart:convert';
2021-07-24 14:05:49 +08:00
import 'package:flowy_editor/flowy_editor.dart';
import 'package:dartz/dartz.dart';
2021-09-15 16:35:40 +08:00
// ignore: implementation_imports
2021-09-14 16:22:44 +08:00
import 'package:flowy_editor/src/model/quill_delta.dart';
2021-09-15 15:01:24 +08:00
import 'package:flowy_log/flowy_log.dart';
import 'package:flowy_sdk/protobuf/flowy-document/doc.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
2021-09-21 15:07:07 +08:00
class FlowyDoc implements EditorDeltaSender {
final Doc doc;
2021-09-14 16:22:44 +08:00
final IDoc iDocImpl;
Document data;
2021-07-24 14:05:49 +08:00
2021-09-14 16:22:44 +08:00
FlowyDoc({required this.doc, required this.data, required this.iDocImpl}) {
data.sender = this;
}
2021-09-11 21:30:58 +08:00
String get id => doc.id;
2021-09-14 16:22:44 +08:00
@override
2021-09-21 15:07:07 +08:00
void sendNewDelta(Delta changeset, Delta delta) async {
2021-09-15 16:35:40 +08:00
final json = jsonEncode(changeset.toJson());
2021-09-15 15:01:24 +08:00
Log.debug("Send json: $json");
2021-09-15 16:35:40 +08:00
final result = await iDocImpl.applyChangeset(json: json);
result.fold((rustDoc) {
// final json = utf8.decode(doc.data);
2021-09-26 16:39:57 +08:00
final rustDelta = Delta.fromJson(jsonDecode(rustDoc.data));
2021-09-15 16:35:40 +08:00
if (delta != rustDelta) {
Log.error("Receive : $rustDelta");
Log.error("Expected : $delta");
} else {
Log.info("Receive : $rustDelta");
Log.info("Expected : $delta");
}
}, (r) => null);
2021-09-14 16:22:44 +08:00
}
2021-07-24 14:05:49 +08:00
}
abstract class IDoc {
2021-09-11 21:30:58 +08:00
Future<Either<Doc, WorkspaceError>> readDoc();
2021-09-26 16:39:57 +08:00
Future<Either<Doc, WorkspaceError>> applyChangeset({required String json});
Future<Either<Unit, WorkspaceError>> closeDoc();
}