Skip to content

Commit a2b5ef2

Browse files
committed
refactor(yjs): move queue handling into helper
Signed-off-by: Max <max@nextcloud.com> Signed-off-by: Max <max@nextcloud.com>
1 parent 2c03655 commit a2b5ef2

File tree

3 files changed

+27
-18
lines changed

3 files changed

+27
-18
lines changed

src/helpers/yjs.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,26 @@ export function applyUpdateMessage(ydoc, updateMessage, origin = 'origin') {
9797
)
9898
}
9999

100+
/**
101+
* Get the steps for sending to the server
102+
*
103+
* @param {object[]} queue - queue for the outgoing steps
104+
*/
105+
export function getSteps(queue) {
106+
return queue.map(s => encodeArrayBuffer(s))
107+
.filter(s => s < 'AQ')
108+
}
109+
110+
/**
111+
* Encode the latest awareness message for sending
112+
*
113+
* @param {object[]} queue - queue for the outgoing steps
114+
*/
115+
export function getAwareness(queue) {
116+
return queue.map(s => encodeArrayBuffer(s))
117+
.findLast(s => s > 'AQ') || ''
118+
}
119+
100120
/**
101121
* Log y.js messages with their type and initiator call stack
102122
*

src/services/SyncService.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import debounce from 'debounce'
2525

2626
import PollingBackend from './PollingBackend.js'
2727
import SessionApi, { Connection } from './SessionApi.js'
28-
import { encodeArrayBuffer } from '../helpers/base64.ts'
28+
import { getSteps, getAwareness } from '../helpers/yjs.js'
2929
import { logger } from '../helpers/logger.js'
3030

3131
/**
@@ -299,10 +299,8 @@ class SyncService {
299299
return
300300
}
301301
let outbox = []
302-
const steps = queue.map(s => encodeArrayBuffer(s))
303-
.filter(s => s < 'AQ')
304-
const awareness = queue.map(s => encodeArrayBuffer(s))
305-
.findLast(s => s > 'AQ') || ''
302+
const steps = getSteps(queue)
303+
const awareness = getAwareness(queue)
306304
return this.sendStepsNow(() => {
307305
const data = { steps, awareness, version: this.version }
308306
outbox = [...queue]

src/services/WebSocketPolyfill.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
*/
2222

2323
import { logger } from '../helpers/logger.js'
24-
import { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.js'
24+
import { decodeArrayBuffer } from '../helpers/base64.js'
25+
import { getSteps, getAwareness } from '../helpers/yjs.js'
2526

2627
/**
2728
*
@@ -86,8 +87,8 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio
8687
let outbox = []
8788
return syncService.sendSteps(() => {
8889
const data = {
89-
steps: this.#steps,
90-
awareness: this.#awareness,
90+
steps: getSteps(queue),
91+
awareness: getAwareness(queue),
9192
version: this.#version,
9293
}
9394
outbox = [...queue]
@@ -103,16 +104,6 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio
103104
}, err => logger.error(err))
104105
}
105106

106-
get #steps() {
107-
return queue.map(s => encodeArrayBuffer(s))
108-
.filter(s => s < 'AQ')
109-
}
110-
111-
get #awareness() {
112-
return queue.map(s => encodeArrayBuffer(s))
113-
.findLast(s => s > 'AQ') || ''
114-
}
115-
116107
async close() {
117108
Object.entries(this.#handlers)
118109
.forEach(([key, value]) => syncService.off(key, value))

0 commit comments

Comments
 (0)