Skip to content

Commit 69bb0a6

Browse files
odeimaizmatusdrobuliak66
authored andcommitted
🐛 [Frontend] Fix App mode: Wait until the workbench is deserialized to start (#6214)
1 parent 719aed9 commit 69bb0a6

File tree

2 files changed

+103
-90
lines changed

2 files changed

+103
-90
lines changed

services/static-webserver/client/source/class/osparc/desktop/StudyEditor.js

Lines changed: 75 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -169,70 +169,16 @@ qx.Class.define("osparc.desktop.StudyEditor", {
169169
this.__workbenchView.setStudy(study);
170170
this.__slideshowView.setStudy(study);
171171

172-
this.__attachSocketEventHandlers();
173-
174-
study.initStudy();
175-
176-
if (osparc.product.Utils.hasIdlingTrackerEnabled()) {
177-
this.__startIdlingTracker();
178-
}
179-
180-
// Count dynamic services.
181-
// If it is larger than PROJECTS_MAX_NUM_RUNNING_DYNAMIC_NODES, dynamics won't start -> Flash Message
182-
const maxNumber = osparc.store.StaticInfo.getInstance().getMaxNumberDyNodes();
183-
const dontCheck = study.getDisableServiceAutoStart();
184-
if (maxNumber && !dontCheck) {
185-
const nodes = study.getWorkbench().getNodes();
186-
const nDynamics = Object.values(nodes).filter(node => node.isDynamic()).length;
187-
if (nDynamics > maxNumber) {
188-
let msg = this.tr("The Study contains more than ") + maxNumber + this.tr(" Interactive services.");
189-
msg += "<br>";
190-
msg += this.tr("Please start them manually.");
191-
osparc.FlashMessenger.getInstance().logAs(msg, "WARNING");
192-
}
193-
}
194-
195-
osparc.data.Resources.get("organizations")
196-
.then(() => {
197-
if (osparc.data.model.Study.canIWrite(study.getAccessRights())) {
198-
this.__startAutoSaveTimer();
199-
} else {
200-
const msg = this.self().READ_ONLY_TEXT;
201-
osparc.FlashMessenger.getInstance().logAs(msg, "WARNING");
172+
// wait until the workbench is deserialized to move to the next step
173+
if (study.getWorkbench().isDeserialized()) {
174+
this.__initStudy(study);
175+
} else {
176+
study.getWorkbench().addListener("changeDeserialized", e => {
177+
if (e.getData()) {
178+
this.__initStudy(study);
202179
}
203-
});
204-
205-
const pageContext = study.getUi().getMode();
206-
switch (pageContext) {
207-
case "guided":
208-
case "app":
209-
this.__slideshowView.startSlides();
210-
break;
211-
default:
212-
this.__workbenchView.openFirstNode();
213-
break;
180+
}, this);
214181
}
215-
this.addListener("changePageContext", e => {
216-
const pageCxt = e.getData();
217-
study.getUi().setMode(pageCxt);
218-
});
219-
this.setPageContext(pageContext);
220-
221-
const workbench = study.getWorkbench();
222-
workbench.addListener("retrieveInputs", e => {
223-
const data = e.getData();
224-
const node = data["node"];
225-
const portKey = data["portKey"];
226-
this.__updatePipelineAndRetrieve(node, portKey);
227-
}, this);
228-
229-
workbench.addListener("openNode", e => {
230-
const nodeId = e.getData();
231-
this.nodeSelected(nodeId);
232-
}, this);
233-
234-
workbench.addListener("updateStudyDocument", () => this.updateStudyDocument());
235-
workbench.addListener("restartAutoSaveTimer", () => this.__restartAutoSaveTimer());
236182
})
237183
.catch(err => {
238184
console.error(err);
@@ -255,6 +201,73 @@ qx.Class.define("osparc.desktop.StudyEditor", {
255201
this.__updatingStudy = 0;
256202
},
257203

204+
__initStudy: function(study) {
205+
this.__attachSocketEventHandlers();
206+
207+
study.initStudy();
208+
209+
if (osparc.product.Utils.hasIdlingTrackerEnabled()) {
210+
this.__startIdlingTracker();
211+
}
212+
213+
// Count dynamic services.
214+
// If it is larger than PROJECTS_MAX_NUM_RUNNING_DYNAMIC_NODES, dynamics won't start -> Flash Message
215+
const maxNumber = osparc.store.StaticInfo.getInstance().getMaxNumberDyNodes();
216+
const dontCheck = study.getDisableServiceAutoStart();
217+
if (maxNumber && !dontCheck) {
218+
const nodes = study.getWorkbench().getNodes();
219+
const nDynamics = Object.values(nodes).filter(node => node.isDynamic()).length;
220+
if (nDynamics > maxNumber) {
221+
let msg = this.tr("The Study contains more than ") + maxNumber + this.tr(" Interactive services.");
222+
msg += "<br>";
223+
msg += this.tr("Please start them manually.");
224+
osparc.FlashMessenger.getInstance().logAs(msg, "WARNING");
225+
}
226+
}
227+
228+
osparc.data.Resources.get("organizations")
229+
.then(() => {
230+
if (osparc.data.model.Study.canIWrite(study.getAccessRights())) {
231+
this.__startAutoSaveTimer();
232+
} else {
233+
const msg = this.self().READ_ONLY_TEXT;
234+
osparc.FlashMessenger.getInstance().logAs(msg, "WARNING");
235+
}
236+
});
237+
238+
const pageContext = study.getUi().getMode();
239+
switch (pageContext) {
240+
case "guided":
241+
case "app":
242+
this.__slideshowView.startSlides();
243+
break;
244+
default:
245+
this.__workbenchView.openFirstNode();
246+
break;
247+
}
248+
this.addListener("changePageContext", e => {
249+
const pageCxt = e.getData();
250+
study.getUi().setMode(pageCxt);
251+
});
252+
this.setPageContext(pageContext);
253+
254+
const workbench = study.getWorkbench();
255+
workbench.addListener("retrieveInputs", e => {
256+
const data = e.getData();
257+
const node = data["node"];
258+
const portKey = data["portKey"];
259+
this.__updatePipelineAndRetrieve(node, portKey);
260+
}, this);
261+
262+
workbench.addListener("openNode", e => {
263+
const nodeId = e.getData();
264+
this.nodeSelected(nodeId);
265+
}, this);
266+
267+
workbench.addListener("updateStudyDocument", () => this.updateStudyDocument());
268+
workbench.addListener("restartAutoSaveTimer", () => this.__restartAutoSaveTimer());
269+
},
270+
258271
__setStudyDataInBackend: function(studyData) {
259272
this.__studyDataInBackend = osparc.data.model.Study.deepCloneStudyObject(studyData, true);
260273

services/static-webserver/client/source/class/osparc/viewer/NodeViewer.js

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -37,39 +37,14 @@ qx.Class.define("osparc.viewer.NodeViewer", {
3737
const study = new osparc.data.model.Study(studyData);
3838
this.setStudy(study);
3939

40-
const startPolling = () => {
41-
const node = study.getWorkbench().getNode(nodeId);
42-
this.setNode(node);
43-
44-
node.addListener("retrieveInputs", e => {
45-
const data = e.getData();
46-
const portKey = data["portKey"];
47-
node.retrieveInputs(portKey);
48-
}, this);
49-
50-
node.initIframeHandler();
51-
52-
const iframeHandler = node.getIframeHandler();
53-
if (iframeHandler) {
54-
iframeHandler.startPolling();
55-
iframeHandler.addListener("iframeChanged", () => this.__iFrameChanged(), this);
56-
iframeHandler.getIFrame().addListener("load", () => this.__iFrameChanged(), this);
57-
this.__iFrameChanged();
58-
59-
this.__attachSocketEventHandlers();
60-
} else {
61-
console.error(node.getLabel() + " iframe handler not ready");
62-
}
63-
}
64-
6540
if (study.getWorkbench().isDeserialized()) {
66-
startPolling();
41+
this.__initStudy(study, nodeId);
6742
} else {
6843
study.getWorkbench().addListener("changeDeserialized", e => {
6944
if (e.getData()) {
70-
startPolling();
45+
this.__initStudy(study, nodeId);
7146
}
72-
});
47+
}, this);
7348
}
7449
})
7550
.catch(err => console.error(err));
@@ -90,6 +65,31 @@ qx.Class.define("osparc.viewer.NodeViewer", {
9065
},
9166

9267
members: {
68+
__initStudy: function(study, nodeId) {
69+
const node = study.getWorkbench().getNode(nodeId);
70+
this.setNode(node);
71+
72+
node.addListener("retrieveInputs", e => {
73+
const data = e.getData();
74+
const portKey = data["portKey"];
75+
node.retrieveInputs(portKey);
76+
}, this);
77+
78+
node.initIframeHandler();
79+
80+
const iframeHandler = node.getIframeHandler();
81+
if (iframeHandler) {
82+
iframeHandler.startPolling();
83+
iframeHandler.addListener("iframeChanged", () => this.__iFrameChanged(), this);
84+
iframeHandler.getIFrame().addListener("load", () => this.__iFrameChanged(), this);
85+
this.__iFrameChanged();
86+
87+
this.__attachSocketEventHandlers();
88+
} else {
89+
console.error(node.getLabel() + " iframe handler not ready");
90+
}
91+
},
92+
9393
__iFrameChanged: function() {
9494
this._removeAll();
9595

0 commit comments

Comments
 (0)