mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-17 14:55:23 +00:00
refac: collaborative editor
This commit is contained in:
parent
6343f4293a
commit
14ef2e5dea
2 changed files with 21 additions and 6 deletions
|
|
@ -450,7 +450,7 @@ async def yjs_document_state(sid, data):
|
||||||
room = f"doc_{document_id}"
|
room = f"doc_{document_id}"
|
||||||
|
|
||||||
active_session_ids = get_session_ids_from_room(room)
|
active_session_ids = get_session_ids_from_room(room)
|
||||||
print(active_session_ids)
|
|
||||||
if sid not in active_session_ids:
|
if sid not in active_session_ids:
|
||||||
log.warning(f"Session {sid} not in room {room}. Cannot send state.")
|
log.warning(f"Session {sid} not in room {room}. Cannot send state.")
|
||||||
return
|
return
|
||||||
|
|
@ -520,7 +520,8 @@ async def yjs_document_update(sid, data):
|
||||||
document_id, data.get("data", {}), SESSION_POOL.get(sid)
|
document_id, data.get("data", {}), SESSION_POOL.get(sid)
|
||||||
)
|
)
|
||||||
|
|
||||||
await create_task(REDIS, debounced_save(), document_id)
|
if data.get("data"):
|
||||||
|
await create_task(REDIS, debounced_save(), document_id)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(f"Error in yjs_document_update: {e}")
|
log.error(f"Error in yjs_document_update: {e}")
|
||||||
|
|
|
||||||
|
|
@ -218,10 +218,24 @@
|
||||||
// Empty state, check if we have content to initialize
|
// Empty state, check if we have content to initialize
|
||||||
// check if editor empty as well
|
// check if editor empty as well
|
||||||
const isEmptyEditor = !editor || editor.getText().trim() === '';
|
const isEmptyEditor = !editor || editor.getText().trim() === '';
|
||||||
if (content && isEmptyEditor && (data?.sessions ?? ['']).length === 1) {
|
if (content && (data?.sessions ?? ['']).length === 1) {
|
||||||
const editorYdoc = prosemirrorJSONToYDoc(editor.schema, content);
|
if (isEmptyEditor) {
|
||||||
if (editorYdoc) {
|
const editorYdoc = prosemirrorJSONToYDoc(editor.schema, content);
|
||||||
Y.applyUpdate(this.doc, Y.encodeStateAsUpdate(editorYdoc));
|
if (editorYdoc) {
|
||||||
|
Y.applyUpdate(this.doc, Y.encodeStateAsUpdate(editorYdoc));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If the editor already has content, we don't need to send an empty state
|
||||||
|
if (this.doc.getXmlFragment('prosemirror').length > 0) {
|
||||||
|
this.socket.emit('ydoc:document:update', {
|
||||||
|
document_id: this.documentId,
|
||||||
|
user_id: this.user?.id,
|
||||||
|
socket_id: this.socket.id,
|
||||||
|
update: Y.encodeStateAsUpdate(this.doc)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.warn('Yjs document is empty, not sending state.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue