Skip to content

Commit

Permalink
使用最新移植的yjs同步框架ydart
Browse files Browse the repository at this point in the history
  • Loading branch information
lyming99 committed Mar 16, 2024
1 parent f12d6fd commit 411f8a4
Show file tree
Hide file tree
Showing 50 changed files with 1,230 additions and 1,362 deletions.
11 changes: 5 additions & 6 deletions lib/app/mobile/view/card/edit/mobile_card_edit_controller.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'dart:convert';

import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:wenznote/app/mobile/view/edit/doc_edit_controller.dart';
import 'package:wenznote/editor/block/element/element.dart';
import 'package:wenznote/model/card/po/card_po.dart';
import 'package:ydart/ydart.dart';

class MobileCardEditController extends MobileDocEditController {
CardPO card;
Expand All @@ -13,8 +13,8 @@ class MobileCardEditController extends MobileDocEditController {
super.editOnOpen,
});

Future<Doc> jsonToDoc(String? json) async {
Doc doc = Doc();
Future<YDoc> jsonToDoc(String? json) async {
YDoc doc = YDoc();
var blocks = doc.getArray("blocks");
if (json == null || json.isEmpty) {
return doc;
Expand All @@ -39,13 +39,12 @@ class MobileCardEditController extends MobileDocEditController {
@override
Future<void> readDoc() async {
title.value = "编辑卡片";
var doc = await jsonToDoc(card.content??"[]");
var doc = await jsonToDoc(card.content ?? "[]");
initYsTree(doc);
editController.waitLayout(() {
editController.requestFocus();
});

doc.on("update", (args) async {
doc.updateV2.add((data, origin, transaction) async {
card.content = await getDocJson();
await serviceManager.cardService.updateCard(card);
});
Expand Down
1 change: 0 additions & 1 deletion lib/app/mobile/view/doc/mobile_doc_page_controller.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
import 'package:wenznote/app/windows/service/doc/win_doc_list_service.dart';
Expand Down
9 changes: 4 additions & 5 deletions lib/app/mobile/view/edit/doc_edit_controller.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
import 'package:wenznote/app/windows/outline/outline_controller.dart';
Expand All @@ -9,8 +8,9 @@ import 'package:wenznote/editor/crdt/YsEditController.dart';
import 'package:wenznote/editor/crdt/YsTree.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:wenznote/service/service_manager.dart';
import 'package:ydart/ydart.dart';

typedef DocReader = Future<Doc> Function(BuildContext context);
typedef DocReader = Future<YDoc> Function(BuildContext context);

class MobileDocEditController extends ServiceManagerController {
var title = "便签".obs;
Expand Down Expand Up @@ -122,8 +122,7 @@ class MobileDocEditController extends ServiceManagerController {
editController.waitLayout(() {
editController.requestFocus();
});
doc.on("update", (args) {
var data = args[0];
doc.updateV2.add((data, origin, transaction) {
if (serviceManager.editService.isNotEditUpdate(this.doc?.uuid ?? "")) {
return;
}
Expand All @@ -134,7 +133,7 @@ class MobileDocEditController extends ServiceManagerController {
}
}

void initYsTree(Doc doc) {
void initYsTree(YDoc doc) {
ysTree = YsTree(
context: context,
editController: editController,
Expand Down
4 changes: 2 additions & 2 deletions lib/app/windows/controller/doc/win_doc_page_controller.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:get/get.dart';
import 'package:wenznote/app/windows/controller/doc/win_doc_list_controller.dart';
import 'package:wenznote/app/windows/controller/home/win_home_controller.dart';
import 'package:wenznote/commons/mvc/controller.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:ydart/ydart.dart';

class WinDocPageController extends MvcController {
WinHomeController homeController;
Expand Down Expand Up @@ -43,7 +43,7 @@ class WinDocPageController extends MvcController {
homeController.openDoc(doc, isCreateMode);
}

void reloadDoc(DocPO doc, Doc content) {
void reloadDoc(DocPO doc, YDoc content) {
for (var listController in docListControllerMap.values) {
var docList = listController.searchResultList;
for (var docItem in docList) {
Expand Down
5 changes: 2 additions & 3 deletions lib/app/windows/controller/today/win_today_controller.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:get/get.dart';
import 'package:wenznote/app/windows/controller/home/win_home_controller.dart';
import 'package:wenznote/app/windows/model/today/search_result_vo.dart';
import 'package:wenznote/app/windows/view/doc/win_note_edit_tab.dart';
import 'package:wenznote/commons/mvc/controller.dart';
import 'package:wenznote/model/note/enum/note_order_type.dart';
import 'package:wenznote/model/note/enum/note_type.dart';
import 'package:wenznote/model/note/po/doc_dir_po.dart';
Expand All @@ -14,6 +12,7 @@ import 'package:wenznote/service/service_manager.dart';
import 'package:wenznote/widgets/ticker_widget.dart';
import 'package:oktoast/oktoast.dart';
import 'package:uuid/uuid.dart';
import 'package:ydart/ydart.dart';

class WinTodayController extends ServiceManagerController {
BaseTask? searchTask;
Expand Down Expand Up @@ -158,7 +157,7 @@ class WinTodayController extends ServiceManagerController {
startSearchTask();
}

void reloadDoc(DocPO doc, Doc content) {
void reloadDoc(DocPO doc, YDoc content) {
for(var searchItem in searchResultList){
if(searchItem.doc.uuid==doc.uuid){
searchItem.updateContent(content);
Expand Down
12 changes: 6 additions & 6 deletions lib/app/windows/model/today/search_result_vo.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:date_format/date_format.dart';
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:wenznote/editor/block/block.dart';
import 'package:wenznote/editor/block/block_manager.dart';
import 'package:wenznote/editor/block/element/element.dart';
Expand All @@ -10,10 +9,11 @@ import 'package:wenznote/editor/edit_widget.dart';
import 'package:wenznote/model/note/enum/note_order_type.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:wenznote/service/service_manager.dart';
import 'package:ydart/ydart.dart';

class WinTodaySearchResultVO with ChangeNotifier {
DocPO doc;
Doc? docContent;
YDoc? docContent;
String searchText;
int elementIndex;
WenElement element;
Expand All @@ -28,7 +28,7 @@ class WinTodaySearchResultVO with ChangeNotifier {
required this.elementIndex,
});

Future<void> updateContent(Doc? doc) async {
Future<void> updateContent(YDoc? doc) async {
docContent = doc;
notifyListeners();
}
Expand Down Expand Up @@ -76,7 +76,7 @@ class WinTodaySearchResultVO with ChangeNotifier {

List<WenElement> getWenElements() {
var result = <WenElement>[];
var blocks = docContent?.get("blocks");
var blocks = docContent?.getArray("blocks");
if (blocks is! YArray) {
return result;
}
Expand All @@ -96,7 +96,7 @@ class WinTodaySearchResultVO with ChangeNotifier {

List<WenElement> getAllWenElements() {
var result = <WenElement>[];
var blocks = docContent?.get("blocks");
var blocks = docContent?.getArray("blocks");
if (blocks is! YArray) {
return result;
}
Expand Down Expand Up @@ -152,7 +152,7 @@ class WinTodaySearchResultVO with ChangeNotifier {
var content = docContent;
if (content != null) {
var blocks = content.getArray("blocks");
for (var block in blocks) {
for (var block in blocks.enumerateList()) {
if (block is! YMap) {
continue;
}
Expand Down
4 changes: 2 additions & 2 deletions lib/app/windows/service/today/win_today_service.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:isar/isar.dart';
import 'package:wenznote/app/windows/model/today/search_result_vo.dart';
import 'package:wenznote/editor/block/element/element.dart';
Expand All @@ -8,6 +7,7 @@ import 'package:wenznote/model/note/enum/note_type.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:wenznote/service/isar/isar_service_mixin.dart';
import 'package:wenznote/service/service_manager.dart';
import 'package:ydart/ydart.dart';

class WinTodayService with IsarServiceMixin {
@override
Expand Down Expand Up @@ -67,7 +67,7 @@ class WinTodayService with IsarServiceMixin {
}

Future<WenElement?> searchElement(
YMap<dynamic> map, String searchContent) async {
YMap map, String searchContent) async {
var element = createWenElementFromYMap(map);
if (searchContent.isEmpty) {
return element;
Expand Down
6 changes: 2 additions & 4 deletions lib/app/windows/view/card/win_card_edit_tab.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:wenznote/app/windows/controller/home/win_home_controller.dart';
import 'package:wenznote/app/windows/widgets/card_editor.dart';
import 'package:wenznote/commons/mvc/controller.dart';
import 'package:wenznote/commons/mvc/view.dart';
import 'package:wenznote/editor/crdt/YsEditController.dart';
import 'package:wenznote/editor/widget/toggle_item.dart';
import 'package:wenznote/model/card/po/card_po.dart';
import 'package:wenznote/service/service_manager.dart';
import 'package:uuid/uuid.dart';
import 'package:window_manager/window_manager.dart';
import 'package:fluent_ui/fluent_ui.dart' as fluent;
import 'package:ydart/ydart.dart';

class WinCardEditController extends MvcController {
WinHomeController homeController;
Expand All @@ -22,7 +20,7 @@ class WinCardEditTab extends MvcView<WinCardEditController> {
CardPO card;
bool isCreateMode;
CardEditor? cardEditor;
Doc? cardYDoc;
YDoc? cardYDoc;
late ServiceManager serviceManager;

WinCardEditTab({
Expand Down
15 changes: 8 additions & 7 deletions lib/app/windows/view/doc/win_note_edit_tab.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'package:date_format/date_format.dart';
import 'package:fluent_ui/fluent_ui.dart' as fluent;
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:get/get.dart';
import 'package:oktoast/oktoast.dart';
import 'package:wenznote/app/windows/outline/outline_controller.dart';
Expand All @@ -26,13 +25,14 @@ import 'package:wenznote/model/note/enum/note_type.dart';
import 'package:wenznote/model/note/po/doc_dir_po.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:window_manager/window_manager.dart';
import 'package:ydart/ydart.dart';

class WinNoteEditTabController extends WinEditTabController {
bool isCreateMode;
DocPO doc;
var title = "".obs;
String firstCreatTitle = "";
Function(Doc content)? onUpdate;
Function(YDoc content)? onUpdate;
late YsEditController editController;

YsTree? tree;
Expand Down Expand Up @@ -94,25 +94,26 @@ class WinNoteEditTabController extends WinEditTabController {
yDoc: doc,
);
tree!.init();
doc.on("update", (args) {
doc.updateV2.add((data, origin, transaction){
var editService = homeController.serviceManager.editService;
// 文档更新后,如果不是本地编辑导致的更新,则无需发送
if (editService.isNotEditUpdate(this.doc.uuid ?? "")) {
return;
}
onContentChanged(doc);
var deltaData = args[0];
var deltaData = data;
editService.writeDoc(this.doc.uuid, doc);
homeController.serviceManager.p2pService
.sendDocEditMessage(this.doc.uuid ?? "", deltaData);
});

editController.waitLayout(() {
editController.requestFocus();
});
}
}

void onContentChanged(Doc content) async {
void onContentChanged(YDoc content) async {
onUpdate?.call(content);
}

Expand Down Expand Up @@ -181,7 +182,7 @@ class WinNoteEditTabController extends WinEditTabController {
var content = editController.ysTree?.yDoc;
if (content != null) {
var blocks = content.getArray("blocks");
for (var block in blocks) {
for (var block in blocks.enumerateList()) {
if (block is! YMap) {
continue;
}
Expand Down Expand Up @@ -247,7 +248,7 @@ class WinNoteEditTabController extends WinEditTabController {
}

class WinNoteEditTab extends MvcView<WinNoteEditTabController> with Focusable {
Doc? docContent;
YDoc? docContent;
var updateTime = 0.obs;

WinNoteEditTab({super.key, required super.controller});
Expand Down
15 changes: 9 additions & 6 deletions lib/app/windows/widgets/card_editor.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:wenznote/editor/block/element/element.dart';
import 'package:wenznote/editor/crdt/YsEditController.dart';
import 'package:wenznote/editor/crdt/YsTree.dart';
import 'package:wenznote/editor/edit_widget.dart';
import 'package:wenznote/model/card/po/card_po.dart';
import 'package:ydart/ydart.dart';

class CardEditor extends StatefulWidget {
final CardPO card;
final YsEditController editController;
final Function(Doc? doc)? onCardUpdate;
final Function(YDoc? doc)? onCardUpdate;

const CardEditor({
Key? key,
Expand All @@ -34,8 +34,8 @@ class _CardEditorState extends State<CardEditor>
readDoc();
}

Future<Doc> jsonToDoc(String? json) async {
Doc doc = Doc();
Future<YDoc> jsonToDoc(String? json) async {
YDoc doc = YDoc();
var blocks = doc.getArray("blocks");
if (json == null || json.isEmpty) {
return doc;
Expand Down Expand Up @@ -69,11 +69,12 @@ class _CardEditorState extends State<CardEditor>
yDoc: doc,
);
tree!.init();
doc.on("update", (args) async {
doc.updateV2.add((data, origin, transaction) async {
var json = await getJson();
widget.card.content = json;
widget.onCardUpdate?.call(doc);
});

setState(() {});
}

Expand All @@ -83,7 +84,9 @@ class _CardEditorState extends State<CardEditor>
if (tree == null) {
return Container();
}
return EditWidget(controller: tree!.editController,);
return EditWidget(
controller: tree!.editController,
);
}

@override
Expand Down
33 changes: 0 additions & 33 deletions lib/demo.dart

This file was deleted.

Loading

0 comments on commit 411f8a4

Please sign in to comment.