Skip to content

Commit

Permalink
同步优化
Browse files Browse the repository at this point in the history
  • Loading branch information
lyming99 committed Mar 3, 2024
1 parent 02ce2dc commit f12d6fd
Show file tree
Hide file tree
Showing 17 changed files with 216 additions and 248 deletions.
71 changes: 0 additions & 71 deletions lib/app/mobile/controller/home/mobile_home_page_controller.dart

This file was deleted.

8 changes: 1 addition & 7 deletions lib/app/mobile/view/doc/mobile_doc_page_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,6 @@ class MobileDocPageController extends ServiceManagerController {
return false;
}

void createNote() {}

void openSearchItem(SearchResultVO searchItem) {}

void copySearchItem(BuildContext context, int index) {}
Expand Down Expand Up @@ -159,11 +157,7 @@ class MobileDocPageController extends ServiceManagerController {
createTime: DateTime.now().millisecondsSinceEpoch,
updateTime: DateTime.now().millisecondsSinceEpoch,
);
await serviceManager.todayService.createDoc(doc);
var docContent = serviceManager.editService.createDoc();
serviceManager.p2pService
.sendDocEditMessage(doc.uuid!, encodeStateAsUpdateV2(docContent, null));
await serviceManager.editService.writeDoc(doc.uuid, docContent);
await serviceManager.docService.createDoc(doc,null);
fetchData();
GoRouter.of(context).push("/mobile/doc/edit", extra: {"doc": doc});
}
Expand Down
7 changes: 3 additions & 4 deletions lib/app/mobile/view/edit/doc_edit_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,12 @@ class MobileDocEditController extends ServiceManagerController {
editController.waitLayout(() {
editController.requestFocus();
});
doc.on("update", (args) async {
doc.on("update", (args) {
var data = args[0];
if (serviceManager.editService
.isInUpdateCache(this.doc?.uuid ?? "", data)) {
if (serviceManager.editService.isNotEditUpdate(this.doc?.uuid ?? "")) {
return;
}
await serviceManager.editService.writeDoc(this.doc?.uuid, doc);
serviceManager.editService.writeDoc(this.doc?.uuid, doc);
serviceManager.p2pService
.sendDocEditMessage(this.doc?.uuid ?? "", data);
});
Expand Down
7 changes: 1 addition & 6 deletions lib/app/mobile/view/today/mobile_today_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'dart:async';

import 'package:date_format/date_format.dart';
import 'package:flutter/material.dart';
import 'package:flutter_crdt/flutter_crdt.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
Expand Down Expand Up @@ -219,11 +218,7 @@ class MobileTodayController extends ServiceManagerController {
createTime: DateTime.now().millisecondsSinceEpoch,
updateTime: DateTime.now().millisecondsSinceEpoch,
);
await serviceManager.todayService.createDoc(doc);
var docContent = serviceManager.editService.createDoc();
serviceManager.p2pService
.sendDocEditMessage(doc.uuid!, encodeStateAsUpdateV2(docContent, null));
await serviceManager.editService.writeDoc(doc.uuid, docContent);
await serviceManager.docService.createDoc(doc, null);
await GoRouter.of(context).push("/mobile/doc/edit", extra: {"doc": doc});
fetchDoc(refreshList: true);
}
Expand Down
4 changes: 1 addition & 3 deletions lib/app/windows/controller/home/win_home_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import 'package:wenznote/app/windows/widgets/win_tab_view.dart';
import 'package:wenznote/commons/mvc/controller.dart';
import 'package:wenznote/commons/util/markdown/markdown.dart';
import 'package:wenznote/editor/crdt/doc_utils.dart';
import 'package:wenznote/editor/widget/drop_menu.dart';
import 'package:wenznote/model/note/enum/note_type.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:wenznote/service/file/file_manager.dart';
Expand Down Expand Up @@ -177,8 +176,7 @@ class WinHomeController extends ServiceManagerController {
type: NoteType.note.name,
);
var yDoc = await elementsToYDoc(elements);
await serviceManager.editService.writeDoc(doc.uuid, yDoc);
await serviceManager.docService.createDoc(doc);
await serviceManager.docService.createDoc(doc, yDoc);
openDoc(doc);
}

Expand Down
6 changes: 1 addition & 5 deletions lib/app/windows/controller/today/win_today_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,7 @@ class WinTodayController extends ServiceManagerController {
createTime: DateTime.now().millisecondsSinceEpoch,
updateTime: DateTime.now().millisecondsSinceEpoch,
);
await serviceManager.todayService.createDoc(doc);
var docContent = serviceManager.editService.createDoc();
serviceManager.p2pService
.sendDocEditMessage(doc.uuid!, encodeStateAsUpdateV2(docContent, null));
await serviceManager.editService.writeDoc(doc.uuid, docContent);
await serviceManager.docService.createDoc(doc,null);
homeController.openDoc(doc);
startSearchTask();
}
Expand Down
13 changes: 3 additions & 10 deletions lib/app/windows/service/doc/win_doc_list_service.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
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:uuid/uuid.dart';
import 'package:wenznote/app/windows/model/doc/win_doc_list_item_vo.dart';
import 'package:wenznote/editor/crdt/YsText.dart';
import 'package:wenznote/model/note/po/doc_dir_po.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:wenznote/service/service_manager.dart';
import 'package:uuid/uuid.dart';

class WinDocListService {
ServiceManager serviceManager;
Expand Down Expand Up @@ -46,10 +42,7 @@ class WinDocListService {
name: text,
type: "doc",
);
await serviceManager.docService.createDoc(item);
var docContent = Doc();
docContent.getArray("blocks").insert(0, [createEmptyTextYMap()]);
await serviceManager.editService.writeDoc(item.uuid, docContent);
await serviceManager.docService.createDoc(item, null);
return item;
}

Expand Down Expand Up @@ -83,7 +76,7 @@ class WinDocListService {
item.pid = toDir.uuid;
item.updateTime = DateTime.now().millisecondsSinceEpoch;
await serviceManager.docService.updateDocDir(item);
} else if(value is DocPO){
} else if (value is DocPO) {
var doc = value;
doc.pid = toDir.uuid;
doc.updateTime = DateTime.now().millisecondsSinceEpoch;
Expand Down
5 changes: 0 additions & 5 deletions lib/app/windows/service/today/win_today_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,6 @@ class WinTodayService with IsarServiceMixin {
return result;
}

/// 创建文档: 便签
Future<void> createDoc(DocPO doc) async {
await serviceManager.docService.createDoc(doc);
}

Future<WenElement?> searchElement(
YMap<dynamic> map, String searchContent) async {
var element = createWenElementFromYMap(map);
Expand Down
57 changes: 18 additions & 39 deletions lib/app/windows/view/doc/win_note_edit_tab.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,11 @@ 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';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:wenznote/service/task/task.dart';
import 'package:window_manager/window_manager.dart';

class WinNoteEditTabController extends WinEditTabController {
DocPO doc;
bool isCreateMode;
DocPO doc;
var title = "".obs;
String firstCreatTitle = "";
Function(Doc content)? onUpdate;
Expand Down Expand Up @@ -95,17 +94,17 @@ class WinNoteEditTabController extends WinEditTabController {
yDoc: doc,
);
tree!.init();
doc.on("update", (args) async {
onContentChanged(doc);
var data = args[0];
if (homeController.serviceManager.editService
.isInUpdateCache(this.doc.uuid ?? "", data)) {
doc.on("update", (args) {
var editService = homeController.serviceManager.editService;
// 文档更新后,如果不是本地编辑导致的更新,则无需发送
if (editService.isNotEditUpdate(this.doc.uuid ?? "")) {
return;
}
await homeController.serviceManager.editService
.writeDoc(this.doc.uuid, doc);
onContentChanged(doc);
var deltaData = args[0];
editService.writeDoc(this.doc.uuid, doc);
homeController.serviceManager.p2pService
.sendDocEditMessage(this.doc.uuid ?? "", data);
.sendDocEditMessage(this.doc.uuid ?? "", deltaData);
});
editController.waitLayout(() {
editController.requestFocus();
Expand All @@ -114,31 +113,6 @@ class WinNoteEditTabController extends WinEditTabController {
}

void onContentChanged(Doc content) async {
if (isCreateMode) {
await TaskService.instance.executeTask(
taskGroup: "createModeQueue",
task: () async {
var docName = await homeController.serviceManager.docService
.getDocName(doc.id);
if (firstCreatTitle != docName) {
isCreateMode = false;
} else {
var blocks = editController.ysTree?.blocks;
if (blocks != null && blocks.length == 1) {
var text = blocks[0].yMap.get("text");
if (text is YText) {
var name = text.toString();
if (name.length > 20) {
name = name.substring(0, 20);
}
doc.name = name;
firstCreatTitle = name;
title.value = getDocTitle();
}
}
}
});
}
onUpdate?.call(content);
}

Expand Down Expand Up @@ -260,10 +234,15 @@ class WinNoteEditTabController extends WinEditTabController {
title.value = text;
}

void sync(BuildContext ctx) {
void syncNow(BuildContext ctx) async {
printLog("手动同步笔记:${doc.uuid},${doc.name}");
homeController.serviceManager.docSnapshotService
.downloadDocFile(doc.uuid ?? "");
var serviceManager = homeController.serviceManager;
serviceManager.docSnapshotService.downloadDocFile(doc.uuid ?? "");
var snap = await serviceManager.editService.queryDocSnap(doc.uuid ?? "");
if (snap == null || snap.isEmpty) {
return;
}
serviceManager.p2pService.sendQueryDocMessage(doc.uuid ?? "", snap);
}
}

Expand Down Expand Up @@ -472,7 +451,7 @@ class WinNoteEditTab extends MvcView<WinNoteEditTabController> with Focusable {
),
onPress: (ctx) {
hideDropMenu(ctx);
controller.sync(ctx);
controller.syncNow(ctx);
},
),
DropMenu(
Expand Down
19 changes: 9 additions & 10 deletions lib/commons/service/document_manager.dart
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
import 'dart:convert';

import 'package:isar/isar.dart';
import 'package:uuid/uuid.dart';
import 'package:wenznote/commons/util/markdown/markdown.dart';
import 'package:wenznote/commons/util/string.dart';
import 'package:wenznote/commons/util/wdoc/wdoc.dart';
import 'package:wenznote/model/note/po/doc_dir_po.dart';
import 'package:wenznote/model/note/po/doc_po.dart';
import 'package:wenznote/service/service_manager.dart';
import 'package:uuid/uuid.dart';

enum ConflictMode { keepNew, keepAll }

class ImportService {
ServiceManager serviceManager;


ImportService(this.serviceManager);

Future<void> importWdoc({
required String file,
String toPath = "",
ConflictMode conflictMode = ConflictMode.keepAll,
}) async {
var docInfo = await readWdocFile(serviceManager.fileManager,file);
var docInfo = await readWdocFile(serviceManager.fileManager, file);
var infoPo = docInfo.info;
if (infoPo != null) {
var dir = await createDocPath(toPath);
Expand All @@ -31,20 +30,19 @@ class ImportService {
if (infoPo.uuid != null) {
oldItem = await serviceManager.docService.queryDoc(infoPo.uuid!);
}
var yDoc = await serviceManager.editService.readJsonDoc(docInfo.content);
if (conflictMode == ConflictMode.keepAll) {
//保留旧的和新的
infoPo.id = Isar.autoIncrement;
if (oldItem?.uuid == infoPo.uuid) {
infoPo.uuid = const Uuid().v1();
}
await serviceManager.docService.createDoc(infoPo);
await serviceManager.editService.saveDocStringFile(infoPo.uuid, docInfo.content);
await serviceManager.docService.createDoc(infoPo, yDoc);
} else {
//保留新的 oldTime<=newTime
if (compareDocTime(oldItem, infoPo) <= 0) {
await serviceManager.docService.deleteDocReally(infoPo.uuid!);
await serviceManager.docService.createDoc(infoPo);
await serviceManager.editService.saveDocStringFile(infoPo.uuid, docInfo.content);
await serviceManager.docService.createDoc(infoPo, yDoc);
}
}
}
Expand All @@ -64,7 +62,7 @@ class ImportService {
{required String file,
required String toPath,
required ConflictMode conflictMode}) async {
var docInfo = await readMarkdownInfo(serviceManager.fileManager,file);
var docInfo = await readMarkdownInfo(serviceManager.fileManager, file);
if (docInfo == null) {
return;
}
Expand All @@ -86,8 +84,9 @@ class ImportService {
uuid: uuid,
createTime: DateTime.now().millisecondsSinceEpoch,
);
await serviceManager.docService.createDoc(doc);
await serviceManager.editService.saveDocStringFile(uuid, jsonEncode(elements));
var yDoc =
await serviceManager.editService.readJsonDoc(jsonEncode(elements));
await serviceManager.docService.createDoc(doc, yDoc);
}

Future<DocDirPO?> createDocPath(String path) async {
Expand Down
Loading

0 comments on commit f12d6fd

Please sign in to comment.