mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 09:12:35 +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
|
class Api
|
||||||
LOG_TAG = "W3DHub::Api".freeze
|
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
|
USER_AGENT = "Cyberarm's Linux Friendly W3D Hub Launcher v#{W3DHub::VERSION}".freeze
|
||||||
DEFAULT_HEADERS = {
|
DEFAULT_HEADERS = {
|
||||||
"User-Agent": USER_AGENT,
|
"User-Agent": USER_AGENT,
|
||||||
@@ -42,7 +42,7 @@ class W3DHub
|
|||||||
|
|
||||||
#! === W3D Hub API === !#
|
#! === 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)
|
API_CONNECTION = Excon.new(ENDPOINT, persistent: true)
|
||||||
|
|
||||||
def self.excon(method, url, headers = DEFAULT_HEADERS, body = nil, api = :api)
|
def self.excon(method, url, headers = DEFAULT_HEADERS, body = nil, api = :api)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ class W3DHub
|
|||||||
def initialize(response)
|
def initialize(response)
|
||||||
@data = JSON.parse(response, symbolize_names: true)
|
@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
|
end
|
||||||
|
|
||||||
class Item
|
class Item
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
class W3DHub
|
class W3DHub
|
||||||
class Api
|
class Api
|
||||||
class Package
|
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
|
:custom_partially_valid_at_bytes, :custom_is_patch
|
||||||
|
|
||||||
def initialize(hash)
|
def initialize(hash)
|
||||||
@@ -18,6 +18,8 @@ class W3DHub
|
|||||||
@checksum_chunks = @data[:"checksum-chunks"]
|
@checksum_chunks = @data[:"checksum-chunks"]
|
||||||
@error = @data[:error] || nil
|
@error = @data[:error] || nil
|
||||||
|
|
||||||
|
@download_url = @data[:download_url] || nil
|
||||||
|
|
||||||
@custom_partially_valid_at_bytes = 0
|
@custom_partially_valid_at_bytes = 0
|
||||||
@custom_is_patch = false
|
@custom_is_patch = false
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -617,9 +617,11 @@ class W3DHub
|
|||||||
def package_fetch(package, &block)
|
def package_fetch(package, &block)
|
||||||
logger.info(LOG_TAG) { "Downloading: #{package.category}:#{package.subcategory}:#{package.name}-#{package.version}" }
|
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)
|
block&.call(chunk, remaining_bytes, total_bytes)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fail!("Failed to retrieve package: (#{package.category}:#{package.subcategory}:#{package.name}:#{package.version})") unless status_okay
|
||||||
end
|
end
|
||||||
|
|
||||||
def verify_package(package, &block)
|
def verify_package(package, &block)
|
||||||
|
|||||||
23
lib/cache.rb
23
lib/cache.rb
@@ -89,9 +89,11 @@ class W3DHub
|
|||||||
|
|
||||||
# Download a W3D Hub package
|
# Download a W3D Hub package
|
||||||
def self.fetch_package(package, block)
|
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)
|
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 = { "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
|
start_from_bytes = package.custom_partially_valid_at_bytes
|
||||||
|
|
||||||
logger.info(LOG_TAG) { " Start from bytes: #{start_from_bytes} of #{package.size}" }
|
logger.info(LOG_TAG) { " Start from bytes: #{start_from_bytes} of #{package.size}" }
|
||||||
@@ -112,16 +114,25 @@ class W3DHub
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Create a new connection due to some weirdness somewhere in Excon
|
# Create a new connection due to some weirdness somewhere in Excon
|
||||||
response = Excon.post(
|
response = Excon.send(
|
||||||
"#{Api::ENDPOINT}/apis/launcher/1/get-package",
|
package.download_url ? :get : :post,
|
||||||
|
endpoint_download_url,
|
||||||
tcp_nodelay: true,
|
tcp_nodelay: true,
|
||||||
headers: headers,
|
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,
|
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
|
ensure
|
||||||
file&.close
|
file&.close
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ class W3DHub
|
|||||||
hash[:applications] << app unless app_in_array
|
hash[:applications] << app unless app_in_array
|
||||||
end
|
end
|
||||||
|
|
||||||
Store.applications = Api::Applications.new(hash.to_json)
|
Store.applications = Api::Applications.new(hash.to_json) unless hash[:applications].empty?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class W3DHub
|
class W3DHub
|
||||||
DIR_NAME = "W3DHubAlt"
|
DIR_NAME = "W3DHubAlt"
|
||||||
VERSION = "0.5.1"
|
VERSION = "0.6.0"
|
||||||
end
|
end
|
||||||
Reference in New Issue
Block a user