Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
refactor(yjs): move queue handling into helper
Signed-off-by: Max <[email protected]>

Signed-off-by: Max <[email protected]>
  • Loading branch information
max-nextcloud committed Jul 3, 2024
commit a2b5ef228df1f459442758a486c042dd53390d6d
20 changes: 20 additions & 0 deletions src/helpers/yjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,26 @@ export function applyUpdateMessage(ydoc, updateMessage, origin = 'origin') {
)
}

/**
* Get the steps for sending to the server
*
* @param {object[]} queue - queue for the outgoing steps
*/
export function getSteps(queue) {
return queue.map(s => encodeArrayBuffer(s))
.filter(s => s < 'AQ')
}

/**
* Encode the latest awareness message for sending
*
* @param {object[]} queue - queue for the outgoing steps
*/
export function getAwareness(queue) {
return queue.map(s => encodeArrayBuffer(s))
.findLast(s => s > 'AQ') || ''
}

/**
* Log y.js messages with their type and initiator call stack
*
Expand Down
8 changes: 3 additions & 5 deletions src/services/SyncService.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import debounce from 'debounce'

import PollingBackend from './PollingBackend.js'
import SessionApi, { Connection } from './SessionApi.js'
import { encodeArrayBuffer } from '../helpers/base64.ts'
import { getSteps, getAwareness } from '../helpers/yjs.js'
import { logger } from '../helpers/logger.js'

/**
Expand Down Expand Up @@ -299,10 +299,8 @@ class SyncService {
return
}
let outbox = []
const steps = queue.map(s => encodeArrayBuffer(s))
.filter(s => s < 'AQ')
const awareness = queue.map(s => encodeArrayBuffer(s))
.findLast(s => s > 'AQ') || ''
const steps = getSteps(queue)
const awareness = getAwareness(queue)
return this.sendStepsNow(() => {
const data = { steps, awareness, version: this.version }
outbox = [...queue]
Expand Down
17 changes: 4 additions & 13 deletions src/services/WebSocketPolyfill.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
*/

import { logger } from '../helpers/logger.js'
import { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.js'
import { decodeArrayBuffer } from '../helpers/base64.js'
import { getSteps, getAwareness } from '../helpers/yjs.js'

/**
*
Expand Down Expand Up @@ -86,8 +87,8 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio
let outbox = []
return syncService.sendSteps(() => {
const data = {
steps: this.#steps,
awareness: this.#awareness,
steps: getSteps(queue),
awareness: getAwareness(queue),
version: this.#version,
}
outbox = [...queue]
Expand All @@ -103,16 +104,6 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio
}, err => logger.error(err))
}

get #steps() {
return queue.map(s => encodeArrayBuffer(s))
.filter(s => s < 'AQ')
}

get #awareness() {
return queue.map(s => encodeArrayBuffer(s))
.findLast(s => s > 'AQ') || ''
}

async close() {
Object.entries(this.#handlers)
.forEach(([key, value]) => syncService.off(key, value))
Expand Down