Skip to content

Commit 27c18f2

Browse files
committed
fix collaboration extension corruption issue
1 parent cb40221 commit 27c18f2

2 files changed

Lines changed: 14 additions & 8 deletions

File tree

src/addons/addons/collaboration/helpers/helper.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ export function pushLocalStateToYjs() {
491491
const extensionManager = vm.extensionManager;
492492
const extensionURLs = extensionManager.getExtensionURLs();
493493
const loadedExtensions = Array.from(extensionManager._loadedExtensions.keys()).map(id => {
494-
return extensionURLs[id] || id;
494+
return { URL: extensionURLs[id] || id, name: id };
495495
});
496496
if (loadedExtensions.length > 0) {
497497
sharedExtensions.insert(0, loadedExtensions);
@@ -725,10 +725,11 @@ export function performInitialSync() {
725725
});
726726

727727
const remoteExtensions = sharedExtensions.toArray();
728-
remoteExtensions.forEach(urlOrId => {
729-
if (!vm.extensionManager.isExtensionLoaded(urlOrId)) {
728+
remoteExtensions.forEach(ext => {
729+
const extURL = ext.URL || ext;
730+
if (!vm.extensionManager.isExtensionLoaded(extURL)) {
730731

731-
vm.extensionManager.loadExtensionURL(urlOrId, false);
732+
vm.extensionManager.loadExtensionURL(extURL, false);
732733
}
733734
});
734735

src/addons/addons/collaboration/userscript.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,10 @@ function attachYjsProvider() {
180180
if (event.transaction.origin === constants.LOCAL_EVENT_SYNC_ORIGIN) return;
181181

182182
const remoteExtensions = constants.mutableRefs.sharedExtensions.toArray();
183-
remoteExtensions.forEach(urlOrId => {
184-
if (!constants.mutableRefs.vm.extensionManager.isExtensionLoaded(urlOrId)) {
185-
constants.mutableRefs.vm.extensionManager.loadExtensionURL(urlOrId, false);
183+
remoteExtensions.forEach(ext => {
184+
const extURL = ext.URL || ext;
185+
if (!constants.mutableRefs.vm.extensionManager.isExtensionLoaded(extURL)) {
186+
constants.mutableRefs.vm.extensionManager.loadExtensionURL(extURL, false);
186187
}
187188
});
188189
});
@@ -702,7 +703,11 @@ function attachYjsProvider() {
702703

703704
constants.mutableRefs.ydoc.transact(() => {
704705
const currentExts = constants.mutableRefs.sharedExtensions.toArray();
705-
if (!currentExts.includes(extension)) {
706+
const alreadyExists = currentExts.some(ext => {
707+
if (typeof ext === 'string') return ext === extension.URL || ext === extension.name;
708+
return ext.URL === extension.URL && ext.name === extension.name;
709+
});
710+
if (!alreadyExists) {
706711
constants.mutableRefs.sharedExtensions.push([extension]);
707712
}
708713
}, constants.LOCAL_EVENT_SYNC_ORIGIN);

0 commit comments

Comments
 (0)