From 3a15789a296c5088a08073869b6ebf7b7e078e96 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Wed, 4 Nov 2026 19:54:44 -0600 Subject: [PATCH] Support downloading packages from upstream --- lib/worker/task.rb | 18 ++++++++++++++---- lib/worker/w3dhub_api.rb | 21 +++++++++++++++++++-- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/lib/worker/task.rb b/lib/worker/task.rb index 32876d5..bc3087f 100644 --- a/lib/worker/task.rb +++ b/lib/worker/task.rb @@ -288,8 +288,19 @@ module W3DHubLauncher end end else - # TODO xD - @worker.w3dhub_api.fetch_package("TODO") + @worker.w3dhub_api.fetch_package(pkg, path: file_path, range: partially_valid_at) do |downloaded_bytes, total_downloaded_bytes, content_length| + sample_downloaded_bytes += downloaded_bytes + total_data_downloaded_bytes += downloaded_bytes + + if Gosu.milliseconds - last_sample_time_ms >= 1_000 + last_sample_time_ms = Gosu.milliseconds + + fraction = (total_downloaded_bytes + partially_valid_at) / pkg.file_size.to_f + + update_stage_progress(label: "Downloading #{W3DHubLauncher.format_size(total_data_downloaded_bytes)} / #{W3DHubLauncher.format_size(total_data_to_download_bytes)} [#{W3DHubLauncher.format_size(sample_downloaded_bytes)}/s]", fraction: (i.to_f + fraction) / manifest_packages.size) + sample_downloaded_bytes = 0 + end + end end abort_task!("Failed to download required package: #{pkg.name}:#{pkg.version} (#{result.error})") unless result.okay? @@ -530,8 +541,7 @@ module W3DHubLauncher result = if manifest_package.download_url @worker.w3dhub_api.download(manifest_package.download_url, path: file_path) else - # TODO xD - @worker.w3dhub_api.fetch_package("TODO") + @worker.w3dhub_api.fetch_package(manifest_package, path: file_path) end if result.okay? diff --git a/lib/worker/w3dhub_api.rb b/lib/worker/w3dhub_api.rb index ed6f538..12fb211 100644 --- a/lib/worker/w3dhub_api.rb +++ b/lib/worker/w3dhub_api.rb @@ -82,6 +82,8 @@ module W3DHubLauncher end result.data = true + else + result.error = response.read end rescue StandardError => e result.error = e @@ -265,8 +267,23 @@ module W3DHubLauncher fetch("#{@access_token ? PRIMARY_W3DHUB_API_ENDPOINT : ALTERNATIVE_W3DHUB_API_ENDPOINT}/apis/launcher/1/get-package-details", method: :post, body: body, headers: headers(form_encoded: true)) end - def download_package() - download() + def fetch_package(manifest_package, path:, range: 0) + body = URI.encode_www_form( + "data": JSON.dump({ + category: manifest_package.category, + subcategory: manifest_package.subcategory, + name: manifest_package.name, + version: manifest_package.version + }) + ) + + download( + "#{W3DHubApi::PRIMARY_W3DHUB_API_ENDPOINT}/apis/launcher/1/get-package", + path: path, + method: :post, + body: body, + headers: headers(form_encoded: true, range: range <= 0 ? nil : range) + ) end end end