@@ -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
0 commit comments