TaskManager#ensureWorker method guarantees worker is up and running. Helps to mitigate race condition on UI launch

This commit is contained in:
Mantas 2019-09-17 01:27:18 +03:00 committed by Martin Edenhofer
parent dfb2b1bc8a
commit 296a024c4b
2 changed files with 24 additions and 2 deletions

View file

@ -52,6 +52,14 @@ class App.Controller extends Spine.Controller
@controllerId
)
one: (event, callback) =>
App.Event.bind(
event
callback
@controllerId
true
)
unbind: (event, callback) =>
App.Event.unbind(
event

View file

@ -59,6 +59,10 @@ class App.TaskManager
return if !_instance
_instance.worker(key)
@ensureWorker: (key, callback) ->
return if !_instance
_instance.ensureWorker(key, callback)
@nextTaskUrl: ->
return if !_instance
_instance.nextTaskUrl()
@ -153,8 +157,8 @@ class _taskManagerSingleton extends App.Controller
title: App.i18n.translateInline('Loading...')
head: App.i18n.translateInline('Loading...')
worker = App.TaskManager.worker(task.key)
if worker
data = worker.meta()
if worker && worker.meta
data = worker.meta(task)
# apply meta data of controller
if data
@ -180,6 +184,15 @@ class _taskManagerSingleton extends App.Controller
return @workers[ key ] if @workers[ key ]
return
ensureWorker: (key, callback) =>
if worker = @worker(key)
callback(worker)
return
@one "TaskManager::#{key}::WorkerStarted", =>
@ensureWorker(key, callback)
true
execute: (params) ->
@queue.push params
@run()
@ -306,6 +319,7 @@ class _taskManagerSingleton extends App.Controller
# start controller if not already started
if !@workers[params.key]
@workers[params.key] = new App[params.controller](params_app)
App.Event.trigger "TaskManager::#{params.key}::WorkerStarted"
# if controller is started hidden, call hide of controller
if !params.show