diff --git a/lib/api/server_list_server.rb b/lib/api/server_list_server.rb index dc02fe3..9505f65 100644 --- a/lib/api/server_list_server.rb +++ b/lib/api/server_list_server.rb @@ -49,7 +49,7 @@ class W3DHub lambda do @ping = -1 - W3DHub.captured_commmand("ping #{@address} #{W3DHub.windows? ? '-n 3' : '-c 3'}") do |line| + W3DHub.command("ping #{@address} #{W3DHub.windows? ? '-n 3' : '-c 3'}") do |line| if W3DHub.windows? && line =~ /Minimum|Maximum|Maximum/i @ping = line.strip.split(",").last.split("=").last.sub("ms", "").to_i elsif W3DHub.unix? && line.start_with?("rtt min/avg/max/mdev") diff --git a/lib/application_manager/task.rb b/lib/application_manager/task.rb index ad45842..1aa85d9 100644 --- a/lib/application_manager/task.rb +++ b/lib/application_manager/task.rb @@ -147,12 +147,12 @@ class W3DHub # FIXME: Check that there is enough disk space # tar present? - bsdtar_present = system("#{W3DHub.tar_command} --help") + bsdtar_present = W3DHub.command("#{W3DHub.tar_command} --help") fail!("FAIL FAST: `#{W3DHub.tar_command} --help` command failed, #{W3DHub.tar_command} is not installed. Will be unable to unpack packages.") unless bsdtar_present # Wine present? if W3DHub.unix? - wine_present = system("which #{Store.settings[:wine_command]}") + wine_present = W3DHub.command("which #{Store.settings[:wine_command]}") fail!("FAIL FAST: `which #{Store.settings[:wine_command]}` command failed, wine is not installed. Will be unable to create prefixes or launch games.") unless wine_present end end @@ -636,7 +636,7 @@ class W3DHub package_path = Cache.package_path(package.category, package.subcategory, package.name, package.version) logger.info(LOG_TAG) { " Running #{W3DHub.tar_command} command: #{W3DHub.tar_command} -xf \"#{package_path}\" -C \"#{path}\"" } - return system("#{W3DHub.tar_command} -xf \"#{package_path}\" -C \"#{path}\"") + return W3DHub.command("#{W3DHub.tar_command} -xf \"#{package_path}\" -C \"#{path}\"") end def apply_patch(package, path) @@ -648,7 +648,7 @@ class W3DHub Cache.create_directories(temp_path, true) logger.info(LOG_TAG) { " Running #{W3DHub.tar_command} command: #{W3DHub.tar_command} -xf \"#{package_path}\" -C \"#{temp_path}\"" } - system("#{W3DHub.tar_command} -xf \"#{package_path}\" -C \"#{temp_path}\"") + W3DHub.command("#{W3DHub.tar_command} -xf \"#{package_path}\" -C \"#{temp_path}\"") logger.info(LOG_TAG) { " Loading #{temp_path}/#{manifest_file.name}.patch..." } patch_mix = W3DHub::Mixer::Reader.new(file_path: "#{temp_path}/#{manifest_file.name}.patch", ignore_crc_mismatches: false) diff --git a/lib/common.rb b/lib/common.rb index 70d63de..3a4f856 100644 --- a/lib/common.rb +++ b/lib/common.rb @@ -40,7 +40,7 @@ class W3DHub end end - def self.captured_commmand(command, &block) + def self.command(command, &block) if windows? stdout_read, stdout_write = IO.pipe @@ -60,23 +60,26 @@ class W3DHub status = -1 until (status = Process.get_exitcode(pid)) - readable, _writable, _errorable = IO.select([stdout_read], [], [], 1) + if block + readable, _writable, _errorable = IO.select([stdout_read], [], [], 1) - readable&.each do |io| - line = io.readpartial(1024) + readable&.each do |io| + line = io.readpartial(1024) - block&.call(line) + block&.call(line) + end + else + sleep 0.1 end end - stdout_read.close - stdout_write.close - status.zero? else IO.popen(command) do |io| - io.each_line do |line| - block&.call(line) + if block + io.each_line do |line| + block&.call(line) + end end end