فهرست منبع

impl pageService.hasRevisionBodyDiff()

Shun Miyazawa 1 سال پیش
والد
کامیت
747487a15c
2فایلهای تغییر یافته به همراه24 افزوده شده و 13 حذف شده
  1. 18 0
      apps/app/src/server/service/page/index.ts
  2. 6 13
      apps/app/src/server/service/socket-io.js

+ 18 - 0
apps/app/src/server/service/page/index.ts

@@ -4460,6 +4460,24 @@ class PageService implements IPageService {
     };
   }
 
+  async hasRevisionBodyDiff(pageId: string, comparisonTarget?: string): Promise<boolean> {
+    if (comparisonTarget == null) {
+      return false;
+    }
+
+    const Page = mongoose.model('Page');
+    const page = await Page.findOne({ _id: pageId });
+
+    if (page == null) {
+      return false;
+    }
+
+    const populatedPage = await page.populateDataToShowRevision();
+    const revisionBody = populatedPage.revision.body;
+
+    return revisionBody != null && revisionBody !== comparisonTarget;
+  }
+
   async createTtlIndex(): Promise<void> {
     const wipPageExpirationSeconds = configManager.getConfig('crowi', 'app:wipPageExpirationSeconds') ?? 172800;
     const collection = mongoose.connection.collection('pages');

+ 6 - 13
apps/app/src/server/service/socket-io.js

@@ -1,5 +1,4 @@
 import { GlobalSocketEventName } from '@growi/core/dist/interfaces';
-import mongoose from 'mongoose';
 import { Server } from 'socket.io';
 
 import { SocketEventName } from '~/interfaces/websocket';
@@ -169,7 +168,6 @@ class SocketIoService {
 
   setupYjsConnection() {
     const yjsConnectionManager = getYjsConnectionManager();
-    const Page = mongoose.model('Page');
 
     this.io.on('connection', (socket) => {
 
@@ -183,17 +181,12 @@ class SocketIoService {
 
         // Executed when the last user leaves the Editor
         if (awarenessStateSize === 0) {
-          const page = await Page.findOne({ _id: pageId });
-          if (page != null) {
-            const populatedPage = await page.populateDataToShowRevision();
-            const revisionBody = populatedPage.revision.body;
-            const currentYdoc = yjsConnectionManager.getCurrentYdoc(pageId);
-            const yjsDraft = currentYdoc?.getText('codemirror').toString();
-            const hasRevisionBodyDiff = revisionBody != null && yjsDraft != null && yjsDraft !== revisionBody;
-            this.io
-              .in(getRoomNameWithId(RoomPrefix.PAGE, pageId))
-              .emit(SocketEventName.YjsHasRevisionBodyDiffUpdated, hasRevisionBodyDiff);
-          }
+          const currentYdoc = yjsConnectionManager.getCurrentYdoc(pageId);
+          const yjsDraft = currentYdoc?.getText('codemirror').toString();
+          const hasRevisionBodyDiff = await this.crowi.pageService.hasRevisionBodyDiff(pageId, yjsDraft);
+          this.io
+            .in(getRoomNameWithId(RoomPrefix.PAGE, pageId))
+            .emit(SocketEventName.YjsHasRevisionBodyDiffUpdated, hasRevisionBodyDiff);
         }
       });