Skip to content

Commit 100192d

Browse files
committed
Support only one provider per document for now
1 parent 39e5019 commit 100192d

File tree

4 files changed

+16
-33
lines changed

4 files changed

+16
-33
lines changed

packages/collaboration-extension/src/collaboration.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ function addMenuItem(
256256
execute: () => {
257257
menu.title.label = label;
258258
if (command == 'suggesting') {
259-
context.model.sharedModel.getProvider('root').fork();
259+
const provider = context.model.sharedModel.provider;
260+
provider.fork().then(forkId => {provider.connectFork(forkId);});
260261
}
261262
}
262263
});

packages/docprovider/src/ydrive.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export class YDrive extends Drive implements ICollaborativeDrive {
147147
const key = `${options.format}:${options.contentType}:${options.path}`;
148148
this._providers.set(key, provider);
149149

150-
sharedModel.setProvider('root', provider);
150+
sharedModel.provider = provider;
151151
sharedModel.disposed.connect(() => {
152152
const provider = this._providers.get(key);
153153
if (provider) {

packages/docprovider/src/yprovider.ts

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class WebSocketProvider implements IDocumentProvider {
8181
Signal.clearData(this);
8282
}
8383

84-
async fork(): Promise<void> {
84+
async fork(): Promise<string> {
8585
const session = await requestDocSession(
8686
this._format,
8787
this._contentType,
@@ -90,59 +90,41 @@ export class WebSocketProvider implements IDocumentProvider {
9090

9191
const response = await requestDocFork(`${session.format}:${session.type}:${session.fileId}`);
9292
const forkId = response.roomId;
93-
94-
this._sharedModel.forkId = forkId;
95-
96-
// the fork has to be advertised before the ydoc is connected to the forked room
97-
// so that it targets the root room
93+
this._sharedModel.roomId = forkId;
9894
this._sharedModel.addFork(forkId);
9995

96+
return forkId;
97+
}
98+
99+
connectFork(forkId: string) {
100+
this._sharedModel.roomId = forkId;
100101
this._yWebsocketProvider?.disconnect();
101102
this._yWebsocketProvider = new YWebsocketProvider(
102103
this._serverUrl,
103104
forkId,
104105
this._sharedModel.ydoc,
105106
{
106107
disableBc: true,
107-
params: { sessionId: session.sessionId },
108+
params: { sessionId: this._sessionId },
108109
awareness: this._awareness
109110
}
110111
);
111112
}
112113

113-
connectFork(forkId: string, sharedModel: YDocument<DocumentChange>): IDocumentProvider {
114-
sharedModel.forkId = forkId;
115-
116-
return new WebSocketProvider({
117-
sessionId: this._sessionId,
118-
url: this._serverUrl,
119-
path: forkId,
120-
format: '',
121-
contentType: '',
122-
model: sharedModel,
123-
user: this._user,
124-
translator: this._trans
125-
});
126-
}
127-
128114
private async _connect(): Promise<void> {
129-
var roomId: string;
130-
if (this._sharedModel.forkId === 'root') {
115+
if (this._sharedModel.roomId === '') {
131116
const session = await requestDocSession(
132117
this._format,
133118
this._contentType,
134119
this._path
135120
);
136-
roomId = `${session.format}:${session.type}:${session.fileId}`;
121+
this._sharedModel.roomId = `${session.format}:${session.type}:${session.fileId}`;
137122
this._sessionId = session.sessionId;
138123
}
139-
else {
140-
roomId = this._path;
141-
}
142124

143125
this._yWebsocketProvider = new YWebsocketProvider(
144126
this._serverUrl,
145-
roomId,
127+
this._sharedModel.roomId,
146128
this._sharedModel.ydoc,
147129
{
148130
disableBc: true,

yarn.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,15 +2133,15 @@ __metadata:
21332133

21342134
"@jupyter/ydoc@file:.yalc/@jupyter/ydoc::locator=%40jupyter%2Freal-time-collaboration%40workspace%3A.":
21352135
version: 2.0.1
2136-
resolution: "@jupyter/ydoc@file:.yalc/@jupyter/ydoc#.yalc/@jupyter/ydoc::hash=c66726&locator=%40jupyter%2Freal-time-collaboration%40workspace%3A."
2136+
resolution: "@jupyter/ydoc@file:.yalc/@jupyter/ydoc#.yalc/@jupyter/ydoc::hash=d13236&locator=%40jupyter%2Freal-time-collaboration%40workspace%3A."
21372137
dependencies:
21382138
"@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0
21392139
"@lumino/coreutils": ^1.11.0 || ^2.0.0
21402140
"@lumino/disposable": ^1.10.0 || ^2.0.0
21412141
"@lumino/signaling": ^1.10.0 || ^2.0.0
21422142
y-protocols: ^1.0.5
21432143
yjs: ^13.5.40
2144-
checksum: f5cac20b6b88fb9ced006923ad7164bb53fcc7565b66bc4bd454bcf72595ed3f0689c479166caabff57bd5a5f73534ce3af08623123a30870e39382c74374d61
2144+
checksum: 4b906adf8d1eb9461463456f39be7225281d8f9f59213af58dad3d1383f2436760f7a6a60b6d87795e95662c6ff4323c41069644cf6833b2ad2d1310aa9a46fd
21452145
languageName: node
21462146
linkType: hard
21472147

0 commit comments

Comments
 (0)