mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-15 08:42:34 +00:00
Compare commits
7 Commits
696c30aa63
...
e73abce65e
| Author | SHA1 | Date | |
|---|---|---|---|
| e73abce65e | |||
| 9b1cb1bb95 | |||
| c9185e9859 | |||
| e4a0d2a848 | |||
| 1401b80057 | |||
| cfae4ec3a5 | |||
| c344e6a522 |
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
23
lib/cache.rb
23
lib/cache.rb
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
class W3DHub
|
||||
DIR_NAME = "W3DHubAlt"
|
||||
VERSION = "0.5.1"
|
||||
VERSION = "0.6.0"
|
||||
end
|
||||
Reference in New Issue
Block a user