mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-15 16:52:34 +00:00
Use proper logging, more errors from tasks should now trigger showing the error dialog instead of siliently failing
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
class W3DHub
|
||||
class BackgroundWorker
|
||||
LOG_TAG = "W3DHub::BackgroundWorker"
|
||||
@@instance = nil
|
||||
@@alive = false
|
||||
|
||||
def self.create
|
||||
raise "BackgroundWorker instance already exists!" if @@instance
|
||||
logger.info(LOG_TAG) { "Starting background job worker..." }
|
||||
|
||||
|
||||
@@alive = true
|
||||
@@run = true
|
||||
@@instance = self.new
|
||||
|
||||
Async do
|
||||
@@ -18,20 +22,24 @@ class W3DHub
|
||||
@@instance
|
||||
end
|
||||
|
||||
def self.run?
|
||||
@@run
|
||||
end
|
||||
|
||||
def self.alive?
|
||||
@@alive
|
||||
end
|
||||
|
||||
def self.shutdown!
|
||||
@@alive = false
|
||||
@@run = false
|
||||
end
|
||||
|
||||
def self.job(job, callback)
|
||||
@@instance.add_job(Job.new(job, callback))
|
||||
def self.job(job, callback, error_handler = nil)
|
||||
@@instance.add_job(Job.new(job: job, callback: callback, error_handler: error_handler))
|
||||
end
|
||||
|
||||
def self.foreground_job(job, callback)
|
||||
@@instance.add_job(Job.new(job, callback, true))
|
||||
def self.foreground_job(job, callback, error_handler = nil)
|
||||
@@instance.add_job(Job.new(job: job, callback: callback, error_handler: error_handler, deliver_to_queue: true))
|
||||
end
|
||||
|
||||
def initialize
|
||||
@@ -39,17 +47,20 @@ class W3DHub
|
||||
end
|
||||
|
||||
def handle_jobs
|
||||
while BackgroundWorker.alive?
|
||||
while BackgroundWorker.run?
|
||||
job = @jobs.shift
|
||||
|
||||
begin
|
||||
job&.do
|
||||
rescue => e
|
||||
pp e
|
||||
rescue => error
|
||||
job&.raise_error(error)
|
||||
end
|
||||
|
||||
sleep 0.1
|
||||
end
|
||||
|
||||
logger.info(LOG_TAG) { "Stopped background job worker." }
|
||||
@@alive = false
|
||||
end
|
||||
|
||||
def add_job(job)
|
||||
@@ -57,9 +68,10 @@ class W3DHub
|
||||
end
|
||||
|
||||
class Job
|
||||
def initialize(job, callback, deliver_to_queue = false)
|
||||
def initialize(job:, callback:, error_handler: nil, deliver_to_queue: false)
|
||||
@job = job
|
||||
@callback = callback
|
||||
@error_handler = error_handler
|
||||
|
||||
@deliver_to_queue = deliver_to_queue
|
||||
end
|
||||
@@ -76,6 +88,11 @@ class W3DHub
|
||||
@callback.call(result)
|
||||
end
|
||||
end
|
||||
|
||||
def raise_error(error)
|
||||
logger.error error
|
||||
@error_handler&.call(error)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user