mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 09:12:35 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d92a8753d8 | |||
| b299593076 | |||
| ce10cdc658 | |||
| 5a3f350015 | |||
| d53299e904 | |||
| d12d3ff6b8 | |||
| d67ffa14a3 | |||
| 71047ce9e8 | |||
| 7da716dde4 | |||
| 3a72a2e094 |
@@ -14,16 +14,18 @@ GEM
|
||||
ffi (1.17.2-x86_64-linux-gnu)
|
||||
ffi-win32-extensions (1.0.4)
|
||||
ffi
|
||||
fiddle (1.1.8)
|
||||
gosu (1.4.6)
|
||||
i18n (1.14.7)
|
||||
concurrent-ruby (~> 1.0)
|
||||
ircparser (1.0.0)
|
||||
libui (0.1.2-x64-mingw)
|
||||
libui (0.2.0-x64-mingw-ucrt)
|
||||
fiddle
|
||||
logger (1.7.0)
|
||||
mutex_m (0.3.0)
|
||||
rake (13.3.0)
|
||||
rexml (3.4.2)
|
||||
rubyzip (3.0.2)
|
||||
rexml (3.4.4)
|
||||
rubyzip (3.1.1)
|
||||
sdl2-bindings (0.2.3)
|
||||
ffi (~> 1.15)
|
||||
websocket (1.2.11)
|
||||
|
||||
@@ -91,7 +91,7 @@ class W3DHub
|
||||
retry_interval: 1,
|
||||
retry_errors: [Excon::Error::Socket, Excon::Error::HTTPStatus] # Don't retry on timeout
|
||||
)
|
||||
rescue Excon::Errors::Timeout => e
|
||||
rescue Excon::Error::Timeout => e
|
||||
logger.error(LOG_TAG) { "Connection to \"#{url}\" timed out after: #{API_TIMEOUT} seconds" }
|
||||
|
||||
DummyResponse.new(e)
|
||||
@@ -135,7 +135,7 @@ class W3DHub
|
||||
retry_interval: 1,
|
||||
retry_errors: [Excon::Error::Socket, Excon::Error::HTTPStatus] # Don't retry on timeout
|
||||
)
|
||||
rescue Excon::Errors::Timeout => e
|
||||
rescue Excon::Error::Timeout => e
|
||||
logger.error(LOG_TAG) { "Connection to \"#{url}\" timed out after: #{API_TIMEOUT} seconds" }
|
||||
|
||||
DummyResponse.new(e)
|
||||
|
||||
@@ -24,8 +24,9 @@ class W3DHub
|
||||
|
||||
def to_json(env)
|
||||
d = @data.dup
|
||||
|
||||
d[:avatar_uri] = @avatar_uri
|
||||
d[:access_token_expiry] = d[:access_token_expiry].to_i
|
||||
d[:access_token_expiry] = @access_token_expiry.to_i
|
||||
|
||||
d.to_json(env)
|
||||
end
|
||||
|
||||
@@ -114,26 +114,33 @@ class W3DHub
|
||||
|
||||
def normalize_path(path, base_path)
|
||||
path = path.to_s.gsub("\\", "/")
|
||||
return path if W3DHub.windows? # Windows is easy, or annoying, depending how you look at it...
|
||||
return "#{base_path}/#{path}" if W3DHub.windows? # Windows is easy, or annoying, depending how you look at it...
|
||||
|
||||
constructed_path = base_path
|
||||
lowercase_full_path = "#{base_path}/#{path}".downcase.strip.freeze
|
||||
|
||||
accepted_parts = 0
|
||||
split_path = path.split("/")
|
||||
split_path.each do |segment|
|
||||
Dir.glob("#{constructed_path}/*").each do |part|
|
||||
next unless "#{constructed_path}/#{segment}".downcase == part.downcase
|
||||
|
||||
constructed_path = part
|
||||
# Handle edge case where a file with the same name is in a higher directory
|
||||
next if File.file?(part) && part.downcase.strip != lowercase_full_path
|
||||
|
||||
break if File.file?(constructed_path)
|
||||
constructed_path = part
|
||||
accepted_parts += 1
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
# Find file if it exists, otherwise downcase the `path` sans `base_path`
|
||||
if "#{base_path}/#{path}".length == constructed_path.length
|
||||
# Find file if it exists else use provided path as cased
|
||||
if constructed_path.downcase.strip == lowercase_full_path
|
||||
constructed_path
|
||||
elsif accepted_parts.positive?
|
||||
"#{constructed_path}/#{split_path[accepted_parts..].join('/')}"
|
||||
else
|
||||
"#{base_path}/#{path.downcase}"
|
||||
"#{base_path}/#{path}" # File doesn't exist, case doesn't matter.
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -53,4 +53,4 @@ class W3DHub
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
18
lib/cache.rb
18
lib/cache.rb
@@ -133,10 +133,24 @@ class W3DHub
|
||||
return true
|
||||
else
|
||||
logger.debug(LOG_TAG) { " Failed to retrieve package: (#{package.category}:#{package.subcategory}:#{package.name}:#{package.version})" }
|
||||
logger.debug(LOG_TAG) { " Download URL: #{endpoint_download_url}, response: #{response.status}" }
|
||||
logger.debug(LOG_TAG) { " Download URL: #{endpoint_download_url}, response: #{response&.status || -1}" }
|
||||
|
||||
false
|
||||
return false
|
||||
end
|
||||
rescue Excon::Error::Timeout => e
|
||||
logger.error(LOG_TAG) { " Connection to \"#{endpoint_download_url}\" timed out after: #{W3DHub::Api::API_TIMEOUT} seconds" }
|
||||
logger.error(LOG_TAG) { e }
|
||||
logger.debug(LOG_TAG) { " Failed to retrieve package: (#{package.category}:#{package.subcategory}:#{package.name}:#{package.version})" }
|
||||
logger.debug(LOG_TAG) { " Download URL: #{endpoint_download_url}, response: #{response&.status || -1}" }
|
||||
|
||||
return false
|
||||
rescue Excon::Error => e
|
||||
logger.error(LOG_TAG) { " Connection to \"#{endpoint_download_url}\" errored:" }
|
||||
logger.error(LOG_TAG) { e }
|
||||
logger.debug(LOG_TAG) { " Failed to retrieve package: (#{package.category}:#{package.subcategory}:#{package.name}:#{package.version})" }
|
||||
logger.debug(LOG_TAG) { " Download URL: #{endpoint_download_url}, response: #{response&.status || -1}" }
|
||||
|
||||
return false
|
||||
ensure
|
||||
file&.close
|
||||
end
|
||||
|
||||
@@ -11,7 +11,7 @@ class W3DHub
|
||||
@fraction = 0.0
|
||||
@w3dhub_logo = get_image("#{GAME_ROOT_PATH}/media/icons/app.png")
|
||||
@tasks = {
|
||||
# connectivity_check: { started: false, complete: false }, # HEAD connectivity-check.ubuntu.com or HEAD secure.w3dhub.com?
|
||||
connectivity_check: { started: false, complete: false }, # HEAD connectivity-check.ubuntu.com or HEAD secure.w3dhub.com?
|
||||
# launcher_updater: { started: false, complete: false },
|
||||
server_list: { started: false, complete: false },
|
||||
refresh_user_token: { started: false, complete: false },
|
||||
@@ -139,6 +139,41 @@ class W3DHub
|
||||
@tasks[:refresh_user_token][:complete] = true
|
||||
end
|
||||
|
||||
def connectivity_check
|
||||
domains = {
|
||||
"w3dhub-api.w3d.cyberarm.dev": false,
|
||||
"s3.w3d.cyberarm.dev": false,
|
||||
"secure.w3dhub.com": false
|
||||
}
|
||||
|
||||
@status_label.value = "Checking uplink..."
|
||||
domains.each do |key, value|
|
||||
begin
|
||||
Resolv.getaddress(key.to_s)
|
||||
rescue => e
|
||||
logger.error(LOG_TAG) {"Failed to resolve hostname: #{key.to_s}"}
|
||||
logger.error(LOG_TAG) {e}
|
||||
|
||||
push_state(
|
||||
ConfirmDialog,
|
||||
title: "DNS Resolution Failure",
|
||||
message: "Failed to resolve: #{key.to_s}\n\nTry disabling VPN or proxy if in use.\n\n\nContinue offline?",
|
||||
cancel_callback: ->() { window.close },
|
||||
accept_callback: ->() {
|
||||
@offline_mode = true
|
||||
Store.offline_mode = true
|
||||
@tasks[:connectivity_check][:complete] = true
|
||||
}
|
||||
)
|
||||
|
||||
# Prevent task from being marked as completed
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
@tasks[:connectivity_check][:complete] = true
|
||||
end
|
||||
|
||||
def service_status
|
||||
Api.on_thread(:service_status) do |service_status|
|
||||
@service_status = service_status
|
||||
|
||||
@@ -24,6 +24,7 @@ class W3DHub
|
||||
stack(width: 1.0, height: 46, padding: 8) do
|
||||
button "Okay", width: 1.0 do
|
||||
pop_state
|
||||
@options[:accept_callback]&.call
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
class W3DHub
|
||||
DIR_NAME = "W3DHubAlt"
|
||||
VERSION = "0.8.0"
|
||||
DIR_NAME = "W3DHubAlt".freeze
|
||||
VERSION = "0.8.1".freeze
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user