diff --git a/src/main_fiber.cr b/src/main_fiber.cr index 0598657..2fbe4ae 100644 --- a/src/main_fiber.cr +++ b/src/main_fiber.cr @@ -6,6 +6,7 @@ class MainFiber @@channel = Channel(-> Nil).new @@done = Channel(Bool).new + @@main_fiber = Fiber.current def self.start_and_block loop do @@ -21,9 +22,13 @@ class MainFiber end def self.run(&block : -> Nil) - @@channel.send block - until @@done.receive - Fiber.yield + if @@main_fiber == Fiber.current + block.call + else + @@channel.send block + until @@done.receive + Fiber.yield + end end end end diff --git a/src/mango.cr b/src/mango.cr index b32dbbb..e43e315 100644 --- a/src/mango.cr +++ b/src/mango.cr @@ -45,17 +45,22 @@ class CLI < Clim version "Version #{MANGO_VERSION}", short: "-v" common_option run do |opts| - Config.load(opts.config).set_current - MangaDex::Downloader.default - Plugin::Downloader.default - puts BANNER puts DESCRIPTION puts # empty ARGV so it won't be passed to Kemal ARGV.clear - Server.new.start + + Config.load(opts.config).set_current + MangaDex::Downloader.default + Plugin::Downloader.default + + spawn do + Server.new.start + end + + MainFiber.start_and_block end sub "admin" do @@ -123,8 +128,4 @@ class CLI < Clim end end -spawn do - CLI.start(ARGV) -end - -MainFiber.start_and_block +CLI.start(ARGV)