Compare commits

...

7 Commits

7 changed files with 28 additions and 13 deletions

View File

@@ -2,7 +2,7 @@ class W3DHub
class Api
LOG_TAG = "W3DHub::Api".freeze
API_TIMEOUT = 10 # seconds
API_TIMEOUT = 30 # seconds
USER_AGENT = "Cyberarm's Linux Friendly W3D Hub Launcher v#{W3DHub::VERSION}".freeze
DEFAULT_HEADERS = {
"User-Agent": USER_AGENT,
@@ -42,7 +42,7 @@ class W3DHub
#! === W3D Hub API === !#
ENDPOINT = "https://secure.w3dhub.com".freeze
ENDPOINT = "https://w3dhub-api.w3d.cyberarm.dev" # "https://secure.w3dhub.com".freeze # "https://example.com" # "http://127.0.0.1:9292".freeze #
API_CONNECTION = Excon.new(ENDPOINT, persistent: true)
def self.excon(method, url, headers = DEFAULT_HEADERS, body = nil, api = :api)

View File

@@ -6,7 +6,7 @@ class W3DHub
def initialize(response)
@data = JSON.parse(response, symbolize_names: true)
@items = @data[:news].map { |item| Item.new(item) }
@items = (@data[:news] && @data[:news].is_a?(Array)) ? @data[:news].map { |item| Item.new(item) } : []
end
class Item

View File

@@ -1,7 +1,7 @@
class W3DHub
class Api
class Package
attr_reader :category, :subcategory, :name, :version, :size, :checksum, :checksum_chunk_size, :checksum_chunks, :error,
attr_reader :category, :subcategory, :name, :version, :size, :checksum, :checksum_chunk_size, :checksum_chunks, :download_url, :error,
:custom_partially_valid_at_bytes, :custom_is_patch
def initialize(hash)
@@ -18,6 +18,8 @@ class W3DHub
@checksum_chunks = @data[:"checksum-chunks"]
@error = @data[:error] || nil
@download_url = @data[:download_url] || nil
@custom_partially_valid_at_bytes = 0
@custom_is_patch = false
end

View File

@@ -617,9 +617,11 @@ class W3DHub
def package_fetch(package, &block)
logger.info(LOG_TAG) { "Downloading: #{package.category}:#{package.subcategory}:#{package.name}-#{package.version}" }
Api.package(package) do |chunk, remaining_bytes, total_bytes|
status_okay = Api.package(package) do |chunk, remaining_bytes, total_bytes|
block&.call(chunk, remaining_bytes, total_bytes)
end
fail!("Failed to retrieve package: (#{package.category}:#{package.subcategory}:#{package.name}:#{package.version})") unless status_okay
end
def verify_package(package, &block)

View File

@@ -89,9 +89,11 @@ class W3DHub
# Download a W3D Hub package
def self.fetch_package(package, block)
endpoint_download_url = package.download_url || "#{Api::ENDPOINT}/apis/launcher/1/get-package"
path = package_path(package.category, package.subcategory, package.name, package.version)
headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": Api::USER_AGENT }
headers["Authorization"] = "Bearer #{Store.account.access_token}" if Store.account
headers["Authorization"] = "Bearer #{Store.account.access_token}" if Store.account && !package.download_url
body = "data=#{JSON.dump({ category: package.category, subcategory: package.subcategory, name: package.name, version: package.version })}"
start_from_bytes = package.custom_partially_valid_at_bytes
logger.info(LOG_TAG) { " Start from bytes: #{start_from_bytes} of #{package.size}" }
@@ -112,16 +114,25 @@ class W3DHub
end
# Create a new connection due to some weirdness somewhere in Excon
response = Excon.post(
"#{Api::ENDPOINT}/apis/launcher/1/get-package",
response = Excon.send(
package.download_url ? :get : :post,
endpoint_download_url,
tcp_nodelay: true,
headers: headers,
body: "data=#{JSON.dump({ category: package.category, subcategory: package.subcategory, name: package.name, version: package.version })}",
body: package.download_url ? "" : body,
chunk_size: 50_000,
response_block: streamer
response_block: streamer,
middlewares: Excon.defaults[:middlewares] + [Excon::Middleware::RedirectFollower]
)
response.status == 200 || response.status == 206
if response.status == 200 || response.status == 206
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}" }
false
end
ensure
file&.close
end

View File

@@ -279,7 +279,7 @@ class W3DHub
hash[:applications] << app unless app_in_array
end
Store.applications = Api::Applications.new(hash.to_json)
Store.applications = Api::Applications.new(hash.to_json) unless hash[:applications].empty?
end
end
end

View File

@@ -1,4 +1,4 @@
class W3DHub
DIR_NAME = "W3DHubAlt"
VERSION = "0.5.1"
VERSION = "0.6.0"
end